blob: 451aafde16a94d979d15645a5036f8ab36c99a4e [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
164defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
168defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
174def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
175def : WriteRes<WriteVecMove, [HWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000178defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
180defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000181defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000183defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000184defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
185defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000186defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000187defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
188defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
189defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000190defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000191
192// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193
Quentin Colombetca498512014-02-24 19:33:51 +0000194// Packed Compare Implicit Length Strings, Return Mask
195def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 11;
197 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let Latency = 17;
202 let NumMicroOps = 4;
203 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000204}
205
206// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
208 let Latency = 19;
209 let NumMicroOps = 9;
210 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
213 let Latency = 25;
214 let NumMicroOps = 10;
215 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000216}
217
218// Packed Compare Implicit Length Strings, Return Index
219def : WriteRes<WritePCmpIStrI, [HWPort0]> {
220 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000222 let ResourceCycles = [3];
223}
224def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let Latency = 17;
226 let NumMicroOps = 4;
227 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000228}
229
230// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
232 let Latency = 18;
233 let NumMicroOps = 8;
234 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
237 let Latency = 24;
238 let NumMicroOps = 9;
239 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrima2f26782018-03-27 20:38:54 +0000242// MOVMSK Instructions.
243def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
244def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
245def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
246
Quentin Colombetca498512014-02-24 19:33:51 +0000247// AES Instructions.
248def : WriteRes<WriteAESDecEnc, [HWPort5]> {
249 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000251 let ResourceCycles = [1];
252}
253def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let Latency = 13;
255 let NumMicroOps = 2;
256 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000257}
258
259def : WriteRes<WriteAESIMC, [HWPort5]> {
260 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [2];
263}
264def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let Latency = 20;
266 let NumMicroOps = 3;
267 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
271 let Latency = 29;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
276 let Latency = 34;
277 let NumMicroOps = 11;
278 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000279}
280
281// Carry-less multiplication instructions.
282def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 11;
284 let NumMicroOps = 3;
285 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
287def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288 let Latency = 17;
289 let NumMicroOps = 4;
290 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000291}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000292
Craig Topper05242bf2018-04-21 18:07:36 +0000293// Load/store MXCSR.
294def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
295def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
296
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000297def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
298def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000299def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
300def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000301
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302//================ Exceptions ================//
303
304//-- Specific Scheduling Models --//
305
306// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308
Craig Topper02daec02018-04-02 01:12:32 +0000309def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313}
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 3;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 2;
320}
321
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323 let NumMicroOps = 3;
324 let ResourceCycles = [2, 1];
325}
326
Michael Zuckermanf6684002017-06-28 11:23:31 +0000327// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000328def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330
Craig Topper02daec02018-04-02 01:12:32 +0000331def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000332 let NumMicroOps = 2;
333 let ResourceCycles = [2];
334}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335
336// Notation:
337// - r: register.
338// - mm: 64 bit mmx register.
339// - x = 128 bit xmm register.
340// - (x)mm = mmx or xmm register.
341// - y = 256 bit ymm register.
342// - v = any vector register.
343// - m = memory.
344
345//=== Integer Instructions ===//
346//-- Move instructions --//
347
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350 let Latency = 7;
351 let NumMicroOps = 3;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 19;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let NumMicroOps = 18;
364}
Craig Topper02daec02018-04-02 01:12:32 +0000365def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367//-- Arithmetic instructions --//
368
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369// DIV.
370// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000371def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372 let Latency = 22;
373 let NumMicroOps = 9;
374}
Craig Topper02daec02018-04-02 01:12:32 +0000375def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377// IDIV.
378// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000379def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380 let Latency = 23;
381 let NumMicroOps = 9;
382}
Craig Topper02daec02018-04-02 01:12:32 +0000383def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000387def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388 let NumMicroOps = 10;
389}
Craig Topper02daec02018-04-02 01:12:32 +0000390def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000394def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395 let NumMicroOps = 11;
396}
Craig Topper02daec02018-04-02 01:12:32 +0000397def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399//-- Control transfer instructions --//
400
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402// i.
Craig Topper02daec02018-04-02 01:12:32 +0000403def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404 let NumMicroOps = 4;
405 let ResourceCycles = [1, 2, 1];
406}
Craig Topper02daec02018-04-02 01:12:32 +0000407def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408
409// BOUND.
410// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 15;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000417def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418 let NumMicroOps = 4;
419}
Craig Topper02daec02018-04-02 01:12:32 +0000420def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421
422//-- String instructions --//
423
424// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000425def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426
427// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000428def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000429
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000431def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432 let Latency = 4;
433 let NumMicroOps = 5;
434 let ResourceCycles = [2, 1, 2];
435}
Craig Topper02daec02018-04-02 01:12:32 +0000436def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000439def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440 let Latency = 4;
441 let NumMicroOps = 5;
442 let ResourceCycles = [2, 3];
443}
Craig Topper02daec02018-04-02 01:12:32 +0000444def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000445
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446//-- Other --//
447
Gadi Haberd76f7b82017-08-28 10:04:16 +0000448// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 34;
451}
Craig Topper02daec02018-04-02 01:12:32 +0000452def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
454// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000455def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456 let NumMicroOps = 17;
457 let ResourceCycles = [1, 16];
458}
Craig Topper02daec02018-04-02 01:12:32 +0000459def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460
461//=== Floating Point x87 Instructions ===//
462//-- Move instructions --//
463
464// FLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468// FBLD.
469// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000470def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471 let Latency = 47;
472 let NumMicroOps = 43;
473}
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
476// FST(P).
477// r.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
Michael Zuckermanf6684002017-06-28 11:23:31 +0000483// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 147;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000496def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000497 let NumMicroOps = 90;
498}
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501//-- Arithmetic instructions --//
502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Craig Topper02daec02018-04-02 01:12:32 +0000537def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Craig Topper02daec02018-04-02 01:12:32 +0000546def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Craig Topper02daec02018-04-02 01:12:32 +0000553def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
560defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000621 "MOVSX(16|32|64)rm32",
622 "MOVSX(16|32|64)rm8",
623 "MOVZX(16|32|64)rm16",
624 "MOVZX(16|32|64)rm8",
625 "PREFETCHNTA",
626 "PREFETCHT0",
627 "PREFETCHT1",
628 "PREFETCHT2",
629 "(V?)MOV64toPQIrm",
630 "(V?)MOVDDUPrm",
631 "(V?)MOVDI2PDIrm",
632 "(V?)MOVQI2PQIrm",
633 "(V?)MOVSDrm",
634 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000635
Gadi Haberd76f7b82017-08-28 10:04:16 +0000636def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
637 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000638 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000639 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000640}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000641def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
642 "MMX_MOVD64from64rm",
643 "MMX_MOVD64mr",
644 "MMX_MOVNTQmr",
645 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000646 "MOVNTI_64mr",
647 "MOVNTImr",
648 "ST_FP32m",
649 "ST_FP64m",
650 "ST_FP80m",
651 "VEXTRACTF128mr",
652 "VEXTRACTI128mr",
653 "(V?)MOVAPD(Y?)mr",
654 "(V?)MOVAPS(V?)mr",
655 "(V?)MOVDQA(Y?)mr",
656 "(V?)MOVDQU(Y?)mr",
657 "(V?)MOVHPDmr",
658 "(V?)MOVHPSmr",
659 "(V?)MOVLPDmr",
660 "(V?)MOVLPSmr",
661 "(V?)MOVNTDQ(Y?)mr",
662 "(V?)MOVNTPD(Y?)mr",
663 "(V?)MOVNTPS(Y?)mr",
664 "(V?)MOVPDI2DImr",
665 "(V?)MOVPQI2QImr",
666 "(V?)MOVPQIto64mr",
667 "(V?)MOVSDmr",
668 "(V?)MOVSSmr",
669 "(V?)MOVUPD(Y?)mr",
670 "(V?)MOVUPS(Y?)mr",
671 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000672
Gadi Haberd76f7b82017-08-28 10:04:16 +0000673def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
674 let Latency = 1;
675 let NumMicroOps = 1;
676 let ResourceCycles = [1];
677}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000678def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
679 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000680 "(V?)MOVPDI2DIrr",
681 "(V?)MOVPQIto64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000682 "VPSLLVQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000683 "VPSRLVQ(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000684 "VTESTPD(Y?)rr",
685 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000686
687def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
688 let Latency = 1;
689 let NumMicroOps = 1;
690 let ResourceCycles = [1];
691}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000692def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
693 "COM_FST0r",
694 "UCOM_FPr",
695 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000696
697def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
698 let Latency = 1;
699 let NumMicroOps = 1;
700 let ResourceCycles = [1];
701}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000702def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000703 "MMX_MOVD64to64rr",
704 "MMX_MOVQ2DQrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000705 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000706 "(V?)MOV64toPQIrr",
707 "(V?)MOVAPD(Y?)rr",
708 "(V?)MOVAPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000709 "(V?)MOVDI2PDIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000710 "(V?)MOVUPD(Y?)rr",
711 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000712 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000713 "VPBROADCASTDrr",
714 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000715 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000716 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000717
718def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
719 let Latency = 1;
720 let NumMicroOps = 1;
721 let ResourceCycles = [1];
722}
723def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
724
725def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
726 let Latency = 1;
727 let NumMicroOps = 1;
728 let ResourceCycles = [1];
729}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
731 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000732
733def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
734 let Latency = 1;
735 let NumMicroOps = 1;
736 let ResourceCycles = [1];
737}
Craig Topperfbe31322018-04-05 21:56:19 +0000738def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000739def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
740 "BT(16|32|64)rr",
741 "BTC(16|32|64)ri8",
742 "BTC(16|32|64)rr",
743 "BTR(16|32|64)ri8",
744 "BTR(16|32|64)rr",
745 "BTS(16|32|64)ri8",
746 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000747 "RORX(32|64)ri",
748 "SAR(8|16|32|64)r1",
749 "SAR(8|16|32|64)ri",
750 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000751 "SHL(8|16|32|64)r1",
752 "SHL(8|16|32|64)ri",
753 "SHLX(32|64)rr",
754 "SHR(8|16|32|64)r1",
755 "SHR(8|16|32|64)ri",
756 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000757
758def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
759 let Latency = 1;
760 let NumMicroOps = 1;
761 let ResourceCycles = [1];
762}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000763def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
764 "BLSI(32|64)rr",
765 "BLSMSK(32|64)rr",
766 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000767 "LEA(16|32|64)(_32)?r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000768
769def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
770 let Latency = 1;
771 let NumMicroOps = 1;
772 let ResourceCycles = [1];
773}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000774def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000775 "(V?)MOVDQA(Y?)rr",
776 "(V?)MOVDQU(Y?)rr",
777 "(V?)MOVPQI2QIrr",
778 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000779 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000780
781def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
782 let Latency = 1;
783 let NumMicroOps = 1;
784 let ResourceCycles = [1];
785}
Craig Topperfbe31322018-04-05 21:56:19 +0000786def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000787def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000788 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000789 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000790 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000791 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000792 "SGDT64m",
793 "SIDT64m",
794 "SLDT64m",
795 "SMSW16m",
796 "STC",
797 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000798 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000799
800def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000801 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000802 let NumMicroOps = 2;
803 let ResourceCycles = [1,1];
804}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000805def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
806 "MMX_PSLLQrm",
807 "MMX_PSLLWrm",
808 "MMX_PSRADrm",
809 "MMX_PSRAWrm",
810 "MMX_PSRLDrm",
811 "MMX_PSRLQrm",
812 "MMX_PSRLWrm",
813 "VCVTPH2PSrm",
814 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000815
Gadi Haber2cf601f2017-12-08 09:48:44 +0000816def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
817 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000818 let NumMicroOps = 2;
819 let ResourceCycles = [1,1];
820}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000821def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
822 "(V?)CVTSS2SDrm",
823 "VPSLLVQrm",
824 "VPSRLVQrm",
825 "VTESTPDrm",
826 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000827
828def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
829 let Latency = 8;
830 let NumMicroOps = 2;
831 let ResourceCycles = [1,1];
832}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000833def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
834 "VPSLLQYrm",
835 "VPSLLVQYrm",
836 "VPSLLWYrm",
837 "VPSRADYrm",
838 "VPSRAWYrm",
839 "VPSRLDYrm",
840 "VPSRLQYrm",
841 "VPSRLVQYrm",
842 "VPSRLWYrm",
843 "VTESTPDYrm",
844 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000845
846def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
847 let Latency = 8;
848 let NumMicroOps = 2;
849 let ResourceCycles = [1,1];
850}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000851def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000852 "FCOM64m",
853 "FCOMP32m",
854 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000855 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000856 "PDEP(32|64)rm",
857 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000858 "(V?)ADDSDrm",
859 "(V?)ADDSSrm",
860 "(V?)CMPSDrm",
861 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000862 "(V?)MAX(C?)SDrm",
863 "(V?)MAX(C?)SSrm",
864 "(V?)MIN(C?)SDrm",
865 "(V?)MIN(C?)SSrm",
866 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000867 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000868
Craig Topperf846e2d2018-04-19 05:34:05 +0000869def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
870 let Latency = 8;
871 let NumMicroOps = 3;
872 let ResourceCycles = [1,1,1];
873}
874def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
875
876def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
877 let Latency = 9;
878 let NumMicroOps = 5;
879 let ResourceCycles = [1,1,2,1];
880}
881def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
882
Gadi Haberd76f7b82017-08-28 10:04:16 +0000883def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000884 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000885 let NumMicroOps = 2;
886 let ResourceCycles = [1,1];
887}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000888def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000889 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000890 "(V?)PACKSSDWrm",
891 "(V?)PACKSSWBrm",
892 "(V?)PACKUSDWrm",
893 "(V?)PACKUSWBrm",
894 "(V?)PALIGNRrmi",
895 "(V?)PBLENDWrmi",
896 "VPERMILPDmi",
897 "VPERMILPDrm",
898 "VPERMILPSmi",
899 "VPERMILPSrm",
900 "(V?)PSHUFBrm",
901 "(V?)PSHUFDmi",
902 "(V?)PSHUFHWmi",
903 "(V?)PSHUFLWmi",
904 "(V?)PUNPCKHBWrm",
905 "(V?)PUNPCKHDQrm",
906 "(V?)PUNPCKHQDQrm",
907 "(V?)PUNPCKHWDrm",
908 "(V?)PUNPCKLBWrm",
909 "(V?)PUNPCKLDQrm",
910 "(V?)PUNPCKLQDQrm",
911 "(V?)PUNPCKLWDrm",
912 "(V?)SHUFPDrmi",
913 "(V?)SHUFPSrmi",
914 "(V?)UNPCKHPDrm",
915 "(V?)UNPCKHPSrm",
916 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000917 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000918
Gadi Haber2cf601f2017-12-08 09:48:44 +0000919def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
920 let Latency = 8;
921 let NumMicroOps = 2;
922 let ResourceCycles = [1,1];
923}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000924def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
925 "VANDNPSYrm",
926 "VANDPDYrm",
927 "VANDPSYrm",
928 "VORPDYrm",
929 "VORPSYrm",
930 "VPACKSSDWYrm",
931 "VPACKSSWBYrm",
932 "VPACKUSDWYrm",
933 "VPACKUSWBYrm",
934 "VPALIGNRYrmi",
935 "VPBLENDWYrmi",
936 "VPERMILPDYmi",
937 "VPERMILPDYrm",
938 "VPERMILPSYmi",
939 "VPERMILPSYrm",
940 "VPMOVSXBDYrm",
941 "VPMOVSXBQYrm",
942 "VPMOVSXWQYrm",
943 "VPSHUFBYrm",
944 "VPSHUFDYmi",
945 "VPSHUFHWYmi",
946 "VPSHUFLWYmi",
947 "VPUNPCKHBWYrm",
948 "VPUNPCKHDQYrm",
949 "VPUNPCKHQDQYrm",
950 "VPUNPCKHWDYrm",
951 "VPUNPCKLBWYrm",
952 "VPUNPCKLDQYrm",
953 "VPUNPCKLQDQYrm",
954 "VPUNPCKLWDYrm",
955 "VSHUFPDYrmi",
956 "VSHUFPSYrmi",
957 "VUNPCKHPDYrm",
958 "VUNPCKHPSYrm",
959 "VUNPCKLPDYrm",
960 "VUNPCKLPSYrm",
961 "VXORPDYrm",
962 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000963
964def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
965 let Latency = 6;
966 let NumMicroOps = 2;
967 let ResourceCycles = [1,1];
968}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000969def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
970 "MMX_PINSRWrm",
971 "MMX_PSHUFBrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000972 "MMX_PUNPCKHBWirm",
973 "MMX_PUNPCKHDQirm",
974 "MMX_PUNPCKHWDirm",
975 "MMX_PUNPCKLBWirm",
976 "MMX_PUNPCKLDQirm",
977 "MMX_PUNPCKLWDirm",
978 "(V?)MOVHPDrm",
979 "(V?)MOVHPSrm",
980 "(V?)MOVLPDrm",
981 "(V?)MOVLPSrm",
982 "(V?)PINSRBrm",
983 "(V?)PINSRDrm",
984 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000985 "(V?)PINSRWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000986
Gadi Haberd76f7b82017-08-28 10:04:16 +0000987def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000988 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000989 let NumMicroOps = 2;
990 let ResourceCycles = [1,1];
991}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000992def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
993 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000994
995def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000996 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000997 let NumMicroOps = 2;
998 let ResourceCycles = [1,1];
999}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001000def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1001 "RORX(32|64)mi",
1002 "SARX(32|64)rm",
1003 "SHLX(32|64)rm",
1004 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001005
1006def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001007 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001008 let NumMicroOps = 2;
1009 let ResourceCycles = [1,1];
1010}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001011def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1012 "BLSI(32|64)rm",
1013 "BLSMSK(32|64)rm",
1014 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001015 "MMX_PADD(B|D|Q|W)irm",
1016 "MMX_PADDS(B|W)irm",
1017 "MMX_PADDUS(B|W)irm",
1018 "MMX_PAVG(B|W)irm",
1019 "MMX_PCMPEQ(B|D|W)irm",
1020 "MMX_PCMPGT(B|D|W)irm",
1021 "MMX_P(MAX|MIN)SWirm",
1022 "MMX_P(MAX|MIN)UBirm",
1023 "MMX_PSIGN(B|D|W)rm",
1024 "MMX_PSUB(B|D|Q|W)irm",
1025 "MMX_PSUBS(B|W)irm",
1026 "MMX_PSUBUS(B|W)irm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001027 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001028
1029def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1030 let Latency = 7;
1031 let NumMicroOps = 2;
1032 let ResourceCycles = [1,1];
1033}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001034def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1035 "(V?)PABSDrm",
1036 "(V?)PABSWrm",
1037 "(V?)PADDBrm",
1038 "(V?)PADDDrm",
1039 "(V?)PADDQrm",
1040 "(V?)PADDSBrm",
1041 "(V?)PADDSWrm",
1042 "(V?)PADDUSBrm",
1043 "(V?)PADDUSWrm",
1044 "(V?)PADDWrm",
1045 "(V?)PAVGBrm",
1046 "(V?)PAVGWrm",
1047 "(V?)PCMPEQBrm",
1048 "(V?)PCMPEQDrm",
1049 "(V?)PCMPEQQrm",
1050 "(V?)PCMPEQWrm",
1051 "(V?)PCMPGTBrm",
1052 "(V?)PCMPGTDrm",
1053 "(V?)PCMPGTWrm",
1054 "(V?)PMAXSBrm",
1055 "(V?)PMAXSDrm",
1056 "(V?)PMAXSWrm",
1057 "(V?)PMAXUBrm",
1058 "(V?)PMAXUDrm",
1059 "(V?)PMAXUWrm",
1060 "(V?)PMINSBrm",
1061 "(V?)PMINSDrm",
1062 "(V?)PMINSWrm",
1063 "(V?)PMINUBrm",
1064 "(V?)PMINUDrm",
1065 "(V?)PMINUWrm",
1066 "(V?)PSIGNBrm",
1067 "(V?)PSIGNDrm",
1068 "(V?)PSIGNWrm",
1069 "(V?)PSUBBrm",
1070 "(V?)PSUBDrm",
1071 "(V?)PSUBQrm",
1072 "(V?)PSUBSBrm",
1073 "(V?)PSUBSWrm",
1074 "(V?)PSUBUSBrm",
1075 "(V?)PSUBUSWrm",
1076 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001077
1078def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1079 let Latency = 8;
1080 let NumMicroOps = 2;
1081 let ResourceCycles = [1,1];
1082}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001083def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1084 "VPABSDYrm",
1085 "VPABSWYrm",
1086 "VPADDBYrm",
1087 "VPADDDYrm",
1088 "VPADDQYrm",
1089 "VPADDSBYrm",
1090 "VPADDSWYrm",
1091 "VPADDUSBYrm",
1092 "VPADDUSWYrm",
1093 "VPADDWYrm",
1094 "VPAVGBYrm",
1095 "VPAVGWYrm",
1096 "VPCMPEQBYrm",
1097 "VPCMPEQDYrm",
1098 "VPCMPEQQYrm",
1099 "VPCMPEQWYrm",
1100 "VPCMPGTBYrm",
1101 "VPCMPGTDYrm",
1102 "VPCMPGTWYrm",
1103 "VPMAXSBYrm",
1104 "VPMAXSDYrm",
1105 "VPMAXSWYrm",
1106 "VPMAXUBYrm",
1107 "VPMAXUDYrm",
1108 "VPMAXUWYrm",
1109 "VPMINSBYrm",
1110 "VPMINSDYrm",
1111 "VPMINSWYrm",
1112 "VPMINUBYrm",
1113 "VPMINUDYrm",
1114 "VPMINUWYrm",
1115 "VPSIGNBYrm",
1116 "VPSIGNDYrm",
1117 "VPSIGNWYrm",
1118 "VPSUBBYrm",
1119 "VPSUBDYrm",
1120 "VPSUBQYrm",
1121 "VPSUBSBYrm",
1122 "VPSUBSWYrm",
1123 "VPSUBUSBYrm",
1124 "VPSUBUSWYrm",
1125 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001126
1127def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001128 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001129 let NumMicroOps = 2;
1130 let ResourceCycles = [1,1];
1131}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001132def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1133 "(V?)BLENDPSrmi",
1134 "VINSERTF128rm",
1135 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001136 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001137
Gadi Haber2cf601f2017-12-08 09:48:44 +00001138def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1139 let Latency = 6;
1140 let NumMicroOps = 2;
1141 let ResourceCycles = [1,1];
1142}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001143def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1144 "MMX_PANDirm",
1145 "MMX_PORirm",
1146 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001147
1148def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1149 let Latency = 8;
1150 let NumMicroOps = 2;
1151 let ResourceCycles = [1,1];
1152}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001153def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1154 "VBLENDPSYrmi",
1155 "VPANDNYrm",
1156 "VPANDYrm",
1157 "VPBLENDDYrmi",
1158 "VPORYrm",
1159 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001160
Gadi Haberd76f7b82017-08-28 10:04:16 +00001161def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001162 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001163 let NumMicroOps = 2;
1164 let ResourceCycles = [1,1];
1165}
Craig Topper2d451e72018-03-18 08:38:06 +00001166def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001167def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001168
1169def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001170 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
1174def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1175
1176def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001177 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001178 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001179 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001180}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001181def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1182 "(V?)PEXTRBmr",
1183 "(V?)PEXTRDmr",
1184 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +00001185 "(V?)PEXTRWmr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001186
Gadi Haberd76f7b82017-08-28 10:04:16 +00001187def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001188 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001189 let NumMicroOps = 3;
1190 let ResourceCycles = [1,1,1];
1191}
1192def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001193
Gadi Haberd76f7b82017-08-28 10:04:16 +00001194def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001195 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001196 let NumMicroOps = 3;
1197 let ResourceCycles = [1,1,1];
1198}
1199def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1200
1201def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001202 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001203 let NumMicroOps = 3;
1204 let ResourceCycles = [1,1,1];
1205}
1206def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1207
1208def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001209 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001210 let NumMicroOps = 3;
1211 let ResourceCycles = [1,1,1];
1212}
Craig Topper2d451e72018-03-18 08:38:06 +00001213def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001214def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1215 "PUSH64i8",
1216 "STOSB",
1217 "STOSL",
1218 "STOSQ",
1219 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001220
1221def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001222 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001223 let NumMicroOps = 4;
1224 let ResourceCycles = [1,1,1,1];
1225}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001226def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1227 "BTR(16|32|64)mi8",
1228 "BTS(16|32|64)mi8",
1229 "SAR(8|16|32|64)m1",
1230 "SAR(8|16|32|64)mi",
1231 "SHL(8|16|32|64)m1",
1232 "SHL(8|16|32|64)mi",
1233 "SHR(8|16|32|64)m1",
1234 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001235
1236def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001237 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001238 let NumMicroOps = 4;
1239 let ResourceCycles = [1,1,1,1];
1240}
Craig Topperf0d04262018-04-06 16:16:48 +00001241def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1242 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001243
1244def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001245 let Latency = 2;
1246 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001247 let ResourceCycles = [2];
1248}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001249def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1250 "BLENDVPSrr0",
1251 "MMX_PINSRWrr",
1252 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001253 "VBLENDVPD(Y?)rr",
1254 "VBLENDVPS(Y?)rr",
1255 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001256 "(V?)PINSRBrr",
1257 "(V?)PINSRDrr",
1258 "(V?)PINSRQrr",
1259 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001260
Gadi Haberd76f7b82017-08-28 10:04:16 +00001261def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1262 let Latency = 2;
1263 let NumMicroOps = 2;
1264 let ResourceCycles = [2];
1265}
1266def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1267
1268def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1269 let Latency = 2;
1270 let NumMicroOps = 2;
1271 let ResourceCycles = [2];
1272}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001273def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1274 "ROL(8|16|32|64)ri",
1275 "ROR(8|16|32|64)r1",
1276 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001277
1278def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1279 let Latency = 2;
1280 let NumMicroOps = 2;
1281 let ResourceCycles = [2];
1282}
1283def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1284def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1285def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1286def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1287
1288def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1289 let Latency = 2;
1290 let NumMicroOps = 2;
1291 let ResourceCycles = [1,1];
1292}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001293def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1294 "VCVTPH2PSYrr",
1295 "VCVTPH2PSrr",
1296 "(V?)CVTPS2PDrr",
1297 "(V?)CVTSS2SDrr",
1298 "(V?)EXTRACTPSrr",
1299 "(V?)PEXTRBrr",
1300 "(V?)PEXTRDrr",
1301 "(V?)PEXTRQrr",
1302 "(V?)PEXTRWrr",
1303 "(V?)PSLLDrr",
1304 "(V?)PSLLQrr",
1305 "(V?)PSLLWrr",
1306 "(V?)PSRADrr",
1307 "(V?)PSRAWrr",
1308 "(V?)PSRLDrr",
1309 "(V?)PSRLQrr",
1310 "(V?)PSRLWrr",
1311 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001312
1313def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1314 let Latency = 2;
1315 let NumMicroOps = 2;
1316 let ResourceCycles = [1,1];
1317}
1318def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1319
1320def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1321 let Latency = 2;
1322 let NumMicroOps = 2;
1323 let ResourceCycles = [1,1];
1324}
1325def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1326
1327def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1328 let Latency = 2;
1329 let NumMicroOps = 2;
1330 let ResourceCycles = [1,1];
1331}
Craig Topper498875f2018-04-04 17:54:19 +00001332def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1333
1334def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1335 let Latency = 1;
1336 let NumMicroOps = 1;
1337 let ResourceCycles = [1];
1338}
1339def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001340
1341def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1342 let Latency = 2;
1343 let NumMicroOps = 2;
1344 let ResourceCycles = [1,1];
1345}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001346def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1347def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1348 "ADC(8|16|32|64)rr",
1349 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001350 "SBB(8|16|32|64)ri",
1351 "SBB(8|16|32|64)rr",
1352 "SBB(8|16|32|64)i",
1353 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001354
1355def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001356 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001357 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001358 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001359}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001360def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1361 "BLENDVPSrm0",
1362 "PBLENDVBrm0",
1363 "VBLENDVPDrm",
1364 "VBLENDVPSrm",
1365 "VMASKMOVPDrm",
1366 "VMASKMOVPSrm",
1367 "VPBLENDVBrm",
1368 "VPMASKMOVDrm",
1369 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001370
Gadi Haber2cf601f2017-12-08 09:48:44 +00001371def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1372 let Latency = 9;
1373 let NumMicroOps = 3;
1374 let ResourceCycles = [2,1];
1375}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001376def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1377 "VBLENDVPSYrm",
1378 "VMASKMOVPDYrm",
1379 "VMASKMOVPSYrm",
1380 "VPBLENDVBYrm",
1381 "VPMASKMOVDYrm",
1382 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001383
1384def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1385 let Latency = 7;
1386 let NumMicroOps = 3;
1387 let ResourceCycles = [2,1];
1388}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001389def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1390 "MMX_PACKSSWBirm",
1391 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001392
Gadi Haberd76f7b82017-08-28 10:04:16 +00001393def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001394 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001395 let NumMicroOps = 3;
1396 let ResourceCycles = [1,2];
1397}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001398def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1399 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001400
1401def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001402 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,1,1];
1405}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001406def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1407 "(V?)PSLLQrm",
1408 "(V?)PSLLWrm",
1409 "(V?)PSRADrm",
1410 "(V?)PSRAWrm",
1411 "(V?)PSRLDrm",
1412 "(V?)PSRLQrm",
1413 "(V?)PSRLWrm",
1414 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415
1416def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001417 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001418 let NumMicroOps = 3;
1419 let ResourceCycles = [1,1,1];
1420}
1421def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1422
Gadi Haberd76f7b82017-08-28 10:04:16 +00001423def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001424 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001425 let NumMicroOps = 3;
1426 let ResourceCycles = [1,1,1];
1427}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001428def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1429 "RETL",
1430 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431
Gadi Haberd76f7b82017-08-28 10:04:16 +00001432def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001433 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001434 let NumMicroOps = 3;
1435 let ResourceCycles = [1,1,1];
1436}
Craig Topperc50570f2018-04-06 17:12:18 +00001437def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1438 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001439
1440def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001441 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001442 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001443 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001444}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001445def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001446
Gadi Haberd76f7b82017-08-28 10:04:16 +00001447def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001448 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001449 let NumMicroOps = 4;
1450 let ResourceCycles = [1,1,1,1];
1451}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001452def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1453 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001454
1455def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001456 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001457 let NumMicroOps = 5;
1458 let ResourceCycles = [1,1,1,2];
1459}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001460def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1461 "ROL(8|16|32|64)mi",
1462 "ROR(8|16|32|64)m1",
1463 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001464
1465def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001466 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001467 let NumMicroOps = 5;
1468 let ResourceCycles = [1,1,1,2];
1469}
Craig Topper13a16502018-03-19 00:56:09 +00001470def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001471
1472def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001473 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001474 let NumMicroOps = 5;
1475 let ResourceCycles = [1,1,1,1,1];
1476}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001477def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1478 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001479
Gadi Haberd76f7b82017-08-28 10:04:16 +00001480def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1481 let Latency = 3;
1482 let NumMicroOps = 1;
1483 let ResourceCycles = [1];
1484}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001485def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001486 "PDEP(32|64)rr",
1487 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001488 "SHLD(16|32|64)rri8",
1489 "SHRD(16|32|64)rri8",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001490 "(V?)CVTDQ2PS(Y?)rr",
1491 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim44278f62018-04-21 16:20:28 +00001492 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001493
Clement Courbet327fac42018-03-07 08:14:02 +00001494def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001495 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001496 let NumMicroOps = 2;
1497 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001498}
Clement Courbet327fac42018-03-07 08:14:02 +00001499def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001500
1501def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1502 let Latency = 3;
1503 let NumMicroOps = 1;
1504 let ResourceCycles = [1];
1505}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001506def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1507 "VBROADCASTSSYrr",
1508 "VEXTRACTF128rr",
1509 "VEXTRACTI128rr",
1510 "VINSERTF128rr",
1511 "VINSERTI128rr",
1512 "VPBROADCASTBYrr",
1513 "VPBROADCASTBrr",
1514 "VPBROADCASTDYrr",
1515 "VPBROADCASTQYrr",
1516 "VPBROADCASTWYrr",
1517 "VPBROADCASTWrr",
1518 "VPERM2F128rr",
1519 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001520 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001521 "VPERMQYri",
1522 "VPMOVSXBDYrr",
1523 "VPMOVSXBQYrr",
1524 "VPMOVSXBWYrr",
1525 "VPMOVSXDQYrr",
1526 "VPMOVSXWDYrr",
1527 "VPMOVSXWQYrr",
1528 "VPMOVZXBDYrr",
1529 "VPMOVZXBQYrr",
1530 "VPMOVZXBWYrr",
1531 "VPMOVZXDQYrr",
1532 "VPMOVZXWDYrr",
1533 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001534
1535def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001536 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001537 let NumMicroOps = 2;
1538 let ResourceCycles = [1,1];
1539}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001540def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1541 "(V?)ADDPSrm",
1542 "(V?)ADDSUBPDrm",
1543 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001544 "(V?)CVTDQ2PSrm",
1545 "(V?)CVTPS2DQrm",
1546 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001547 "(V?)SUBPDrm",
1548 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001549
Gadi Haber2cf601f2017-12-08 09:48:44 +00001550def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1551 let Latency = 10;
1552 let NumMicroOps = 2;
1553 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001554}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001555def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1556 "ADD_F64m",
1557 "ILD_F16m",
1558 "ILD_F32m",
1559 "ILD_F64m",
1560 "SUBR_F32m",
1561 "SUBR_F64m",
1562 "SUB_F32m",
1563 "SUB_F64m",
1564 "VADDPDYrm",
1565 "VADDPSYrm",
1566 "VADDSUBPDYrm",
1567 "VADDSUBPSYrm",
1568 "VCMPPDYrmi",
1569 "VCMPPSYrmi",
1570 "VCVTDQ2PSYrm",
1571 "VCVTPS2DQYrm",
1572 "VCVTTPS2DQYrm",
1573 "VMAX(C?)PDYrm",
1574 "VMAX(C?)PSYrm",
1575 "VMIN(C?)PDYrm",
1576 "VMIN(C?)PSYrm",
1577 "VSUBPDYrm",
1578 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001579
1580def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001581 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001582 let NumMicroOps = 2;
1583 let ResourceCycles = [1,1];
1584}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001585def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1586 "VPERM2I128rm",
1587 "VPERMDYrm",
1588 "VPERMPDYmi",
1589 "VPERMPSYrm",
1590 "VPERMQYmi",
1591 "VPMOVZXBDYrm",
1592 "VPMOVZXBQYrm",
1593 "VPMOVZXBWYrm",
1594 "VPMOVZXDQYrm",
1595 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001596
Gadi Haber2cf601f2017-12-08 09:48:44 +00001597def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1598 let Latency = 9;
1599 let NumMicroOps = 2;
1600 let ResourceCycles = [1,1];
1601}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001602def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1603 "VPMOVSXDQYrm",
1604 "VPMOVSXWDYrm",
1605 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001606
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001608 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001609 let NumMicroOps = 3;
1610 let ResourceCycles = [3];
1611}
Craig Topperb5f26592018-04-19 18:00:17 +00001612def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1613 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1614 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001615
1616def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1617 let Latency = 3;
1618 let NumMicroOps = 3;
1619 let ResourceCycles = [2,1];
1620}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001621def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1622 "VPSRAVD(Y?)rr",
1623 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001624
1625def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1626 let Latency = 3;
1627 let NumMicroOps = 3;
1628 let ResourceCycles = [2,1];
1629}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001630def: InstRW<[HWWriteResGroup56], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001631 "(V?)PHADDD(Y?)rr",
1632 "(V?)PHADDSW(Y?)rr",
1633 "(V?)PHADDW(Y?)rr",
1634 "(V?)PHSUBD(Y?)rr",
1635 "(V?)PHSUBSW(Y?)rr",
1636 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001637
1638def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1639 let Latency = 3;
1640 let NumMicroOps = 3;
1641 let ResourceCycles = [2,1];
1642}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001643def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1644 "MMX_PACKSSWBirr",
1645 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001646
1647def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1648 let Latency = 3;
1649 let NumMicroOps = 3;
1650 let ResourceCycles = [1,2];
1651}
1652def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1653
1654def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1655 let Latency = 3;
1656 let NumMicroOps = 3;
1657 let ResourceCycles = [1,2];
1658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001659def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1660 "RCL(8|16|32|64)r1",
1661 "RCL(8|16|32|64)ri",
1662 "RCR(8|16|32|64)r1",
1663 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001664
1665def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1666 let Latency = 3;
1667 let NumMicroOps = 3;
1668 let ResourceCycles = [2,1];
1669}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001670def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1671 "ROR(8|16|32|64)rCL",
1672 "SAR(8|16|32|64)rCL",
1673 "SHL(8|16|32|64)rCL",
1674 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001675
1676def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001677 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001678 let NumMicroOps = 3;
1679 let ResourceCycles = [1,1,1];
1680}
1681def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1682
1683def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001684 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001685 let NumMicroOps = 3;
1686 let ResourceCycles = [1,1,1];
1687}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001688def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1689 "ISTT_FP32m",
1690 "ISTT_FP64m",
1691 "IST_F16m",
1692 "IST_F32m",
1693 "IST_FP16m",
1694 "IST_FP32m",
1695 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001696
1697def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001698 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001699 let NumMicroOps = 4;
1700 let ResourceCycles = [2,1,1];
1701}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001702def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1703 "VPSRAVDYrm",
1704 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001705
1706def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1707 let Latency = 9;
1708 let NumMicroOps = 4;
1709 let ResourceCycles = [2,1,1];
1710}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001711def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1712 "VPSRAVDrm",
1713 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001714
1715def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001716 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001717 let NumMicroOps = 4;
1718 let ResourceCycles = [2,1,1];
1719}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001720def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001721
1722def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1723 let Latency = 10;
1724 let NumMicroOps = 4;
1725 let ResourceCycles = [2,1,1];
1726}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001727def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1728 "VPHADDSWYrm",
1729 "VPHADDWYrm",
1730 "VPHSUBDYrm",
1731 "VPHSUBSWYrm",
1732 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001733
1734def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1735 let Latency = 9;
1736 let NumMicroOps = 4;
1737 let ResourceCycles = [2,1,1];
1738}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001739def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1740 "(V?)PHADDSWrm",
1741 "(V?)PHADDWrm",
1742 "(V?)PHSUBDrm",
1743 "(V?)PHSUBSWrm",
1744 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001745
1746def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001747 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001748 let NumMicroOps = 4;
1749 let ResourceCycles = [1,1,2];
1750}
Craig Topperf4cd9082018-01-19 05:47:32 +00001751def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001752
1753def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001754 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001755 let NumMicroOps = 5;
1756 let ResourceCycles = [1,1,1,2];
1757}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001758def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1759 "RCL(8|16|32|64)mi",
1760 "RCR(8|16|32|64)m1",
1761 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001762
1763def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001764 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001765 let NumMicroOps = 5;
1766 let ResourceCycles = [1,1,2,1];
1767}
Craig Topper13a16502018-03-19 00:56:09 +00001768def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001769
1770def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001771 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001772 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001773 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001774}
Craig Topper9f834812018-04-01 21:54:24 +00001775def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001776
Gadi Haberd76f7b82017-08-28 10:04:16 +00001777def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001778 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001779 let NumMicroOps = 6;
1780 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001781}
Craig Topper9f834812018-04-01 21:54:24 +00001782def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001783 "CMPXCHG(8|16|32|64)rm",
1784 "ROL(8|16|32|64)mCL",
1785 "SAR(8|16|32|64)mCL",
1786 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001787 "SHL(8|16|32|64)mCL",
1788 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001789def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1790 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001791
Gadi Haberd76f7b82017-08-28 10:04:16 +00001792def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1793 let Latency = 4;
1794 let NumMicroOps = 2;
1795 let ResourceCycles = [1,1];
1796}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001797def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1798 "(V?)CVTSD2SIrr",
1799 "(V?)CVTSS2SI64rr",
1800 "(V?)CVTSS2SIrr",
1801 "(V?)CVTTSD2SI64rr",
1802 "(V?)CVTTSD2SIrr",
1803 "(V?)CVTTSS2SI64rr",
1804 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805
1806def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1807 let Latency = 4;
1808 let NumMicroOps = 2;
1809 let ResourceCycles = [1,1];
1810}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001811def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1812 "VPSLLDYrr",
1813 "VPSLLQYrr",
1814 "VPSLLWYrr",
1815 "VPSRADYrr",
1816 "VPSRAWYrr",
1817 "VPSRLDYrr",
1818 "VPSRLQYrr",
1819 "VPSRLWYrr",
1820 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001821
1822def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1823 let Latency = 4;
1824 let NumMicroOps = 2;
1825 let ResourceCycles = [1,1];
1826}
1827def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1828
1829def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1830 let Latency = 4;
1831 let NumMicroOps = 2;
1832 let ResourceCycles = [1,1];
1833}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001834def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1835 "MMX_CVTPI2PDirr",
1836 "MMX_CVTPS2PIirr",
1837 "MMX_CVTTPD2PIirr",
1838 "MMX_CVTTPS2PIirr",
1839 "(V?)CVTDQ2PDrr",
1840 "(V?)CVTPD2DQrr",
1841 "(V?)CVTPD2PSrr",
1842 "VCVTPS2PHrr",
1843 "(V?)CVTSD2SSrr",
1844 "(V?)CVTSI642SDrr",
1845 "(V?)CVTSI2SDrr",
1846 "(V?)CVTSI2SSrr",
1847 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001848
1849def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1850 let Latency = 4;
1851 let NumMicroOps = 2;
1852 let ResourceCycles = [1,1];
1853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001854def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001855
Craig Topperf846e2d2018-04-19 05:34:05 +00001856def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001857 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001858 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001859 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001860}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001861def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001862
Gadi Haberd76f7b82017-08-28 10:04:16 +00001863def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001864 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001865 let NumMicroOps = 3;
1866 let ResourceCycles = [2,1];
1867}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001868def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1869 "FICOM32m",
1870 "FICOMP16m",
1871 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001872
1873def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001874 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001875 let NumMicroOps = 3;
1876 let ResourceCycles = [1,1,1];
1877}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001878def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1879 "(V?)CVTSD2SIrm",
1880 "(V?)CVTSS2SI64rm",
1881 "(V?)CVTSS2SIrm",
1882 "(V?)CVTTSD2SI64rm",
1883 "(V?)CVTTSD2SIrm",
1884 "VCVTTSS2SI64rm",
1885 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001886
1887def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001888 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001889 let NumMicroOps = 3;
1890 let ResourceCycles = [1,1,1];
1891}
1892def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001893
1894def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1895 let Latency = 11;
1896 let NumMicroOps = 3;
1897 let ResourceCycles = [1,1,1];
1898}
1899def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001900
1901def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001902 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001903 let NumMicroOps = 3;
1904 let ResourceCycles = [1,1,1];
1905}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001906def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1907 "CVTPD2PSrm",
1908 "CVTTPD2DQrm",
1909 "MMX_CVTPD2PIirm",
1910 "MMX_CVTTPD2PIirm",
1911 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001912
1913def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1914 let Latency = 9;
1915 let NumMicroOps = 3;
1916 let ResourceCycles = [1,1,1];
1917}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001918def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1919 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920
1921def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001922 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001923 let NumMicroOps = 3;
1924 let ResourceCycles = [1,1,1];
1925}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001926def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001927
1928def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001929 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001930 let NumMicroOps = 3;
1931 let ResourceCycles = [1,1,1];
1932}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001933def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1934 "VPBROADCASTBrm",
1935 "VPBROADCASTWYrm",
1936 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937
1938def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1939 let Latency = 4;
1940 let NumMicroOps = 4;
1941 let ResourceCycles = [4];
1942}
1943def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
1944
1945def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1946 let Latency = 4;
1947 let NumMicroOps = 4;
1948 let ResourceCycles = [1,3];
1949}
1950def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
1951
1952def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1953 let Latency = 4;
1954 let NumMicroOps = 4;
1955 let ResourceCycles = [1,1,2];
1956}
1957def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1958
1959def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001960 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001961 let NumMicroOps = 4;
1962 let ResourceCycles = [1,1,1,1];
1963}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001964def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1965 "VMASKMOVPS(Y?)mr",
1966 "VPMASKMOVD(Y?)mr",
1967 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001968
1969def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001970 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001971 let NumMicroOps = 4;
1972 let ResourceCycles = [1,1,1,1];
1973}
1974def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
1975
1976def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001977 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001978 let NumMicroOps = 4;
1979 let ResourceCycles = [1,1,1,1];
1980}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001981def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1982 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001983
1984def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001985 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001986 let NumMicroOps = 5;
1987 let ResourceCycles = [1,2,1,1];
1988}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001989def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1990 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001991
1992def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001993 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001994 let NumMicroOps = 6;
1995 let ResourceCycles = [1,1,4];
1996}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001997def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1998 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001999
2000def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002001 let Latency = 5;
2002 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002003 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002004}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00002005def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002006
Gadi Haberd76f7b82017-08-28 10:04:16 +00002007def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002008 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002009 let NumMicroOps = 1;
2010 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002011}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002012def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2013 "(V?)MULPS(Y?)rr",
2014 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00002015 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002016
Gadi Haberd76f7b82017-08-28 10:04:16 +00002017def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002018 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002019 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002020 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002021}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002022def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2023 "MMX_PMADDWDirm",
2024 "MMX_PMULHRSWrm",
2025 "MMX_PMULHUWirm",
2026 "MMX_PMULHWirm",
2027 "MMX_PMULLWirm",
2028 "MMX_PMULUDQirm",
2029 "MMX_PSADBWirm",
2030 "(V?)RCPSSm",
2031 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002032
Craig Topper8104f262018-04-02 05:33:28 +00002033def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002034 let Latency = 16;
2035 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002036 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002037}
2038def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2039
Craig Topper8104f262018-04-02 05:33:28 +00002040def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002041 let Latency = 18;
2042 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002043 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002044}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002045def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002046
2047def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2048 let Latency = 11;
2049 let NumMicroOps = 2;
2050 let ResourceCycles = [1,1];
2051}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002052def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2053 "(V?)PHMINPOSUWrm",
2054 "(V?)PMADDUBSWrm",
2055 "(V?)PMADDWDrm",
2056 "(V?)PMULDQrm",
2057 "(V?)PMULHRSWrm",
2058 "(V?)PMULHUWrm",
2059 "(V?)PMULHWrm",
2060 "(V?)PMULLWrm",
2061 "(V?)PMULUDQrm",
2062 "(V?)PSADBWrm",
2063 "(V?)RCPPSm",
2064 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002065
2066def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2067 let Latency = 12;
2068 let NumMicroOps = 2;
2069 let ResourceCycles = [1,1];
2070}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002071def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2072 "MUL_F64m",
2073 "VPCMPGTQYrm",
2074 "VPMADDUBSWYrm",
2075 "VPMADDWDYrm",
2076 "VPMULDQYrm",
2077 "VPMULHRSWYrm",
2078 "VPMULHUWYrm",
2079 "VPMULHWYrm",
2080 "VPMULLWYrm",
2081 "VPMULUDQYrm",
2082 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002083
Gadi Haberd76f7b82017-08-28 10:04:16 +00002084def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002085 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002086 let NumMicroOps = 2;
2087 let ResourceCycles = [1,1];
2088}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002089def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2090 "(V?)MULPSrm",
2091 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002092
2093def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2094 let Latency = 12;
2095 let NumMicroOps = 2;
2096 let ResourceCycles = [1,1];
2097}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002098def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2099 "VMULPSYrm",
2100 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002101
2102def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2103 let Latency = 10;
2104 let NumMicroOps = 2;
2105 let ResourceCycles = [1,1];
2106}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002107def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2108 "(V?)MULSSrm",
2109 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002110
2111def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2112 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002113 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002114 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002115}
Simon Pilgrim44278f62018-04-21 16:20:28 +00002116def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002117
Gadi Haberd76f7b82017-08-28 10:04:16 +00002118def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2119 let Latency = 5;
2120 let NumMicroOps = 3;
2121 let ResourceCycles = [1,1,1];
2122}
2123def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2124
2125def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002126 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002127 let NumMicroOps = 3;
2128 let ResourceCycles = [1,1,1];
2129}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002130def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002131
2132def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002133 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002134 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002135 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002136}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002137def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2138 "(V?)HADDPSrm",
2139 "(V?)HSUBPDrm",
2140 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002141
Gadi Haber2cf601f2017-12-08 09:48:44 +00002142def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2143 let Latency = 12;
2144 let NumMicroOps = 4;
2145 let ResourceCycles = [1,2,1];
2146}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002147def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2148 "VHADDPSYrm",
2149 "VHSUBPDYrm",
2150 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002151
Gadi Haberd76f7b82017-08-28 10:04:16 +00002152def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002153 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002154 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002155 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002156}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002157def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002158
Gadi Haberd76f7b82017-08-28 10:04:16 +00002159def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002160 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002161 let NumMicroOps = 4;
2162 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002163}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002164def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002165
Gadi Haberd76f7b82017-08-28 10:04:16 +00002166def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2167 let Latency = 5;
2168 let NumMicroOps = 5;
2169 let ResourceCycles = [1,4];
2170}
2171def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2172
2173def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2174 let Latency = 5;
2175 let NumMicroOps = 5;
2176 let ResourceCycles = [1,4];
2177}
2178def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2179
2180def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2181 let Latency = 5;
2182 let NumMicroOps = 5;
2183 let ResourceCycles = [2,3];
2184}
Craig Topper13a16502018-03-19 00:56:09 +00002185def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186
2187def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2188 let Latency = 6;
2189 let NumMicroOps = 2;
2190 let ResourceCycles = [1,1];
2191}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002192def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2193 "VCVTPD2DQYrr",
2194 "VCVTPD2PSYrr",
2195 "VCVTPS2PHYrr",
2196 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002197
2198def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002199 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002200 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002201 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002202}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002203def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2204 "ADD_FI32m",
2205 "SUBR_FI16m",
2206 "SUBR_FI32m",
2207 "SUB_FI16m",
2208 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002209 "VROUNDPDYm",
2210 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002211
Gadi Haber2cf601f2017-12-08 09:48:44 +00002212def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2213 let Latency = 12;
2214 let NumMicroOps = 3;
2215 let ResourceCycles = [2,1];
2216}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002217def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2218 "(V?)ROUNDPSm",
2219 "(V?)ROUNDSDm",
2220 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002221
Gadi Haberd76f7b82017-08-28 10:04:16 +00002222def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002223 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002224 let NumMicroOps = 3;
2225 let ResourceCycles = [1,1,1];
2226}
2227def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2228
2229def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2230 let Latency = 6;
2231 let NumMicroOps = 4;
2232 let ResourceCycles = [1,1,2];
2233}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002234def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2235 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002236
2237def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002238 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002239 let NumMicroOps = 4;
2240 let ResourceCycles = [1,1,1,1];
2241}
2242def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2243
2244def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2245 let Latency = 6;
2246 let NumMicroOps = 4;
2247 let ResourceCycles = [1,1,1,1];
2248}
2249def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2250
2251def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2252 let Latency = 6;
2253 let NumMicroOps = 6;
2254 let ResourceCycles = [1,5];
2255}
2256def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2257
2258def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002259 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002260 let NumMicroOps = 6;
2261 let ResourceCycles = [1,1,1,1,2];
2262}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002263def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2264 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002265
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2267 let Latency = 7;
2268 let NumMicroOps = 3;
2269 let ResourceCycles = [1,2];
2270}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002271def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002272
2273def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002274 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002275 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002276 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002277}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002278def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002279
Gadi Haber2cf601f2017-12-08 09:48:44 +00002280def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2281 let Latency = 14;
2282 let NumMicroOps = 4;
2283 let ResourceCycles = [1,2,1];
2284}
2285def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2286
Gadi Haberd76f7b82017-08-28 10:04:16 +00002287def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2288 let Latency = 7;
2289 let NumMicroOps = 7;
2290 let ResourceCycles = [2,2,1,2];
2291}
Craig Topper2d451e72018-03-18 08:38:06 +00002292def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002293
2294def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002295 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002296 let NumMicroOps = 3;
2297 let ResourceCycles = [1,1,1];
2298}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002299def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2300 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301
2302def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2303 let Latency = 9;
2304 let NumMicroOps = 3;
2305 let ResourceCycles = [1,1,1];
2306}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002307def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002308
2309def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002310 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002311 let NumMicroOps = 4;
2312 let ResourceCycles = [1,1,1,1];
2313}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002314def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002315
Gadi Haber2cf601f2017-12-08 09:48:44 +00002316def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2317 let Latency = 17;
2318 let NumMicroOps = 3;
2319 let ResourceCycles = [2,1];
2320}
2321def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2322
Gadi Haberd76f7b82017-08-28 10:04:16 +00002323def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002324 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002325 let NumMicroOps = 10;
2326 let ResourceCycles = [1,1,1,4,1,2];
2327}
Craig Topper13a16502018-03-19 00:56:09 +00002328def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002329
Craig Topper8104f262018-04-02 05:33:28 +00002330def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002331 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002332 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002333 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002334}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002335def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2336 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002337
Gadi Haberd76f7b82017-08-28 10:04:16 +00002338def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2339 let Latency = 11;
2340 let NumMicroOps = 3;
2341 let ResourceCycles = [2,1];
2342}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002343def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2344 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002345
Gadi Haberd76f7b82017-08-28 10:04:16 +00002346def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002347 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002348 let NumMicroOps = 4;
2349 let ResourceCycles = [2,1,1];
2350}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002351def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2352 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002353
2354def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2355 let Latency = 11;
2356 let NumMicroOps = 7;
2357 let ResourceCycles = [2,2,3];
2358}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002359def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2360 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002361
2362def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2363 let Latency = 11;
2364 let NumMicroOps = 9;
2365 let ResourceCycles = [1,4,1,3];
2366}
2367def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2368
2369def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2370 let Latency = 11;
2371 let NumMicroOps = 11;
2372 let ResourceCycles = [2,9];
2373}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002374def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002375
2376def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002377 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002378 let NumMicroOps = 14;
2379 let ResourceCycles = [1,1,1,4,2,5];
2380}
2381def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2382
Craig Topper8104f262018-04-02 05:33:28 +00002383def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002384 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002385 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002386 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002387}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002388def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2389 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390
Craig Topper8104f262018-04-02 05:33:28 +00002391def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002392 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002393 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002394 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002395}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002396def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002397
2398def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002399 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002400 let NumMicroOps = 11;
2401 let ResourceCycles = [2,1,1,3,1,3];
2402}
Craig Topper13a16502018-03-19 00:56:09 +00002403def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002404
Craig Topper8104f262018-04-02 05:33:28 +00002405def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002406 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002407 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002408 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002409}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002410def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002411
Gadi Haberd76f7b82017-08-28 10:04:16 +00002412def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2413 let Latency = 14;
2414 let NumMicroOps = 4;
2415 let ResourceCycles = [2,1,1];
2416}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002417def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002418
2419def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002420 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002421 let NumMicroOps = 5;
2422 let ResourceCycles = [2,1,1,1];
2423}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002424def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002425
Gadi Haber2cf601f2017-12-08 09:48:44 +00002426def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2427 let Latency = 21;
2428 let NumMicroOps = 5;
2429 let ResourceCycles = [2,1,1,1];
2430}
2431def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2432
Gadi Haberd76f7b82017-08-28 10:04:16 +00002433def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2434 let Latency = 14;
2435 let NumMicroOps = 10;
2436 let ResourceCycles = [2,3,1,4];
2437}
2438def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2439
2440def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002441 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002442 let NumMicroOps = 15;
2443 let ResourceCycles = [1,14];
2444}
2445def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2446
2447def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002448 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002449 let NumMicroOps = 8;
2450 let ResourceCycles = [1,1,1,1,1,1,2];
2451}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002452def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2453 "INSL",
2454 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455
2456def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2457 let Latency = 16;
2458 let NumMicroOps = 16;
2459 let ResourceCycles = [16];
2460}
2461def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2462
2463def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002464 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002465 let NumMicroOps = 19;
2466 let ResourceCycles = [2,1,4,1,1,4,6];
2467}
2468def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2469
2470def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2471 let Latency = 17;
2472 let NumMicroOps = 15;
2473 let ResourceCycles = [2,1,2,4,2,4];
2474}
2475def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2476
Gadi Haberd76f7b82017-08-28 10:04:16 +00002477def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2478 let Latency = 18;
2479 let NumMicroOps = 8;
2480 let ResourceCycles = [1,1,1,5];
2481}
2482def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002483def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002484
Gadi Haberd76f7b82017-08-28 10:04:16 +00002485def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002486 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002487 let NumMicroOps = 19;
2488 let ResourceCycles = [3,1,15];
2489}
Craig Topper391c6f92017-12-10 01:24:08 +00002490def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002491
Gadi Haberd76f7b82017-08-28 10:04:16 +00002492def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2493 let Latency = 20;
2494 let NumMicroOps = 1;
2495 let ResourceCycles = [1];
2496}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002497def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2498 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002499 "DIV_FrST0")>;
2500
2501def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2502 let Latency = 20;
2503 let NumMicroOps = 1;
2504 let ResourceCycles = [1,14];
2505}
2506def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2507 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002508
2509def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002510 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002511 let NumMicroOps = 2;
2512 let ResourceCycles = [1,1];
2513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002514def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002515 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002516
Craig Topper8104f262018-04-02 05:33:28 +00002517def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002518 let Latency = 26;
2519 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002520 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002521}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002522def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002523
Craig Topper8104f262018-04-02 05:33:28 +00002524def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002525 let Latency = 21;
2526 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002527 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002528}
2529def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2530
Craig Topper8104f262018-04-02 05:33:28 +00002531def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002532 let Latency = 22;
2533 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002534 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002535}
2536def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2537
Craig Topper8104f262018-04-02 05:33:28 +00002538def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002539 let Latency = 25;
2540 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002541 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002542}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002543def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002544
2545def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2546 let Latency = 20;
2547 let NumMicroOps = 10;
2548 let ResourceCycles = [1,2,7];
2549}
2550def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2551
Craig Topper8104f262018-04-02 05:33:28 +00002552def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002553 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002554 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002555 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002556}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002557def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2558 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002559
Craig Topper8104f262018-04-02 05:33:28 +00002560def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002561 let Latency = 21;
2562 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002563 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002564}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002565def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2566 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002567
Craig Topper8104f262018-04-02 05:33:28 +00002568def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002569 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002570 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002571 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002572}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002573def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2574 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002575
2576def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002577 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002578 let NumMicroOps = 3;
2579 let ResourceCycles = [1,1,1];
2580}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002581def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2582 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002583
2584def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2585 let Latency = 24;
2586 let NumMicroOps = 1;
2587 let ResourceCycles = [1];
2588}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002589def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2590 "DIVR_FST0r",
2591 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002592
2593def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002594 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002595 let NumMicroOps = 2;
2596 let ResourceCycles = [1,1];
2597}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002598def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2599 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002600
2601def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002602 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002603 let NumMicroOps = 27;
2604 let ResourceCycles = [1,5,1,1,19];
2605}
2606def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2607
2608def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002609 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002610 let NumMicroOps = 28;
2611 let ResourceCycles = [1,6,1,1,19];
2612}
Craig Topper2d451e72018-03-18 08:38:06 +00002613def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002614
2615def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002616 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002617 let NumMicroOps = 3;
2618 let ResourceCycles = [1,1,1];
2619}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002620def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2621 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002622
Gadi Haberd76f7b82017-08-28 10:04:16 +00002623def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002624 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002625 let NumMicroOps = 23;
2626 let ResourceCycles = [1,5,3,4,10];
2627}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002628def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2629 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002630
2631def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002632 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002633 let NumMicroOps = 23;
2634 let ResourceCycles = [1,5,2,1,4,10];
2635}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002636def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2637 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002638
2639def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2640 let Latency = 31;
2641 let NumMicroOps = 31;
2642 let ResourceCycles = [8,1,21,1];
2643}
2644def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2645
Craig Topper8104f262018-04-02 05:33:28 +00002646def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002647 let Latency = 35;
2648 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002649 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002650}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002651def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2652 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002653
Craig Topper8104f262018-04-02 05:33:28 +00002654def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002655 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002657 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002659def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2660 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002661
2662def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002663 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002664 let NumMicroOps = 18;
2665 let ResourceCycles = [1,1,2,3,1,1,1,8];
2666}
2667def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2668
2669def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2670 let Latency = 42;
2671 let NumMicroOps = 22;
2672 let ResourceCycles = [2,20];
2673}
Craig Topper2d451e72018-03-18 08:38:06 +00002674def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002675
2676def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002677 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002678 let NumMicroOps = 64;
2679 let ResourceCycles = [2,2,8,1,10,2,39];
2680}
2681def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002682
2683def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002684 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002685 let NumMicroOps = 88;
2686 let ResourceCycles = [4,4,31,1,2,1,45];
2687}
Craig Topper2d451e72018-03-18 08:38:06 +00002688def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002689
2690def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002691 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002692 let NumMicroOps = 90;
2693 let ResourceCycles = [4,2,33,1,2,1,47];
2694}
Craig Topper2d451e72018-03-18 08:38:06 +00002695def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002696
2697def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2698 let Latency = 75;
2699 let NumMicroOps = 15;
2700 let ResourceCycles = [6,3,6];
2701}
2702def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2703
2704def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2705 let Latency = 98;
2706 let NumMicroOps = 32;
2707 let ResourceCycles = [7,7,3,3,1,11];
2708}
2709def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2710
2711def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2712 let Latency = 112;
2713 let NumMicroOps = 66;
2714 let ResourceCycles = [4,2,4,8,14,34];
2715}
2716def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2717
2718def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002719 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002720 let NumMicroOps = 100;
2721 let ResourceCycles = [9,9,11,8,1,11,21,30];
2722}
2723def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002724
Gadi Haber2cf601f2017-12-08 09:48:44 +00002725def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2726 let Latency = 26;
2727 let NumMicroOps = 12;
2728 let ResourceCycles = [2,2,1,3,2,2];
2729}
Craig Topper17a31182017-12-16 18:35:29 +00002730def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2731 VPGATHERDQrm,
2732 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002733
2734def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2735 let Latency = 24;
2736 let NumMicroOps = 22;
2737 let ResourceCycles = [5,3,4,1,5,4];
2738}
Craig Topper17a31182017-12-16 18:35:29 +00002739def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2740 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002741
2742def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2743 let Latency = 28;
2744 let NumMicroOps = 22;
2745 let ResourceCycles = [5,3,4,1,5,4];
2746}
Craig Topper17a31182017-12-16 18:35:29 +00002747def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002748
2749def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2750 let Latency = 25;
2751 let NumMicroOps = 22;
2752 let ResourceCycles = [5,3,4,1,5,4];
2753}
Craig Topper17a31182017-12-16 18:35:29 +00002754def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002755
2756def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2757 let Latency = 27;
2758 let NumMicroOps = 20;
2759 let ResourceCycles = [3,3,4,1,5,4];
2760}
Craig Topper17a31182017-12-16 18:35:29 +00002761def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2762 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002763
2764def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2765 let Latency = 27;
2766 let NumMicroOps = 34;
2767 let ResourceCycles = [5,3,8,1,9,8];
2768}
Craig Topper17a31182017-12-16 18:35:29 +00002769def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2770 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002771
2772def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2773 let Latency = 23;
2774 let NumMicroOps = 14;
2775 let ResourceCycles = [3,3,2,1,3,2];
2776}
Craig Topper17a31182017-12-16 18:35:29 +00002777def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2778 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002779
2780def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2781 let Latency = 28;
2782 let NumMicroOps = 15;
2783 let ResourceCycles = [3,3,2,1,4,2];
2784}
Craig Topper17a31182017-12-16 18:35:29 +00002785def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002786
2787def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2788 let Latency = 25;
2789 let NumMicroOps = 15;
2790 let ResourceCycles = [3,3,2,1,4,2];
2791}
Craig Topper17a31182017-12-16 18:35:29 +00002792def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2793 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002794
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002795} // SchedModel