blob: b9f9c8c485ac1f3c731d7e7a3538673798bd4aa4 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
164defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000167defm : HWWriteResPair<WriteFBlend, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000170defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2], 2, 6>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
174def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
175def : WriteRes<WriteVecMove, [HWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000178defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
180defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000181defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000183defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000184defm : HWWriteResPair<WriteBlend, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000186defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000187defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000189defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 7, [1, 2], 3, 6>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000190defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000191
192// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193
Quentin Colombetca498512014-02-24 19:33:51 +0000194// Packed Compare Implicit Length Strings, Return Mask
195def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 11;
197 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let Latency = 17;
202 let NumMicroOps = 4;
203 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000204}
205
206// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
208 let Latency = 19;
209 let NumMicroOps = 9;
210 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
213 let Latency = 25;
214 let NumMicroOps = 10;
215 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000216}
217
218// Packed Compare Implicit Length Strings, Return Index
219def : WriteRes<WritePCmpIStrI, [HWPort0]> {
220 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000222 let ResourceCycles = [3];
223}
224def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let Latency = 17;
226 let NumMicroOps = 4;
227 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000228}
229
230// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
232 let Latency = 18;
233 let NumMicroOps = 8;
234 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
237 let Latency = 24;
238 let NumMicroOps = 9;
239 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrima2f26782018-03-27 20:38:54 +0000242// MOVMSK Instructions.
243def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
244def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
245def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
246
Quentin Colombetca498512014-02-24 19:33:51 +0000247// AES Instructions.
248def : WriteRes<WriteAESDecEnc, [HWPort5]> {
249 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000251 let ResourceCycles = [1];
252}
253def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let Latency = 13;
255 let NumMicroOps = 2;
256 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000257}
258
259def : WriteRes<WriteAESIMC, [HWPort5]> {
260 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [2];
263}
264def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let Latency = 20;
266 let NumMicroOps = 3;
267 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
271 let Latency = 29;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
276 let Latency = 34;
277 let NumMicroOps = 11;
278 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000279}
280
281// Carry-less multiplication instructions.
282def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 11;
284 let NumMicroOps = 3;
285 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
287def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288 let Latency = 17;
289 let NumMicroOps = 4;
290 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000291}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000292
Craig Topper05242bf2018-04-21 18:07:36 +0000293// Load/store MXCSR.
294def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
295def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
296
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000297def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
298def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000299def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
300def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000301
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302//================ Exceptions ================//
303
304//-- Specific Scheduling Models --//
305
306// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308
Craig Topper02daec02018-04-02 01:12:32 +0000309def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313}
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 3;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 2;
320}
321
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323 let NumMicroOps = 3;
324 let ResourceCycles = [2, 1];
325}
326
Michael Zuckermanf6684002017-06-28 11:23:31 +0000327// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000328def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330
Craig Topper02daec02018-04-02 01:12:32 +0000331def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000332 let NumMicroOps = 2;
333 let ResourceCycles = [2];
334}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335
336// Notation:
337// - r: register.
338// - mm: 64 bit mmx register.
339// - x = 128 bit xmm register.
340// - (x)mm = mmx or xmm register.
341// - y = 256 bit ymm register.
342// - v = any vector register.
343// - m = memory.
344
345//=== Integer Instructions ===//
346//-- Move instructions --//
347
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350 let Latency = 7;
351 let NumMicroOps = 3;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 19;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let NumMicroOps = 18;
364}
Craig Topper02daec02018-04-02 01:12:32 +0000365def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367//-- Arithmetic instructions --//
368
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369// DIV.
370// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000371def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372 let Latency = 22;
373 let NumMicroOps = 9;
374}
Craig Topper02daec02018-04-02 01:12:32 +0000375def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377// IDIV.
378// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000379def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380 let Latency = 23;
381 let NumMicroOps = 9;
382}
Craig Topper02daec02018-04-02 01:12:32 +0000383def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000387def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388 let NumMicroOps = 10;
389}
Craig Topper02daec02018-04-02 01:12:32 +0000390def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000394def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395 let NumMicroOps = 11;
396}
Craig Topper02daec02018-04-02 01:12:32 +0000397def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399//-- Control transfer instructions --//
400
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402// i.
Craig Topper02daec02018-04-02 01:12:32 +0000403def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404 let NumMicroOps = 4;
405 let ResourceCycles = [1, 2, 1];
406}
Craig Topper02daec02018-04-02 01:12:32 +0000407def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408
409// BOUND.
410// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 15;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000417def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418 let NumMicroOps = 4;
419}
Craig Topper02daec02018-04-02 01:12:32 +0000420def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421
422//-- String instructions --//
423
424// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000425def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426
427// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000428def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000429
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000431def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432 let Latency = 4;
433 let NumMicroOps = 5;
434 let ResourceCycles = [2, 1, 2];
435}
Craig Topper02daec02018-04-02 01:12:32 +0000436def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000439def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440 let Latency = 4;
441 let NumMicroOps = 5;
442 let ResourceCycles = [2, 3];
443}
Craig Topper02daec02018-04-02 01:12:32 +0000444def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000445
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446//-- Other --//
447
Gadi Haberd76f7b82017-08-28 10:04:16 +0000448// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 34;
451}
Craig Topper02daec02018-04-02 01:12:32 +0000452def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
454// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000455def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456 let NumMicroOps = 17;
457 let ResourceCycles = [1, 16];
458}
Craig Topper02daec02018-04-02 01:12:32 +0000459def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460
461//=== Floating Point x87 Instructions ===//
462//-- Move instructions --//
463
464// FLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468// FBLD.
469// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000470def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471 let Latency = 47;
472 let NumMicroOps = 43;
473}
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
476// FST(P).
477// r.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
Michael Zuckermanf6684002017-06-28 11:23:31 +0000483// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 147;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000496def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000497 let NumMicroOps = 90;
498}
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501//-- Arithmetic instructions --//
502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000516def : InstRW<[HWWrite2P1], (instrs FXAM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000537def : InstRW<[HWWriteFRNDINT], (instrs FRNDINT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000546def : InstRW<[HWWriteFSCALE], (instrs FSCALE)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000553def : InstRW<[HWWriteFXTRACT], (instrs FXTRACT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1,2], 3, 6>;
560defm : HWWriteResPair<WritePHAdd, [HWPort5, HWPort15], 3, [2,1], 3, 6>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000621 "MOVSX(16|32|64)rm32",
622 "MOVSX(16|32|64)rm8",
623 "MOVZX(16|32|64)rm16",
624 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000625 "(V?)MOVDDUPrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000626
Gadi Haberd76f7b82017-08-28 10:04:16 +0000627def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
628 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000629 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000630 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000631}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000632def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
633 "MMX_MOVD64from64rm",
634 "MMX_MOVD64mr",
635 "MMX_MOVNTQmr",
636 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000637 "MOVNTI_64mr",
638 "MOVNTImr",
639 "ST_FP32m",
640 "ST_FP64m",
641 "ST_FP80m",
642 "VEXTRACTF128mr",
643 "VEXTRACTI128mr",
644 "(V?)MOVAPD(Y?)mr",
645 "(V?)MOVAPS(V?)mr",
646 "(V?)MOVDQA(Y?)mr",
647 "(V?)MOVDQU(Y?)mr",
648 "(V?)MOVHPDmr",
649 "(V?)MOVHPSmr",
650 "(V?)MOVLPDmr",
651 "(V?)MOVLPSmr",
652 "(V?)MOVNTDQ(Y?)mr",
653 "(V?)MOVNTPD(Y?)mr",
654 "(V?)MOVNTPS(Y?)mr",
655 "(V?)MOVPDI2DImr",
656 "(V?)MOVPQI2QImr",
657 "(V?)MOVPQIto64mr",
658 "(V?)MOVSDmr",
659 "(V?)MOVSSmr",
660 "(V?)MOVUPD(Y?)mr",
661 "(V?)MOVUPS(Y?)mr",
662 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000663
Gadi Haberd76f7b82017-08-28 10:04:16 +0000664def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
665 let Latency = 1;
666 let NumMicroOps = 1;
667 let ResourceCycles = [1];
668}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000669def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
670 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000671 "(V?)MOVPDI2DIrr",
672 "(V?)MOVPQIto64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000673 "VPSLLVQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000674 "VPSRLVQ(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000675 "VTESTPD(Y?)rr",
676 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000677
678def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
679 let Latency = 1;
680 let NumMicroOps = 1;
681 let ResourceCycles = [1];
682}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000683def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
684 "COM_FST0r",
685 "UCOM_FPr",
686 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000687
688def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
689 let Latency = 1;
690 let NumMicroOps = 1;
691 let ResourceCycles = [1];
692}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000693def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000694 "MMX_MOVD64to64rr",
695 "MMX_MOVQ2DQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000696 "(V?)MOV64toPQIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000697 "(V?)MOVDI2PDIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000698 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000699 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000700
701def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
702 let Latency = 1;
703 let NumMicroOps = 1;
704 let ResourceCycles = [1];
705}
706def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
707
708def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
709 let Latency = 1;
710 let NumMicroOps = 1;
711 let ResourceCycles = [1];
712}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000713def: InstRW<[HWWriteResGroup6], (instrs FINCSTP, FNOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000714
715def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
716 let Latency = 1;
717 let NumMicroOps = 1;
718 let ResourceCycles = [1];
719}
Craig Topperfbe31322018-04-05 21:56:19 +0000720def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000721def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
722 "BT(16|32|64)rr",
723 "BTC(16|32|64)ri8",
724 "BTC(16|32|64)rr",
725 "BTR(16|32|64)ri8",
726 "BTR(16|32|64)rr",
727 "BTS(16|32|64)ri8",
728 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000729 "RORX(32|64)ri",
730 "SAR(8|16|32|64)r1",
731 "SAR(8|16|32|64)ri",
732 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000733 "SHL(8|16|32|64)r1",
734 "SHL(8|16|32|64)ri",
735 "SHLX(32|64)rr",
736 "SHR(8|16|32|64)r1",
737 "SHR(8|16|32|64)ri",
738 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000739
740def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
741 let Latency = 1;
742 let NumMicroOps = 1;
743 let ResourceCycles = [1];
744}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000745def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
746 "BLSI(32|64)rr",
747 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000748 "BLSR(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000749
750def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
751 let Latency = 1;
752 let NumMicroOps = 1;
753 let ResourceCycles = [1];
754}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000755def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000756 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000757
758def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
759 let Latency = 1;
760 let NumMicroOps = 1;
761 let ResourceCycles = [1];
762}
Craig Topperfbe31322018-04-05 21:56:19 +0000763def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000764def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000765 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000766 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000767 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000768 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000769 "SGDT64m",
770 "SIDT64m",
771 "SLDT64m",
772 "SMSW16m",
773 "STC",
774 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000775 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000776
777def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000778 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000782def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000783 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000784
Gadi Haber2cf601f2017-12-08 09:48:44 +0000785def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
786 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000787 let NumMicroOps = 2;
788 let ResourceCycles = [1,1];
789}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000790def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
791 "(V?)CVTSS2SDrm",
792 "VPSLLVQrm",
793 "VPSRLVQrm",
794 "VTESTPDrm",
795 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000796
797def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
798 let Latency = 8;
799 let NumMicroOps = 2;
800 let ResourceCycles = [1,1];
801}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000802def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
803 "VPSLLQYrm",
804 "VPSLLVQYrm",
805 "VPSLLWYrm",
806 "VPSRADYrm",
807 "VPSRAWYrm",
808 "VPSRLDYrm",
809 "VPSRLQYrm",
810 "VPSRLVQYrm",
811 "VPSRLWYrm",
812 "VTESTPDYrm",
813 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000814
815def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
816 let Latency = 8;
817 let NumMicroOps = 2;
818 let ResourceCycles = [1,1];
819}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000820def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000821 "FCOM64m",
822 "FCOMP32m",
823 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000824 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000825 "PDEP(32|64)rm",
826 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000827 "(V?)ADDSDrm",
828 "(V?)ADDSSrm",
829 "(V?)CMPSDrm",
830 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000831 "(V?)MAX(C?)SDrm",
832 "(V?)MAX(C?)SSrm",
833 "(V?)MIN(C?)SDrm",
834 "(V?)MIN(C?)SSrm",
835 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000836 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000837
Craig Topperf846e2d2018-04-19 05:34:05 +0000838def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
839 let Latency = 8;
840 let NumMicroOps = 3;
841 let ResourceCycles = [1,1,1];
842}
843def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
844
845def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
846 let Latency = 9;
847 let NumMicroOps = 5;
848 let ResourceCycles = [1,1,2,1];
849}
850def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
851
Gadi Haberd76f7b82017-08-28 10:04:16 +0000852def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000853 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000854 let NumMicroOps = 2;
855 let ResourceCycles = [1,1];
856}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000857def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000858 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000859 "(V?)PACKSSDWrm",
860 "(V?)PACKSSWBrm",
861 "(V?)PACKUSDWrm",
862 "(V?)PACKUSWBrm",
863 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000864 "VPERMILPDmi",
865 "VPERMILPDrm",
866 "VPERMILPSmi",
867 "VPERMILPSrm",
868 "(V?)PSHUFBrm",
869 "(V?)PSHUFDmi",
870 "(V?)PSHUFHWmi",
871 "(V?)PSHUFLWmi",
872 "(V?)PUNPCKHBWrm",
873 "(V?)PUNPCKHDQrm",
874 "(V?)PUNPCKHQDQrm",
875 "(V?)PUNPCKHWDrm",
876 "(V?)PUNPCKLBWrm",
877 "(V?)PUNPCKLDQrm",
878 "(V?)PUNPCKLQDQrm",
879 "(V?)PUNPCKLWDrm",
880 "(V?)SHUFPDrmi",
881 "(V?)SHUFPSrmi",
882 "(V?)UNPCKHPDrm",
883 "(V?)UNPCKHPSrm",
884 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000885 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000886
Gadi Haber2cf601f2017-12-08 09:48:44 +0000887def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
888 let Latency = 8;
889 let NumMicroOps = 2;
890 let ResourceCycles = [1,1];
891}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000892def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
893 "VANDNPSYrm",
894 "VANDPDYrm",
895 "VANDPSYrm",
896 "VORPDYrm",
897 "VORPSYrm",
898 "VPACKSSDWYrm",
899 "VPACKSSWBYrm",
900 "VPACKUSDWYrm",
901 "VPACKUSWBYrm",
902 "VPALIGNRYrmi",
903 "VPBLENDWYrmi",
904 "VPERMILPDYmi",
905 "VPERMILPDYrm",
906 "VPERMILPSYmi",
907 "VPERMILPSYrm",
908 "VPMOVSXBDYrm",
909 "VPMOVSXBQYrm",
910 "VPMOVSXWQYrm",
911 "VPSHUFBYrm",
912 "VPSHUFDYmi",
913 "VPSHUFHWYmi",
914 "VPSHUFLWYmi",
915 "VPUNPCKHBWYrm",
916 "VPUNPCKHDQYrm",
917 "VPUNPCKHQDQYrm",
918 "VPUNPCKHWDYrm",
919 "VPUNPCKLBWYrm",
920 "VPUNPCKLDQYrm",
921 "VPUNPCKLQDQYrm",
922 "VPUNPCKLWDYrm",
923 "VSHUFPDYrmi",
924 "VSHUFPSYrmi",
925 "VUNPCKHPDYrm",
926 "VUNPCKHPSYrm",
927 "VUNPCKLPDYrm",
928 "VUNPCKLPSYrm",
929 "VXORPDYrm",
930 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000931
932def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
933 let Latency = 6;
934 let NumMicroOps = 2;
935 let ResourceCycles = [1,1];
936}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000937def: InstRW<[HWWriteResGroup13_2], (instregex "(V?)MOVHPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000938 "(V?)MOVHPSrm",
939 "(V?)MOVLPDrm",
940 "(V?)MOVLPSrm",
941 "(V?)PINSRBrm",
942 "(V?)PINSRDrm",
943 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000944 "(V?)PINSRWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000945
Gadi Haberd76f7b82017-08-28 10:04:16 +0000946def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000947 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000951def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
952 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000953
954def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000955 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000956 let NumMicroOps = 2;
957 let ResourceCycles = [1,1];
958}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000959def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
960 "RORX(32|64)mi",
961 "SARX(32|64)rm",
962 "SHLX(32|64)rm",
963 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000964
965def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000966 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000967 let NumMicroOps = 2;
968 let ResourceCycles = [1,1];
969}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000970def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
971 "BLSI(32|64)rm",
972 "BLSMSK(32|64)rm",
973 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000974 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000975
976def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
977 let Latency = 7;
978 let NumMicroOps = 2;
979 let ResourceCycles = [1,1];
980}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000981def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
982 "(V?)PABSDrm",
983 "(V?)PABSWrm",
984 "(V?)PADDBrm",
985 "(V?)PADDDrm",
986 "(V?)PADDQrm",
987 "(V?)PADDSBrm",
988 "(V?)PADDSWrm",
989 "(V?)PADDUSBrm",
990 "(V?)PADDUSWrm",
991 "(V?)PADDWrm",
992 "(V?)PAVGBrm",
993 "(V?)PAVGWrm",
994 "(V?)PCMPEQBrm",
995 "(V?)PCMPEQDrm",
996 "(V?)PCMPEQQrm",
997 "(V?)PCMPEQWrm",
998 "(V?)PCMPGTBrm",
999 "(V?)PCMPGTDrm",
1000 "(V?)PCMPGTWrm",
1001 "(V?)PMAXSBrm",
1002 "(V?)PMAXSDrm",
1003 "(V?)PMAXSWrm",
1004 "(V?)PMAXUBrm",
1005 "(V?)PMAXUDrm",
1006 "(V?)PMAXUWrm",
1007 "(V?)PMINSBrm",
1008 "(V?)PMINSDrm",
1009 "(V?)PMINSWrm",
1010 "(V?)PMINUBrm",
1011 "(V?)PMINUDrm",
1012 "(V?)PMINUWrm",
1013 "(V?)PSIGNBrm",
1014 "(V?)PSIGNDrm",
1015 "(V?)PSIGNWrm",
1016 "(V?)PSUBBrm",
1017 "(V?)PSUBDrm",
1018 "(V?)PSUBQrm",
1019 "(V?)PSUBSBrm",
1020 "(V?)PSUBSWrm",
1021 "(V?)PSUBUSBrm",
1022 "(V?)PSUBUSWrm",
1023 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001024
1025def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1026 let Latency = 8;
1027 let NumMicroOps = 2;
1028 let ResourceCycles = [1,1];
1029}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001030def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1031 "VPABSDYrm",
1032 "VPABSWYrm",
1033 "VPADDBYrm",
1034 "VPADDDYrm",
1035 "VPADDQYrm",
1036 "VPADDSBYrm",
1037 "VPADDSWYrm",
1038 "VPADDUSBYrm",
1039 "VPADDUSWYrm",
1040 "VPADDWYrm",
1041 "VPAVGBYrm",
1042 "VPAVGWYrm",
1043 "VPCMPEQBYrm",
1044 "VPCMPEQDYrm",
1045 "VPCMPEQQYrm",
1046 "VPCMPEQWYrm",
1047 "VPCMPGTBYrm",
1048 "VPCMPGTDYrm",
1049 "VPCMPGTWYrm",
1050 "VPMAXSBYrm",
1051 "VPMAXSDYrm",
1052 "VPMAXSWYrm",
1053 "VPMAXUBYrm",
1054 "VPMAXUDYrm",
1055 "VPMAXUWYrm",
1056 "VPMINSBYrm",
1057 "VPMINSDYrm",
1058 "VPMINSWYrm",
1059 "VPMINUBYrm",
1060 "VPMINUDYrm",
1061 "VPMINUWYrm",
1062 "VPSIGNBYrm",
1063 "VPSIGNDYrm",
1064 "VPSIGNWYrm",
1065 "VPSUBBYrm",
1066 "VPSUBDYrm",
1067 "VPSUBQYrm",
1068 "VPSUBSBYrm",
1069 "VPSUBSWYrm",
1070 "VPSUBUSBYrm",
1071 "VPSUBUSWYrm",
1072 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001073
1074def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001075 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001076 let NumMicroOps = 2;
1077 let ResourceCycles = [1,1];
1078}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001079def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001080 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001081 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001082
Gadi Haber2cf601f2017-12-08 09:48:44 +00001083def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1084 let Latency = 6;
1085 let NumMicroOps = 2;
1086 let ResourceCycles = [1,1];
1087}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001088def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1089 "MMX_PANDirm",
1090 "MMX_PORirm",
1091 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001092
1093def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1094 let Latency = 8;
1095 let NumMicroOps = 2;
1096 let ResourceCycles = [1,1];
1097}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001098def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1099 "VBLENDPSYrmi",
1100 "VPANDNYrm",
1101 "VPANDYrm",
1102 "VPBLENDDYrmi",
1103 "VPORYrm",
1104 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001105
Gadi Haberd76f7b82017-08-28 10:04:16 +00001106def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001107 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001108 let NumMicroOps = 2;
1109 let ResourceCycles = [1,1];
1110}
Craig Topper2d451e72018-03-18 08:38:06 +00001111def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001112def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001113
1114def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001115 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001116 let NumMicroOps = 2;
1117 let ResourceCycles = [1,1];
1118}
1119def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1120
1121def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001122 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001123 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001124 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001125}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001126def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1127 "(V?)PEXTRBmr",
1128 "(V?)PEXTRDmr",
1129 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +00001130 "(V?)PEXTRWmr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001131
Gadi Haberd76f7b82017-08-28 10:04:16 +00001132def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001133 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001134 let NumMicroOps = 3;
1135 let ResourceCycles = [1,1,1];
1136}
1137def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001138
Gadi Haberd76f7b82017-08-28 10:04:16 +00001139def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001140 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001141 let NumMicroOps = 3;
1142 let ResourceCycles = [1,1,1];
1143}
1144def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1145
1146def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001147 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001148 let NumMicroOps = 3;
1149 let ResourceCycles = [1,1,1];
1150}
1151def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1152
1153def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001154 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001155 let NumMicroOps = 3;
1156 let ResourceCycles = [1,1,1];
1157}
Craig Topper2d451e72018-03-18 08:38:06 +00001158def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001159def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1160 "PUSH64i8",
1161 "STOSB",
1162 "STOSL",
1163 "STOSQ",
1164 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001165
1166def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001167 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001168 let NumMicroOps = 4;
1169 let ResourceCycles = [1,1,1,1];
1170}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001171def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1172 "BTR(16|32|64)mi8",
1173 "BTS(16|32|64)mi8",
1174 "SAR(8|16|32|64)m1",
1175 "SAR(8|16|32|64)mi",
1176 "SHL(8|16|32|64)m1",
1177 "SHL(8|16|32|64)mi",
1178 "SHR(8|16|32|64)m1",
1179 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001180
1181def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001182 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001183 let NumMicroOps = 4;
1184 let ResourceCycles = [1,1,1,1];
1185}
Craig Topperf0d04262018-04-06 16:16:48 +00001186def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1187 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001188
1189def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001190 let Latency = 2;
1191 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001192 let ResourceCycles = [2];
1193}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001194def: InstRW<[HWWriteResGroup27], (instregex "MMX_PINSRWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001195 "(V?)PINSRBrr",
1196 "(V?)PINSRDrr",
1197 "(V?)PINSRQrr",
1198 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001199
Gadi Haberd76f7b82017-08-28 10:04:16 +00001200def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1201 let Latency = 2;
1202 let NumMicroOps = 2;
1203 let ResourceCycles = [2];
1204}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001205def: InstRW<[HWWriteResGroup28], (instrs FDECSTP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001206
1207def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1208 let Latency = 2;
1209 let NumMicroOps = 2;
1210 let ResourceCycles = [2];
1211}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001212def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1213 "ROL(8|16|32|64)ri",
1214 "ROR(8|16|32|64)r1",
1215 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001216
1217def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1218 let Latency = 2;
1219 let NumMicroOps = 2;
1220 let ResourceCycles = [2];
1221}
1222def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1223def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001224def: InstRW<[HWWriteResGroup30], (instrs WAIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001225def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1226
1227def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1228 let Latency = 2;
1229 let NumMicroOps = 2;
1230 let ResourceCycles = [1,1];
1231}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001232def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1233 "VCVTPH2PSYrr",
1234 "VCVTPH2PSrr",
1235 "(V?)CVTPS2PDrr",
1236 "(V?)CVTSS2SDrr",
1237 "(V?)EXTRACTPSrr",
1238 "(V?)PEXTRBrr",
1239 "(V?)PEXTRDrr",
1240 "(V?)PEXTRQrr",
1241 "(V?)PEXTRWrr",
1242 "(V?)PSLLDrr",
1243 "(V?)PSLLQrr",
1244 "(V?)PSLLWrr",
1245 "(V?)PSRADrr",
1246 "(V?)PSRAWrr",
1247 "(V?)PSRLDrr",
1248 "(V?)PSRLQrr",
1249 "(V?)PSRLWrr",
1250 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001251
1252def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1253 let Latency = 2;
1254 let NumMicroOps = 2;
1255 let ResourceCycles = [1,1];
1256}
1257def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1258
1259def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1260 let Latency = 2;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
1264def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1265
1266def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1267 let Latency = 2;
1268 let NumMicroOps = 2;
1269 let ResourceCycles = [1,1];
1270}
Craig Topper498875f2018-04-04 17:54:19 +00001271def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1272
1273def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1274 let Latency = 1;
1275 let NumMicroOps = 1;
1276 let ResourceCycles = [1];
1277}
1278def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001279
1280def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1281 let Latency = 2;
1282 let NumMicroOps = 2;
1283 let ResourceCycles = [1,1];
1284}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001285def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1286def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1287 "ADC(8|16|32|64)rr",
1288 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001289 "SBB(8|16|32|64)ri",
1290 "SBB(8|16|32|64)rr",
1291 "SBB(8|16|32|64)i",
1292 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001293
1294def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001295 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001296 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001297 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001298}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001299def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001300 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001301 "VPMASKMOVDrm",
1302 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001303
Gadi Haber2cf601f2017-12-08 09:48:44 +00001304def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1305 let Latency = 9;
1306 let NumMicroOps = 3;
1307 let ResourceCycles = [2,1];
1308}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001309def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1310 "VBLENDVPSYrm",
1311 "VMASKMOVPDYrm",
1312 "VMASKMOVPSYrm",
1313 "VPBLENDVBYrm",
1314 "VPMASKMOVDYrm",
1315 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001316
1317def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1318 let Latency = 7;
1319 let NumMicroOps = 3;
1320 let ResourceCycles = [2,1];
1321}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001322def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1323 "MMX_PACKSSWBirm",
1324 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001325
Gadi Haberd76f7b82017-08-28 10:04:16 +00001326def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001327 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001328 let NumMicroOps = 3;
1329 let ResourceCycles = [1,2];
1330}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001331def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1332 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001333
1334def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001335 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001336 let NumMicroOps = 3;
1337 let ResourceCycles = [1,1,1];
1338}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001339def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1340 "(V?)PSLLQrm",
1341 "(V?)PSLLWrm",
1342 "(V?)PSRADrm",
1343 "(V?)PSRAWrm",
1344 "(V?)PSRLDrm",
1345 "(V?)PSRLQrm",
1346 "(V?)PSRLWrm",
1347 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001348
1349def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001350 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001351 let NumMicroOps = 3;
1352 let ResourceCycles = [1,1,1];
1353}
1354def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1355
Gadi Haberd76f7b82017-08-28 10:04:16 +00001356def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001357 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001358 let NumMicroOps = 3;
1359 let ResourceCycles = [1,1,1];
1360}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001361def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1362 "RETL",
1363 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001364
Gadi Haberd76f7b82017-08-28 10:04:16 +00001365def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001366 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001367 let NumMicroOps = 3;
1368 let ResourceCycles = [1,1,1];
1369}
Craig Topperc50570f2018-04-06 17:12:18 +00001370def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1371 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001372
1373def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001374 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001375 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001376 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001377}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001378def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001379
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001381 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001382 let NumMicroOps = 4;
1383 let ResourceCycles = [1,1,1,1];
1384}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001385def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1386 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387
1388def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001389 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001390 let NumMicroOps = 5;
1391 let ResourceCycles = [1,1,1,2];
1392}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001393def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1394 "ROL(8|16|32|64)mi",
1395 "ROR(8|16|32|64)m1",
1396 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001397
1398def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001399 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001400 let NumMicroOps = 5;
1401 let ResourceCycles = [1,1,1,2];
1402}
Craig Topper13a16502018-03-19 00:56:09 +00001403def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001404
1405def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001406 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001407 let NumMicroOps = 5;
1408 let ResourceCycles = [1,1,1,1,1];
1409}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001410def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1411 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001412
Gadi Haberd76f7b82017-08-28 10:04:16 +00001413def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1414 let Latency = 3;
1415 let NumMicroOps = 1;
1416 let ResourceCycles = [1];
1417}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001418def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001419 "PDEP(32|64)rr",
1420 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001421 "SHLD(16|32|64)rri8",
1422 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001423 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001424
Clement Courbet327fac42018-03-07 08:14:02 +00001425def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001426 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001427 let NumMicroOps = 2;
1428 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001429}
Clement Courbet327fac42018-03-07 08:14:02 +00001430def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431
1432def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1433 let Latency = 3;
1434 let NumMicroOps = 1;
1435 let ResourceCycles = [1];
1436}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001437def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001438 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001439 "VPMOVSXBDYrr",
1440 "VPMOVSXBQYrr",
1441 "VPMOVSXBWYrr",
1442 "VPMOVSXDQYrr",
1443 "VPMOVSXWDYrr",
1444 "VPMOVSXWQYrr",
1445 "VPMOVZXBDYrr",
1446 "VPMOVZXBQYrr",
1447 "VPMOVZXBWYrr",
1448 "VPMOVZXDQYrr",
1449 "VPMOVZXWDYrr",
1450 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001451
1452def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001453 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001454 let NumMicroOps = 2;
1455 let ResourceCycles = [1,1];
1456}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001457def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1458 "(V?)ADDPSrm",
1459 "(V?)ADDSUBPDrm",
1460 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001461 "(V?)CVTPS2DQrm",
1462 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001463 "(V?)SUBPDrm",
1464 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001465
Gadi Haber2cf601f2017-12-08 09:48:44 +00001466def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1467 let Latency = 10;
1468 let NumMicroOps = 2;
1469 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001470}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001471def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1472 "ADD_F64m",
1473 "ILD_F16m",
1474 "ILD_F32m",
1475 "ILD_F64m",
1476 "SUBR_F32m",
1477 "SUBR_F64m",
1478 "SUB_F32m",
1479 "SUB_F64m",
1480 "VADDPDYrm",
1481 "VADDPSYrm",
1482 "VADDSUBPDYrm",
1483 "VADDSUBPSYrm",
1484 "VCMPPDYrmi",
1485 "VCMPPSYrmi",
1486 "VCVTDQ2PSYrm",
1487 "VCVTPS2DQYrm",
1488 "VCVTTPS2DQYrm",
1489 "VMAX(C?)PDYrm",
1490 "VMAX(C?)PSYrm",
1491 "VMIN(C?)PDYrm",
1492 "VMIN(C?)PSYrm",
1493 "VSUBPDYrm",
1494 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001495
1496def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001497 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001501def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1502 "VPERM2I128rm",
1503 "VPERMDYrm",
1504 "VPERMPDYmi",
1505 "VPERMPSYrm",
1506 "VPERMQYmi",
1507 "VPMOVZXBDYrm",
1508 "VPMOVZXBQYrm",
1509 "VPMOVZXBWYrm",
1510 "VPMOVZXDQYrm",
1511 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001512
Gadi Haber2cf601f2017-12-08 09:48:44 +00001513def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1514 let Latency = 9;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001518def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1519 "VPMOVSXDQYrm",
1520 "VPMOVSXWDYrm",
1521 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001522
Gadi Haberd76f7b82017-08-28 10:04:16 +00001523def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001524 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001525 let NumMicroOps = 3;
1526 let ResourceCycles = [3];
1527}
Craig Topperb5f26592018-04-19 18:00:17 +00001528def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1529 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1530 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001531
1532def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1533 let Latency = 3;
1534 let NumMicroOps = 3;
1535 let ResourceCycles = [2,1];
1536}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001537def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1538 "VPSRAVD(Y?)rr",
1539 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001540
Gadi Haberd76f7b82017-08-28 10:04:16 +00001541def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1542 let Latency = 3;
1543 let NumMicroOps = 3;
1544 let ResourceCycles = [2,1];
1545}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001546def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1547 "MMX_PACKSSWBirr",
1548 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001549
1550def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1551 let Latency = 3;
1552 let NumMicroOps = 3;
1553 let ResourceCycles = [1,2];
1554}
1555def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1556
1557def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1558 let Latency = 3;
1559 let NumMicroOps = 3;
1560 let ResourceCycles = [1,2];
1561}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001562def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1563 "RCL(8|16|32|64)r1",
1564 "RCL(8|16|32|64)ri",
1565 "RCR(8|16|32|64)r1",
1566 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001567
1568def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1569 let Latency = 3;
1570 let NumMicroOps = 3;
1571 let ResourceCycles = [2,1];
1572}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001573def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1574 "ROR(8|16|32|64)rCL",
1575 "SAR(8|16|32|64)rCL",
1576 "SHL(8|16|32|64)rCL",
1577 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001578
1579def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001580 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001581 let NumMicroOps = 3;
1582 let ResourceCycles = [1,1,1];
1583}
1584def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1585
1586def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001587 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001588 let NumMicroOps = 3;
1589 let ResourceCycles = [1,1,1];
1590}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001591def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1592 "ISTT_FP32m",
1593 "ISTT_FP64m",
1594 "IST_F16m",
1595 "IST_F32m",
1596 "IST_FP16m",
1597 "IST_FP32m",
1598 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001599
1600def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001601 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001602 let NumMicroOps = 4;
1603 let ResourceCycles = [2,1,1];
1604}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001605def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1606 "VPSRAVDYrm",
1607 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001608
1609def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1610 let Latency = 9;
1611 let NumMicroOps = 4;
1612 let ResourceCycles = [2,1,1];
1613}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001614def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1615 "VPSRAVDrm",
1616 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001617
1618def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001619 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620 let NumMicroOps = 4;
1621 let ResourceCycles = [2,1,1];
1622}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001623def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001624
1625def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1626 let Latency = 10;
1627 let NumMicroOps = 4;
1628 let ResourceCycles = [2,1,1];
1629}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001630def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1631 "VPHADDSWYrm",
1632 "VPHADDWYrm",
1633 "VPHSUBDYrm",
1634 "VPHSUBSWYrm",
1635 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001636
1637def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1638 let Latency = 9;
1639 let NumMicroOps = 4;
1640 let ResourceCycles = [2,1,1];
1641}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001642def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1643 "(V?)PHADDSWrm",
1644 "(V?)PHADDWrm",
1645 "(V?)PHSUBDrm",
1646 "(V?)PHSUBSWrm",
1647 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001648
1649def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001650 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001651 let NumMicroOps = 4;
1652 let ResourceCycles = [1,1,2];
1653}
Craig Topperf4cd9082018-01-19 05:47:32 +00001654def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001655
1656def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001657 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001658 let NumMicroOps = 5;
1659 let ResourceCycles = [1,1,1,2];
1660}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001661def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1662 "RCL(8|16|32|64)mi",
1663 "RCR(8|16|32|64)m1",
1664 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001665
1666def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001667 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001668 let NumMicroOps = 5;
1669 let ResourceCycles = [1,1,2,1];
1670}
Craig Topper13a16502018-03-19 00:56:09 +00001671def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001672
1673def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001674 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001675 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001676 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001677}
Craig Topper9f834812018-04-01 21:54:24 +00001678def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001679
Gadi Haberd76f7b82017-08-28 10:04:16 +00001680def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001681 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001682 let NumMicroOps = 6;
1683 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001684}
Craig Topper9f834812018-04-01 21:54:24 +00001685def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001686 "CMPXCHG(8|16|32|64)rm",
1687 "ROL(8|16|32|64)mCL",
1688 "SAR(8|16|32|64)mCL",
1689 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001690 "SHL(8|16|32|64)mCL",
1691 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001692def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1693 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001694
Gadi Haberd76f7b82017-08-28 10:04:16 +00001695def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1696 let Latency = 4;
1697 let NumMicroOps = 2;
1698 let ResourceCycles = [1,1];
1699}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001700def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1701 "(V?)CVTSD2SIrr",
1702 "(V?)CVTSS2SI64rr",
1703 "(V?)CVTSS2SIrr",
1704 "(V?)CVTTSD2SI64rr",
1705 "(V?)CVTTSD2SIrr",
1706 "(V?)CVTTSS2SI64rr",
1707 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001708
1709def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1710 let Latency = 4;
1711 let NumMicroOps = 2;
1712 let ResourceCycles = [1,1];
1713}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001714def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1715 "VPSLLDYrr",
1716 "VPSLLQYrr",
1717 "VPSLLWYrr",
1718 "VPSRADYrr",
1719 "VPSRAWYrr",
1720 "VPSRLDYrr",
1721 "VPSRLQYrr",
1722 "VPSRLWYrr",
1723 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001724
1725def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1726 let Latency = 4;
1727 let NumMicroOps = 2;
1728 let ResourceCycles = [1,1];
1729}
1730def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1731
1732def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1733 let Latency = 4;
1734 let NumMicroOps = 2;
1735 let ResourceCycles = [1,1];
1736}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001737def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1738 "MMX_CVTPI2PDirr",
1739 "MMX_CVTPS2PIirr",
1740 "MMX_CVTTPD2PIirr",
1741 "MMX_CVTTPS2PIirr",
1742 "(V?)CVTDQ2PDrr",
1743 "(V?)CVTPD2DQrr",
1744 "(V?)CVTPD2PSrr",
1745 "VCVTPS2PHrr",
1746 "(V?)CVTSD2SSrr",
1747 "(V?)CVTSI642SDrr",
1748 "(V?)CVTSI2SDrr",
1749 "(V?)CVTSI2SSrr",
1750 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001751
1752def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1753 let Latency = 4;
1754 let NumMicroOps = 2;
1755 let ResourceCycles = [1,1];
1756}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001757def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001758
Craig Topperf846e2d2018-04-19 05:34:05 +00001759def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001760 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001761 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001762 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001763}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001764def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001765
Gadi Haberd76f7b82017-08-28 10:04:16 +00001766def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001767 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001768 let NumMicroOps = 3;
1769 let ResourceCycles = [2,1];
1770}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001771def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1772 "FICOM32m",
1773 "FICOMP16m",
1774 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001775
1776def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001777 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001778 let NumMicroOps = 3;
1779 let ResourceCycles = [1,1,1];
1780}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001781def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1782 "(V?)CVTSD2SIrm",
1783 "(V?)CVTSS2SI64rm",
1784 "(V?)CVTSS2SIrm",
1785 "(V?)CVTTSD2SI64rm",
1786 "(V?)CVTTSD2SIrm",
1787 "VCVTTSS2SI64rm",
1788 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001789
1790def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001791 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001792 let NumMicroOps = 3;
1793 let ResourceCycles = [1,1,1];
1794}
1795def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001796
1797def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1798 let Latency = 11;
1799 let NumMicroOps = 3;
1800 let ResourceCycles = [1,1,1];
1801}
1802def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001803
1804def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001805 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001806 let NumMicroOps = 3;
1807 let ResourceCycles = [1,1,1];
1808}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001809def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1810 "CVTPD2PSrm",
1811 "CVTTPD2DQrm",
1812 "MMX_CVTPD2PIirm",
1813 "MMX_CVTTPD2PIirm",
1814 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001815
1816def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1817 let Latency = 9;
1818 let NumMicroOps = 3;
1819 let ResourceCycles = [1,1,1];
1820}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001821def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1822 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823
1824def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001825 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001826 let NumMicroOps = 3;
1827 let ResourceCycles = [1,1,1];
1828}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001829def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001830
1831def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001832 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001833 let NumMicroOps = 3;
1834 let ResourceCycles = [1,1,1];
1835}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001836def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1837 "VPBROADCASTBrm",
1838 "VPBROADCASTWYrm",
1839 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001840
1841def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1842 let Latency = 4;
1843 let NumMicroOps = 4;
1844 let ResourceCycles = [4];
1845}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001846def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001847
1848def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1849 let Latency = 4;
1850 let NumMicroOps = 4;
1851 let ResourceCycles = [1,3];
1852}
1853def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
1854
1855def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1856 let Latency = 4;
1857 let NumMicroOps = 4;
1858 let ResourceCycles = [1,1,2];
1859}
1860def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1861
1862def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001863 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001864 let NumMicroOps = 4;
1865 let ResourceCycles = [1,1,1,1];
1866}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001867def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1868 "VMASKMOVPS(Y?)mr",
1869 "VPMASKMOVD(Y?)mr",
1870 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001871
1872def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001873 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001874 let NumMicroOps = 4;
1875 let ResourceCycles = [1,1,1,1];
1876}
1877def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
1878
1879def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001880 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001881 let NumMicroOps = 4;
1882 let ResourceCycles = [1,1,1,1];
1883}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001884def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1885 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001886
1887def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001888 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001889 let NumMicroOps = 5;
1890 let ResourceCycles = [1,2,1,1];
1891}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001892def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1893 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001894
1895def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001896 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001897 let NumMicroOps = 6;
1898 let ResourceCycles = [1,1,4];
1899}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001900def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1901 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001902
1903def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001904 let Latency = 5;
1905 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001906 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001907}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001908def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001909
Gadi Haberd76f7b82017-08-28 10:04:16 +00001910def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001911 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001912 let NumMicroOps = 1;
1913 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001914}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001915def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1916 "(V?)MULPS(Y?)rr",
1917 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001918 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001919
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001921 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001922 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001923 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001924}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001925def: InstRW<[HWWriteResGroup91], (instregex "(V?)RCPSSm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001926 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001927
Craig Topper8104f262018-04-02 05:33:28 +00001928def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001929 let Latency = 16;
1930 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001931 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001932}
1933def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1934
Craig Topper8104f262018-04-02 05:33:28 +00001935def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001936 let Latency = 18;
1937 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001938 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001939}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001940def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001941
1942def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1943 let Latency = 11;
1944 let NumMicroOps = 2;
1945 let ResourceCycles = [1,1];
1946}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001947def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
1948 "(V?)PHMINPOSUWrm",
1949 "(V?)PMADDUBSWrm",
1950 "(V?)PMADDWDrm",
1951 "(V?)PMULDQrm",
1952 "(V?)PMULHRSWrm",
1953 "(V?)PMULHUWrm",
1954 "(V?)PMULHWrm",
1955 "(V?)PMULLWrm",
1956 "(V?)PMULUDQrm",
1957 "(V?)PSADBWrm",
1958 "(V?)RCPPSm",
1959 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001960
1961def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1962 let Latency = 12;
1963 let NumMicroOps = 2;
1964 let ResourceCycles = [1,1];
1965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001966def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
1967 "MUL_F64m",
1968 "VPCMPGTQYrm",
1969 "VPMADDUBSWYrm",
1970 "VPMADDWDYrm",
1971 "VPMULDQYrm",
1972 "VPMULHRSWYrm",
1973 "VPMULHUWYrm",
1974 "VPMULHWYrm",
1975 "VPMULLWYrm",
1976 "VPMULUDQYrm",
1977 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001978
Gadi Haberd76f7b82017-08-28 10:04:16 +00001979def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001980 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001981 let NumMicroOps = 2;
1982 let ResourceCycles = [1,1];
1983}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001984def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
1985 "(V?)MULPSrm",
1986 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987
1988def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1989 let Latency = 12;
1990 let NumMicroOps = 2;
1991 let ResourceCycles = [1,1];
1992}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001993def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
1994 "VMULPSYrm",
1995 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001996
1997def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
1998 let Latency = 10;
1999 let NumMicroOps = 2;
2000 let ResourceCycles = [1,1];
2001}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002002def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2003 "(V?)MULSSrm",
2004 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002005
2006def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2007 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002008 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002009 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002010}
Simon Pilgrim44278f62018-04-21 16:20:28 +00002011def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002012
Gadi Haberd76f7b82017-08-28 10:04:16 +00002013def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2014 let Latency = 5;
2015 let NumMicroOps = 3;
2016 let ResourceCycles = [1,1,1];
2017}
2018def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2019
2020def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002021 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002022 let NumMicroOps = 3;
2023 let ResourceCycles = [1,1,1];
2024}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002025def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002026
Gadi Haber2cf601f2017-12-08 09:48:44 +00002027def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2028 let Latency = 12;
2029 let NumMicroOps = 4;
2030 let ResourceCycles = [1,2,1];
2031}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002032def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2033 "VHADDPSYrm",
2034 "VHSUBPDYrm",
2035 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002036
Gadi Haberd76f7b82017-08-28 10:04:16 +00002037def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002038 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002039 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002040 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002041}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002042def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002043
Gadi Haberd76f7b82017-08-28 10:04:16 +00002044def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002045 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046 let NumMicroOps = 4;
2047 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002048}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002049def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002050
Gadi Haberd76f7b82017-08-28 10:04:16 +00002051def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2052 let Latency = 5;
2053 let NumMicroOps = 5;
2054 let ResourceCycles = [1,4];
2055}
2056def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2057
2058def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2059 let Latency = 5;
2060 let NumMicroOps = 5;
2061 let ResourceCycles = [1,4];
2062}
2063def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2064
2065def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2066 let Latency = 5;
2067 let NumMicroOps = 5;
2068 let ResourceCycles = [2,3];
2069}
Craig Topper13a16502018-03-19 00:56:09 +00002070def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071
2072def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2073 let Latency = 6;
2074 let NumMicroOps = 2;
2075 let ResourceCycles = [1,1];
2076}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002077def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2078 "VCVTPD2DQYrr",
2079 "VCVTPD2PSYrr",
2080 "VCVTPS2PHYrr",
2081 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002082
2083def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002084 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002085 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002086 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002087}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002088def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2089 "ADD_FI32m",
2090 "SUBR_FI16m",
2091 "SUBR_FI32m",
2092 "SUB_FI16m",
2093 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002094 "VROUNDPDYm",
2095 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002096
Gadi Haber2cf601f2017-12-08 09:48:44 +00002097def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2098 let Latency = 12;
2099 let NumMicroOps = 3;
2100 let ResourceCycles = [2,1];
2101}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002102def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2103 "(V?)ROUNDPSm",
2104 "(V?)ROUNDSDm",
2105 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002106
Gadi Haberd76f7b82017-08-28 10:04:16 +00002107def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002108 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109 let NumMicroOps = 3;
2110 let ResourceCycles = [1,1,1];
2111}
2112def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2113
2114def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2115 let Latency = 6;
2116 let NumMicroOps = 4;
2117 let ResourceCycles = [1,1,2];
2118}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002119def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2120 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002121
2122def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002123 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002124 let NumMicroOps = 4;
2125 let ResourceCycles = [1,1,1,1];
2126}
2127def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2128
2129def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2130 let Latency = 6;
2131 let NumMicroOps = 4;
2132 let ResourceCycles = [1,1,1,1];
2133}
2134def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2135
2136def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2137 let Latency = 6;
2138 let NumMicroOps = 6;
2139 let ResourceCycles = [1,5];
2140}
2141def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2142
2143def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002144 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145 let NumMicroOps = 6;
2146 let ResourceCycles = [1,1,1,1,2];
2147}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002148def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2149 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002150
Gadi Haber2cf601f2017-12-08 09:48:44 +00002151def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2152 let Latency = 14;
2153 let NumMicroOps = 4;
2154 let ResourceCycles = [1,2,1];
2155}
2156def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2157
Gadi Haberd76f7b82017-08-28 10:04:16 +00002158def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2159 let Latency = 7;
2160 let NumMicroOps = 7;
2161 let ResourceCycles = [2,2,1,2];
2162}
Craig Topper2d451e72018-03-18 08:38:06 +00002163def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002164
2165def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002166 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002167 let NumMicroOps = 3;
2168 let ResourceCycles = [1,1,1];
2169}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002170def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2171 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002172
2173def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2174 let Latency = 9;
2175 let NumMicroOps = 3;
2176 let ResourceCycles = [1,1,1];
2177}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002178def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002179
2180def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002181 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002182 let NumMicroOps = 4;
2183 let ResourceCycles = [1,1,1,1];
2184}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002185def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186
Gadi Haber2cf601f2017-12-08 09:48:44 +00002187def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2188 let Latency = 17;
2189 let NumMicroOps = 3;
2190 let ResourceCycles = [2,1];
2191}
2192def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2193
Gadi Haberd76f7b82017-08-28 10:04:16 +00002194def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002195 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002196 let NumMicroOps = 10;
2197 let ResourceCycles = [1,1,1,4,1,2];
2198}
Craig Topper13a16502018-03-19 00:56:09 +00002199def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002200
Craig Topper8104f262018-04-02 05:33:28 +00002201def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002202 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002203 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002204 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002205}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002206def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2207 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002208
Gadi Haberd76f7b82017-08-28 10:04:16 +00002209def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2210 let Latency = 11;
2211 let NumMicroOps = 3;
2212 let ResourceCycles = [2,1];
2213}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002214def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2215 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002216
Gadi Haberd76f7b82017-08-28 10:04:16 +00002217def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002218 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002219 let NumMicroOps = 4;
2220 let ResourceCycles = [2,1,1];
2221}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002222def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2223 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002224
2225def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2226 let Latency = 11;
2227 let NumMicroOps = 7;
2228 let ResourceCycles = [2,2,3];
2229}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002230def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2231 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002232
2233def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2234 let Latency = 11;
2235 let NumMicroOps = 9;
2236 let ResourceCycles = [1,4,1,3];
2237}
2238def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2239
2240def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2241 let Latency = 11;
2242 let NumMicroOps = 11;
2243 let ResourceCycles = [2,9];
2244}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002245def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246
2247def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002248 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002249 let NumMicroOps = 14;
2250 let ResourceCycles = [1,1,1,4,2,5];
2251}
2252def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2253
Craig Topper8104f262018-04-02 05:33:28 +00002254def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002255 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002256 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002257 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002258}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002259def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2260 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002261
Craig Topper8104f262018-04-02 05:33:28 +00002262def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002263 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002264 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002265 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002267def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002268
2269def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002270 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002271 let NumMicroOps = 11;
2272 let ResourceCycles = [2,1,1,3,1,3];
2273}
Craig Topper13a16502018-03-19 00:56:09 +00002274def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002275
Craig Topper8104f262018-04-02 05:33:28 +00002276def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002277 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002278 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002279 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002280}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002281def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002282
Gadi Haberd76f7b82017-08-28 10:04:16 +00002283def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2284 let Latency = 14;
2285 let NumMicroOps = 4;
2286 let ResourceCycles = [2,1,1];
2287}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002288def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002289
2290def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002291 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002292 let NumMicroOps = 5;
2293 let ResourceCycles = [2,1,1,1];
2294}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002295def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002296
Gadi Haber2cf601f2017-12-08 09:48:44 +00002297def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2298 let Latency = 21;
2299 let NumMicroOps = 5;
2300 let ResourceCycles = [2,1,1,1];
2301}
2302def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2303
Gadi Haberd76f7b82017-08-28 10:04:16 +00002304def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2305 let Latency = 14;
2306 let NumMicroOps = 10;
2307 let ResourceCycles = [2,3,1,4];
2308}
2309def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2310
2311def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002312 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002313 let NumMicroOps = 15;
2314 let ResourceCycles = [1,14];
2315}
2316def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2317
2318def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002319 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002320 let NumMicroOps = 8;
2321 let ResourceCycles = [1,1,1,1,1,1,2];
2322}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002323def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2324 "INSL",
2325 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002326
2327def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2328 let Latency = 16;
2329 let NumMicroOps = 16;
2330 let ResourceCycles = [16];
2331}
2332def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2333
2334def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002335 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002336 let NumMicroOps = 19;
2337 let ResourceCycles = [2,1,4,1,1,4,6];
2338}
2339def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2340
2341def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2342 let Latency = 17;
2343 let NumMicroOps = 15;
2344 let ResourceCycles = [2,1,2,4,2,4];
2345}
2346def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2347
Gadi Haberd76f7b82017-08-28 10:04:16 +00002348def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2349 let Latency = 18;
2350 let NumMicroOps = 8;
2351 let ResourceCycles = [1,1,1,5];
2352}
2353def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002354def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002355
Gadi Haberd76f7b82017-08-28 10:04:16 +00002356def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002357 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358 let NumMicroOps = 19;
2359 let ResourceCycles = [3,1,15];
2360}
Craig Topper391c6f92017-12-10 01:24:08 +00002361def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002362
Gadi Haberd76f7b82017-08-28 10:04:16 +00002363def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2364 let Latency = 20;
2365 let NumMicroOps = 1;
2366 let ResourceCycles = [1];
2367}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002368def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2369 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002370 "DIV_FrST0")>;
2371
2372def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2373 let Latency = 20;
2374 let NumMicroOps = 1;
2375 let ResourceCycles = [1,14];
2376}
2377def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2378 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002379
2380def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002381 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002382 let NumMicroOps = 2;
2383 let ResourceCycles = [1,1];
2384}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002385def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002386 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002387
Craig Topper8104f262018-04-02 05:33:28 +00002388def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002389 let Latency = 26;
2390 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002391 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002392}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002393def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002394
Craig Topper8104f262018-04-02 05:33:28 +00002395def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002396 let Latency = 21;
2397 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002398 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002399}
2400def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2401
Craig Topper8104f262018-04-02 05:33:28 +00002402def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002403 let Latency = 22;
2404 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002405 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002406}
2407def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2408
Craig Topper8104f262018-04-02 05:33:28 +00002409def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002410 let Latency = 25;
2411 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002412 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002413}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002414def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002415
2416def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2417 let Latency = 20;
2418 let NumMicroOps = 10;
2419 let ResourceCycles = [1,2,7];
2420}
2421def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2422
Craig Topper8104f262018-04-02 05:33:28 +00002423def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002424 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002425 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002426 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002427}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002428def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2429 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002430
Craig Topper8104f262018-04-02 05:33:28 +00002431def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432 let Latency = 21;
2433 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002434 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002436def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2437 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002438
Craig Topper8104f262018-04-02 05:33:28 +00002439def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002440 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002442 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002443}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002444def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2445 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002446
2447def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002448 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002449 let NumMicroOps = 3;
2450 let ResourceCycles = [1,1,1];
2451}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002452def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2453 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002454
2455def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2456 let Latency = 24;
2457 let NumMicroOps = 1;
2458 let ResourceCycles = [1];
2459}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002460def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2461 "DIVR_FST0r",
2462 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002463
2464def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002465 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002466 let NumMicroOps = 2;
2467 let ResourceCycles = [1,1];
2468}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002469def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2470 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002471
2472def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002473 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474 let NumMicroOps = 27;
2475 let ResourceCycles = [1,5,1,1,19];
2476}
2477def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2478
2479def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002480 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002481 let NumMicroOps = 28;
2482 let ResourceCycles = [1,6,1,1,19];
2483}
Craig Topper2d451e72018-03-18 08:38:06 +00002484def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002485
2486def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002487 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002488 let NumMicroOps = 3;
2489 let ResourceCycles = [1,1,1];
2490}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002491def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2492 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002493
Gadi Haberd76f7b82017-08-28 10:04:16 +00002494def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002495 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002496 let NumMicroOps = 23;
2497 let ResourceCycles = [1,5,3,4,10];
2498}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002499def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2500 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002501
2502def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002503 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002504 let NumMicroOps = 23;
2505 let ResourceCycles = [1,5,2,1,4,10];
2506}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002507def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2508 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002509
2510def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2511 let Latency = 31;
2512 let NumMicroOps = 31;
2513 let ResourceCycles = [8,1,21,1];
2514}
2515def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2516
Craig Topper8104f262018-04-02 05:33:28 +00002517def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002518 let Latency = 35;
2519 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002520 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002521}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002522def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2523 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002524
Craig Topper8104f262018-04-02 05:33:28 +00002525def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002526 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002527 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002528 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002529}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002530def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2531 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002532
2533def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002534 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002535 let NumMicroOps = 18;
2536 let ResourceCycles = [1,1,2,3,1,1,1,8];
2537}
2538def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2539
2540def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2541 let Latency = 42;
2542 let NumMicroOps = 22;
2543 let ResourceCycles = [2,20];
2544}
Craig Topper2d451e72018-03-18 08:38:06 +00002545def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002546
2547def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002548 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549 let NumMicroOps = 64;
2550 let ResourceCycles = [2,2,8,1,10,2,39];
2551}
2552def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002553
2554def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002555 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002556 let NumMicroOps = 88;
2557 let ResourceCycles = [4,4,31,1,2,1,45];
2558}
Craig Topper2d451e72018-03-18 08:38:06 +00002559def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002560
2561def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002562 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002563 let NumMicroOps = 90;
2564 let ResourceCycles = [4,2,33,1,2,1,47];
2565}
Craig Topper2d451e72018-03-18 08:38:06 +00002566def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002567
2568def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2569 let Latency = 75;
2570 let NumMicroOps = 15;
2571 let ResourceCycles = [6,3,6];
2572}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002573def: InstRW<[HWWriteResGroup180], (instrs FNINIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002574
2575def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2576 let Latency = 98;
2577 let NumMicroOps = 32;
2578 let ResourceCycles = [7,7,3,3,1,11];
2579}
2580def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2581
2582def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2583 let Latency = 112;
2584 let NumMicroOps = 66;
2585 let ResourceCycles = [4,2,4,8,14,34];
2586}
2587def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2588
2589def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002590 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002591 let NumMicroOps = 100;
2592 let ResourceCycles = [9,9,11,8,1,11,21,30];
2593}
2594def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002595
Gadi Haber2cf601f2017-12-08 09:48:44 +00002596def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2597 let Latency = 26;
2598 let NumMicroOps = 12;
2599 let ResourceCycles = [2,2,1,3,2,2];
2600}
Craig Topper17a31182017-12-16 18:35:29 +00002601def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2602 VPGATHERDQrm,
2603 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002604
2605def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2606 let Latency = 24;
2607 let NumMicroOps = 22;
2608 let ResourceCycles = [5,3,4,1,5,4];
2609}
Craig Topper17a31182017-12-16 18:35:29 +00002610def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2611 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002612
2613def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2614 let Latency = 28;
2615 let NumMicroOps = 22;
2616 let ResourceCycles = [5,3,4,1,5,4];
2617}
Craig Topper17a31182017-12-16 18:35:29 +00002618def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002619
2620def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2621 let Latency = 25;
2622 let NumMicroOps = 22;
2623 let ResourceCycles = [5,3,4,1,5,4];
2624}
Craig Topper17a31182017-12-16 18:35:29 +00002625def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002626
2627def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2628 let Latency = 27;
2629 let NumMicroOps = 20;
2630 let ResourceCycles = [3,3,4,1,5,4];
2631}
Craig Topper17a31182017-12-16 18:35:29 +00002632def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2633 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002634
2635def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2636 let Latency = 27;
2637 let NumMicroOps = 34;
2638 let ResourceCycles = [5,3,8,1,9,8];
2639}
Craig Topper17a31182017-12-16 18:35:29 +00002640def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2641 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002642
2643def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2644 let Latency = 23;
2645 let NumMicroOps = 14;
2646 let ResourceCycles = [3,3,2,1,3,2];
2647}
Craig Topper17a31182017-12-16 18:35:29 +00002648def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2649 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002650
2651def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2652 let Latency = 28;
2653 let NumMicroOps = 15;
2654 let ResourceCycles = [3,3,2,1,4,2];
2655}
Craig Topper17a31182017-12-16 18:35:29 +00002656def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002657
2658def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2659 let Latency = 25;
2660 let NumMicroOps = 15;
2661 let ResourceCycles = [3,3,2,1,4,2];
2662}
Craig Topper17a31182017-12-16 18:35:29 +00002663def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2664 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002665
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002666} // SchedModel