blob: 8022ddad11173a14e86c0897b84afb73375ea914 [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>;
152defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
153defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
154defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
156defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
157defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
158defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
159defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
160defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
161defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000162defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000163defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
164defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000165defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000166defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000167
168// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000169def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
170def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
171def : WriteRes<WriteVecMove, [HWPort015]>;
172
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
174defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1>;
175defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
176defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000177defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000179defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
181defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000182defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
184defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
185defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Quentin Colombetca498512014-02-24 19:33:51 +0000186
187// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000188
Quentin Colombetca498512014-02-24 19:33:51 +0000189// Packed Compare Implicit Length Strings, Return Mask
190def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000191 let Latency = 11;
192 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000193 let ResourceCycles = [3];
194}
195def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 17;
197 let NumMicroOps = 4;
198 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000199}
200
201// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
203 let Latency = 19;
204 let NumMicroOps = 9;
205 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000206}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
208 let Latency = 25;
209 let NumMicroOps = 10;
210 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
212
213// Packed Compare Implicit Length Strings, Return Index
214def : WriteRes<WritePCmpIStrI, [HWPort0]> {
215 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000216 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000217 let ResourceCycles = [3];
218}
219def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000220 let Latency = 17;
221 let NumMicroOps = 4;
222 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000223}
224
225// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000226def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
227 let Latency = 18;
228 let NumMicroOps = 8;
229 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000230}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
232 let Latency = 24;
233 let NumMicroOps = 9;
234 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
236
Simon Pilgrima2f26782018-03-27 20:38:54 +0000237// MOVMSK Instructions.
238def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
239def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
240def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
241
Quentin Colombetca498512014-02-24 19:33:51 +0000242// AES Instructions.
243def : WriteRes<WriteAESDecEnc, [HWPort5]> {
244 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000245 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000246 let ResourceCycles = [1];
247}
248def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249 let Latency = 13;
250 let NumMicroOps = 2;
251 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000252}
253
254def : WriteRes<WriteAESIMC, [HWPort5]> {
255 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000257 let ResourceCycles = [2];
258}
259def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 20;
261 let NumMicroOps = 3;
262 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000263}
264
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
266 let Latency = 29;
267 let NumMicroOps = 11;
268 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000269}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
271 let Latency = 34;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
275
276// Carry-less multiplication instructions.
277def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000278 let Latency = 11;
279 let NumMicroOps = 3;
280 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000281}
282def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 17;
284 let NumMicroOps = 4;
285 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000287
288def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
289def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000290def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
291def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000292
Michael Zuckermanf6684002017-06-28 11:23:31 +0000293//================ Exceptions ================//
294
295//-- Specific Scheduling Models --//
296
297// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000298def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000299
Craig Topper02daec02018-04-02 01:12:32 +0000300def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000301
Craig Topper02daec02018-04-02 01:12:32 +0000302def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000303 let NumMicroOps = 2;
304}
Craig Topper02daec02018-04-02 01:12:32 +0000305def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000306 let NumMicroOps = 3;
307}
308
Craig Topper02daec02018-04-02 01:12:32 +0000309def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310 let NumMicroOps = 2;
311}
312
Craig Topper02daec02018-04-02 01:12:32 +0000313def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000314 let NumMicroOps = 3;
315 let ResourceCycles = [2, 1];
316}
317
Michael Zuckermanf6684002017-06-28 11:23:31 +0000318// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000319def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000320
Michael Zuckermanf6684002017-06-28 11:23:31 +0000321
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323 let NumMicroOps = 2;
324 let ResourceCycles = [2];
325}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000326
327// Notation:
328// - r: register.
329// - mm: 64 bit mmx register.
330// - x = 128 bit xmm register.
331// - (x)mm = mmx or xmm register.
332// - y = 256 bit ymm register.
333// - v = any vector register.
334// - m = memory.
335
336//=== Integer Instructions ===//
337//-- Move instructions --//
338
Michael Zuckermanf6684002017-06-28 11:23:31 +0000339// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000340def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000341 let Latency = 7;
342 let NumMicroOps = 3;
343}
Craig Topper02daec02018-04-02 01:12:32 +0000344def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000345
Michael Zuckermanf6684002017-06-28 11:23:31 +0000346// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000347def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348 let NumMicroOps = 19;
349}
Craig Topper02daec02018-04-02 01:12:32 +0000350def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351
Michael Zuckermanf6684002017-06-28 11:23:31 +0000352// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000353def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354 let NumMicroOps = 18;
355}
Craig Topper02daec02018-04-02 01:12:32 +0000356def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357
Michael Zuckermanf6684002017-06-28 11:23:31 +0000358//-- Arithmetic instructions --//
359
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360// DIV.
361// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let Latency = 22;
364 let NumMicroOps = 9;
365}
Craig Topper02daec02018-04-02 01:12:32 +0000366def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368// IDIV.
369// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000370def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000371 let Latency = 23;
372 let NumMicroOps = 9;
373}
Craig Topper02daec02018-04-02 01:12:32 +0000374def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000375
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000378def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000379 let NumMicroOps = 10;
380}
Craig Topper02daec02018-04-02 01:12:32 +0000381def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382
Michael Zuckermanf6684002017-06-28 11:23:31 +0000383// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000385def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386 let NumMicroOps = 11;
387}
Craig Topper02daec02018-04-02 01:12:32 +0000388def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000389
Michael Zuckermanf6684002017-06-28 11:23:31 +0000390//-- Control transfer instructions --//
391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393// i.
Craig Topper02daec02018-04-02 01:12:32 +0000394def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395 let NumMicroOps = 4;
396 let ResourceCycles = [1, 2, 1];
397}
Craig Topper02daec02018-04-02 01:12:32 +0000398def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399
400// BOUND.
401// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000402def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000403 let NumMicroOps = 15;
404}
Craig Topper02daec02018-04-02 01:12:32 +0000405def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406
407// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000408def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409 let NumMicroOps = 4;
410}
Craig Topper02daec02018-04-02 01:12:32 +0000411def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412
413//-- String instructions --//
414
415// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000416def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417
418// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000419def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000422def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000423 let Latency = 4;
424 let NumMicroOps = 5;
425 let ResourceCycles = [2, 1, 2];
426}
Craig Topper02daec02018-04-02 01:12:32 +0000427def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428
Michael Zuckermanf6684002017-06-28 11:23:31 +0000429// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000430def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431 let Latency = 4;
432 let NumMicroOps = 5;
433 let ResourceCycles = [2, 3];
434}
Craig Topper02daec02018-04-02 01:12:32 +0000435def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000436
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437//-- Other --//
438
Gadi Haberd76f7b82017-08-28 10:04:16 +0000439// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000440def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000441 let NumMicroOps = 34;
442}
Craig Topper02daec02018-04-02 01:12:32 +0000443def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000444
445// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000446def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000447 let NumMicroOps = 17;
448 let ResourceCycles = [1, 16];
449}
Craig Topper02daec02018-04-02 01:12:32 +0000450def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000451
452//=== Floating Point x87 Instructions ===//
453//-- Move instructions --//
454
455// FLD.
456// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000457def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000458
Michael Zuckermanf6684002017-06-28 11:23:31 +0000459// FBLD.
460// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000461def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462 let Latency = 47;
463 let NumMicroOps = 43;
464}
Craig Topper02daec02018-04-02 01:12:32 +0000465def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000466
467// FST(P).
468// r.
Craig Topper02daec02018-04-02 01:12:32 +0000469def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000470
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000472def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473
Michael Zuckermanf6684002017-06-28 11:23:31 +0000474// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000475def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
480// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000481def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482 let NumMicroOps = 147;
483}
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
486// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000487def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488 let NumMicroOps = 90;
489}
Craig Topper02daec02018-04-02 01:12:32 +0000490def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491
492//-- Arithmetic instructions --//
493
494// FABS.
Craig Topper02daec02018-04-02 01:12:32 +0000495def : InstRW<[HWWriteP0], (instregex "ABS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000496
497// FCHS.
Craig Topper02daec02018-04-02 01:12:32 +0000498def : InstRW<[HWWriteP0], (instregex "CHS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000499
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500// FCOMPP FUCOMPP.
501// r.
Craig Topper02daec02018-04-02 01:12:32 +0000502def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503
504// FCOMI(P) FUCOMI(P).
505// m.
Craig Topper02daec02018-04-02 01:12:32 +0000506def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
507 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000508
Michael Zuckermanf6684002017-06-28 11:23:31 +0000509// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000510def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
512// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000516def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517 let Latency = 19;
518 let NumMicroOps = 28;
519}
Craig Topper02daec02018-04-02 01:12:32 +0000520def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000521
522// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000523def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524 let Latency = 27;
525 let NumMicroOps = 41;
526}
Craig Topper02daec02018-04-02 01:12:32 +0000527def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000528
529// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000530def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531 let Latency = 11;
532 let NumMicroOps = 17;
533}
Craig Topper02daec02018-04-02 01:12:32 +0000534def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000535
536//-- Math instructions --//
537
538// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000539def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000540 let Latency = 75; // 49-125
541 let NumMicroOps = 50; // 25-75
542}
Craig Topper02daec02018-04-02 01:12:32 +0000543def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000544
545// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000546def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547 let Latency = 15;
548 let NumMicroOps = 17;
549}
Craig Topper02daec02018-04-02 01:12:32 +0000550def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000551
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000552////////////////////////////////////////////////////////////////////////////////
553// Horizontal add/sub instructions.
554////////////////////////////////////////////////////////////////////////////////
555
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000556defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
557defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000558
Michael Zuckermanf6684002017-06-28 11:23:31 +0000559//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000560
Gadi Haberd76f7b82017-08-28 10:04:16 +0000561// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562
Gadi Haberd76f7b82017-08-28 10:04:16 +0000563def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000564 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000568def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
569 "(V?)LDDQUrm",
570 "(V?)MOVAPDrm",
571 "(V?)MOVAPSrm",
572 "(V?)MOVDQArm",
573 "(V?)MOVDQUrm",
574 "(V?)MOVNTDQArm",
575 "(V?)MOVSHDUPrm",
576 "(V?)MOVSLDUPrm",
577 "(V?)MOVUPDrm",
578 "(V?)MOVUPSrm",
579 "VPBROADCASTDrm",
580 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000581 "(V?)ROUNDPD(Y?)r",
582 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000583 "(V?)ROUNDSDr",
584 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000585
586def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
587 let Latency = 7;
588 let NumMicroOps = 1;
589 let ResourceCycles = [1];
590}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000591def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
592 "LD_F64m",
593 "LD_F80m",
594 "VBROADCASTF128",
595 "VBROADCASTI128",
596 "VBROADCASTSDYrm",
597 "VBROADCASTSSYrm",
598 "VLDDQUYrm",
599 "VMOVAPDYrm",
600 "VMOVAPSYrm",
601 "VMOVDDUPYrm",
602 "VMOVDQAYrm",
603 "VMOVDQUYrm",
604 "VMOVNTDQAYrm",
605 "VMOVSHDUPYrm",
606 "VMOVSLDUPYrm",
607 "VMOVUPDYrm",
608 "VMOVUPSYrm",
609 "VPBROADCASTDYrm",
610 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000611
612def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
613 let Latency = 5;
614 let NumMicroOps = 1;
615 let ResourceCycles = [1];
616}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000617def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
618 "MMX_MOVD64to64rm",
619 "MMX_MOVQ64rm",
620 "MOV(8|16|32|64)rm",
621 "MOVSX(16|32|64)rm16",
622 "MOVSX(16|32|64)rm32",
623 "MOVSX(16|32|64)rm8",
624 "MOVZX(16|32|64)rm16",
625 "MOVZX(16|32|64)rm8",
626 "PREFETCHNTA",
627 "PREFETCHT0",
628 "PREFETCHT1",
629 "PREFETCHT2",
630 "(V?)MOV64toPQIrm",
631 "(V?)MOVDDUPrm",
632 "(V?)MOVDI2PDIrm",
633 "(V?)MOVQI2PQIrm",
634 "(V?)MOVSDrm",
635 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000636
Gadi Haberd76f7b82017-08-28 10:04:16 +0000637def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
638 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000639 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000640 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000641}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000642def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
643 "MMX_MOVD64from64rm",
644 "MMX_MOVD64mr",
645 "MMX_MOVNTQmr",
646 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000647 "MOVNTI_64mr",
648 "MOVNTImr",
649 "ST_FP32m",
650 "ST_FP64m",
651 "ST_FP80m",
652 "VEXTRACTF128mr",
653 "VEXTRACTI128mr",
654 "(V?)MOVAPD(Y?)mr",
655 "(V?)MOVAPS(V?)mr",
656 "(V?)MOVDQA(Y?)mr",
657 "(V?)MOVDQU(Y?)mr",
658 "(V?)MOVHPDmr",
659 "(V?)MOVHPSmr",
660 "(V?)MOVLPDmr",
661 "(V?)MOVLPSmr",
662 "(V?)MOVNTDQ(Y?)mr",
663 "(V?)MOVNTPD(Y?)mr",
664 "(V?)MOVNTPS(Y?)mr",
665 "(V?)MOVPDI2DImr",
666 "(V?)MOVPQI2QImr",
667 "(V?)MOVPQIto64mr",
668 "(V?)MOVSDmr",
669 "(V?)MOVSSmr",
670 "(V?)MOVUPD(Y?)mr",
671 "(V?)MOVUPS(Y?)mr",
672 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000673
Gadi Haberd76f7b82017-08-28 10:04:16 +0000674def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
675 let Latency = 1;
676 let NumMicroOps = 1;
677 let ResourceCycles = [1];
678}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000679def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
680 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000681 "MMX_PSLLDri",
682 "MMX_PSLLDrr",
683 "MMX_PSLLQri",
684 "MMX_PSLLQrr",
685 "MMX_PSLLWri",
686 "MMX_PSLLWrr",
687 "MMX_PSRADri",
688 "MMX_PSRADrr",
689 "MMX_PSRAWri",
690 "MMX_PSRAWrr",
691 "MMX_PSRLDri",
692 "MMX_PSRLDrr",
693 "MMX_PSRLQri",
694 "MMX_PSRLQrr",
695 "MMX_PSRLWri",
696 "MMX_PSRLWrr",
697 "(V?)MOVPDI2DIrr",
698 "(V?)MOVPQIto64rr",
699 "(V?)PSLLD(Y?)ri",
700 "(V?)PSLLQ(Y?)ri",
701 "VPSLLVQ(Y?)rr",
702 "(V?)PSLLW(Y?)ri",
703 "(V?)PSRAD(Y?)ri",
704 "(V?)PSRAW(Y?)ri",
705 "(V?)PSRLD(Y?)ri",
706 "(V?)PSRLQ(Y?)ri",
707 "VPSRLVQ(Y?)rr",
708 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000709 "VTESTPD(Y?)rr",
710 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000711
712def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
713 let Latency = 1;
714 let NumMicroOps = 1;
715 let ResourceCycles = [1];
716}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000717def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
718 "COM_FST0r",
719 "UCOM_FPr",
720 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000721
722def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
723 let Latency = 1;
724 let NumMicroOps = 1;
725 let ResourceCycles = [1];
726}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000727def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000728 "MMX_MOVD64to64rr",
729 "MMX_MOVQ2DQrr",
730 "MMX_PALIGNRrri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000731 "MMX_PSHUFWri",
732 "MMX_PUNPCKHBWirr",
733 "MMX_PUNPCKHDQirr",
734 "MMX_PUNPCKHWDirr",
735 "MMX_PUNPCKLBWirr",
736 "MMX_PUNPCKLDQirr",
737 "MMX_PUNPCKLWDirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000738 "(V?)ANDNPD(Y?)rr",
739 "(V?)ANDNPS(Y?)rr",
740 "(V?)ANDPD(Y?)rr",
741 "(V?)ANDPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000742 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000743 "(V?)INSERTPSrr",
744 "(V?)MOV64toPQIrr",
745 "(V?)MOVAPD(Y?)rr",
746 "(V?)MOVAPS(Y?)rr",
747 "(V?)MOVDDUP(Y?)rr",
748 "(V?)MOVDI2PDIrr",
749 "(V?)MOVHLPSrr",
750 "(V?)MOVLHPSrr",
751 "(V?)MOVSDrr",
752 "(V?)MOVSHDUP(Y?)rr",
753 "(V?)MOVSLDUP(Y?)rr",
754 "(V?)MOVSSrr",
755 "(V?)MOVUPD(Y?)rr",
756 "(V?)MOVUPS(Y?)rr",
757 "(V?)ORPD(Y?)rr",
758 "(V?)ORPS(Y?)rr",
759 "(V?)PACKSSDW(Y?)rr",
760 "(V?)PACKSSWB(Y?)rr",
761 "(V?)PACKUSDW(Y?)rr",
762 "(V?)PACKUSWB(Y?)rr",
763 "(V?)PALIGNR(Y?)rri",
764 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000765 "VPBROADCASTDrr",
766 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000767 "VPERMILPD(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000768 "VPERMILPS(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000769 "(V?)PMOVSXBDrr",
770 "(V?)PMOVSXBQrr",
771 "(V?)PMOVSXBWrr",
772 "(V?)PMOVSXDQrr",
773 "(V?)PMOVSXWDrr",
774 "(V?)PMOVSXWQrr",
775 "(V?)PMOVZXBDrr",
776 "(V?)PMOVZXBQrr",
777 "(V?)PMOVZXBWrr",
778 "(V?)PMOVZXDQrr",
779 "(V?)PMOVZXWDrr",
780 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000781 "(V?)PSHUFD(Y?)ri",
782 "(V?)PSHUFHW(Y?)ri",
783 "(V?)PSHUFLW(Y?)ri",
784 "(V?)PSLLDQ(Y?)ri",
785 "(V?)PSRLDQ(Y?)ri",
786 "(V?)PUNPCKHBW(Y?)rr",
787 "(V?)PUNPCKHDQ(Y?)rr",
788 "(V?)PUNPCKHQDQ(Y?)rr",
789 "(V?)PUNPCKHWD(Y?)rr",
790 "(V?)PUNPCKLBW(Y?)rr",
791 "(V?)PUNPCKLDQ(Y?)rr",
792 "(V?)PUNPCKLQDQ(Y?)rr",
793 "(V?)PUNPCKLWD(Y?)rr",
794 "(V?)SHUFPD(Y?)rri",
795 "(V?)SHUFPS(Y?)rri",
796 "(V?)UNPCKHPD(Y?)rr",
797 "(V?)UNPCKHPS(Y?)rr",
798 "(V?)UNPCKLPD(Y?)rr",
799 "(V?)UNPCKLPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000800 "(V?)XORPD(Y?)rr",
801 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000802
803def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
804 let Latency = 1;
805 let NumMicroOps = 1;
806 let ResourceCycles = [1];
807}
808def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
809
810def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
811 let Latency = 1;
812 let NumMicroOps = 1;
813 let ResourceCycles = [1];
814}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000815def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
816 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000817
818def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
819 let Latency = 1;
820 let NumMicroOps = 1;
821 let ResourceCycles = [1];
822}
Craig Topperfbe31322018-04-05 21:56:19 +0000823def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000824def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
825 "BT(16|32|64)rr",
826 "BTC(16|32|64)ri8",
827 "BTC(16|32|64)rr",
828 "BTR(16|32|64)ri8",
829 "BTR(16|32|64)rr",
830 "BTS(16|32|64)ri8",
831 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000832 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
833 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
834 "JMP_1",
835 "JMP_4",
836 "RORX(32|64)ri",
837 "SAR(8|16|32|64)r1",
838 "SAR(8|16|32|64)ri",
839 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000840 "SHL(8|16|32|64)r1",
841 "SHL(8|16|32|64)ri",
842 "SHLX(32|64)rr",
843 "SHR(8|16|32|64)r1",
844 "SHR(8|16|32|64)ri",
845 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000846
847def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
848 let Latency = 1;
849 let NumMicroOps = 1;
850 let ResourceCycles = [1];
851}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000852def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
853 "BLSI(32|64)rr",
854 "BLSMSK(32|64)rr",
855 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000856 "LEA(16|32|64)(_32)?r",
857 "MMX_PABSBrr",
858 "MMX_PABSDrr",
859 "MMX_PABSWrr",
860 "MMX_PADDBirr",
861 "MMX_PADDDirr",
862 "MMX_PADDQirr",
863 "MMX_PADDSBirr",
864 "MMX_PADDSWirr",
865 "MMX_PADDUSBirr",
866 "MMX_PADDUSWirr",
867 "MMX_PADDWirr",
868 "MMX_PAVGBirr",
869 "MMX_PAVGWirr",
870 "MMX_PCMPEQBirr",
871 "MMX_PCMPEQDirr",
872 "MMX_PCMPEQWirr",
873 "MMX_PCMPGTBirr",
874 "MMX_PCMPGTDirr",
875 "MMX_PCMPGTWirr",
876 "MMX_PMAXSWirr",
877 "MMX_PMAXUBirr",
878 "MMX_PMINSWirr",
879 "MMX_PMINUBirr",
880 "MMX_PSIGNBrr",
881 "MMX_PSIGNDrr",
882 "MMX_PSIGNWrr",
883 "MMX_PSUBBirr",
884 "MMX_PSUBDirr",
885 "MMX_PSUBQirr",
886 "MMX_PSUBSBirr",
887 "MMX_PSUBSWirr",
888 "MMX_PSUBUSBirr",
889 "MMX_PSUBUSWirr",
890 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000891 "(V?)PABSB(Y?)rr",
892 "(V?)PABSD(Y?)rr",
893 "(V?)PABSW(Y?)rr",
894 "(V?)PADDB(Y?)rr",
895 "(V?)PADDD(Y?)rr",
896 "(V?)PADDQ(Y?)rr",
897 "(V?)PADDSB(Y?)rr",
898 "(V?)PADDSW(Y?)rr",
899 "(V?)PADDUSB(Y?)rr",
900 "(V?)PADDUSW(Y?)rr",
901 "(V?)PADDW(Y?)rr",
902 "(V?)PAVGB(Y?)rr",
903 "(V?)PAVGW(Y?)rr",
904 "(V?)PCMPEQB(Y?)rr",
905 "(V?)PCMPEQD(Y?)rr",
906 "(V?)PCMPEQQ(Y?)rr",
907 "(V?)PCMPEQW(Y?)rr",
908 "(V?)PCMPGTB(Y?)rr",
909 "(V?)PCMPGTD(Y?)rr",
910 "(V?)PCMPGTW(Y?)rr",
911 "(V?)PMAXSB(Y?)rr",
912 "(V?)PMAXSD(Y?)rr",
913 "(V?)PMAXSW(Y?)rr",
914 "(V?)PMAXUB(Y?)rr",
915 "(V?)PMAXUD(Y?)rr",
916 "(V?)PMAXUW(Y?)rr",
917 "(V?)PMINSB(Y?)rr",
918 "(V?)PMINSD(Y?)rr",
919 "(V?)PMINSW(Y?)rr",
920 "(V?)PMINUB(Y?)rr",
921 "(V?)PMINUD(Y?)rr",
922 "(V?)PMINUW(Y?)rr",
923 "(V?)PSIGNB(Y?)rr",
924 "(V?)PSIGND(Y?)rr",
925 "(V?)PSIGNW(Y?)rr",
926 "(V?)PSUBB(Y?)rr",
927 "(V?)PSUBD(Y?)rr",
928 "(V?)PSUBQ(Y?)rr",
929 "(V?)PSUBSB(Y?)rr",
930 "(V?)PSUBSW(Y?)rr",
931 "(V?)PSUBUSB(Y?)rr",
932 "(V?)PSUBUSW(Y?)rr",
933 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000934
935def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
936 let Latency = 1;
937 let NumMicroOps = 1;
938 let ResourceCycles = [1];
939}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000940def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
941 "MMX_PANDNirr",
942 "MMX_PANDirr",
943 "MMX_PORirr",
944 "MMX_PXORirr",
945 "(V?)BLENDPD(Y?)rri",
946 "(V?)BLENDPS(Y?)rri",
947 "(V?)MOVDQA(Y?)rr",
948 "(V?)MOVDQU(Y?)rr",
949 "(V?)MOVPQI2QIrr",
950 "VMOVZPQILo2PQIrr",
951 "(V?)PANDN(Y?)rr",
952 "(V?)PAND(Y?)rr",
953 "VPBLENDD(Y?)rri",
954 "(V?)POR(Y?)rr",
955 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000956
957def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
958 let Latency = 1;
959 let NumMicroOps = 1;
960 let ResourceCycles = [1];
961}
Craig Topperfbe31322018-04-05 21:56:19 +0000962def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000963def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000964 "CMC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000965 "LAHF",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000966 "NOOP",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000967 "SAHF",
968 "SGDT64m",
969 "SIDT64m",
970 "SLDT64m",
971 "SMSW16m",
972 "STC",
973 "STRm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000974 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000975 "XCHG(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000976
977def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000978 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000979 let NumMicroOps = 2;
980 let ResourceCycles = [1,1];
981}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000982def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
983 "MMX_PSLLQrm",
984 "MMX_PSLLWrm",
985 "MMX_PSRADrm",
986 "MMX_PSRAWrm",
987 "MMX_PSRLDrm",
988 "MMX_PSRLQrm",
989 "MMX_PSRLWrm",
990 "VCVTPH2PSrm",
991 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000992
Gadi Haber2cf601f2017-12-08 09:48:44 +0000993def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
994 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000995 let NumMicroOps = 2;
996 let ResourceCycles = [1,1];
997}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000998def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
999 "(V?)CVTSS2SDrm",
1000 "VPSLLVQrm",
1001 "VPSRLVQrm",
1002 "VTESTPDrm",
1003 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001004
1005def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1006 let Latency = 8;
1007 let NumMicroOps = 2;
1008 let ResourceCycles = [1,1];
1009}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001010def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1011 "VPSLLQYrm",
1012 "VPSLLVQYrm",
1013 "VPSLLWYrm",
1014 "VPSRADYrm",
1015 "VPSRAWYrm",
1016 "VPSRLDYrm",
1017 "VPSRLQYrm",
1018 "VPSRLVQYrm",
1019 "VPSRLWYrm",
1020 "VTESTPDYrm",
1021 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001022
1023def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1024 let Latency = 8;
1025 let NumMicroOps = 2;
1026 let ResourceCycles = [1,1];
1027}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001028def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1029 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001030 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001031def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001032 "FCOM64m",
1033 "FCOMP32m",
1034 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001035 "MMX_CVTPI2PSirm",
1036 "MMX_CVTPS2PIirm",
1037 "MMX_CVTTPS2PIirm",
1038 "PDEP(32|64)rm",
1039 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001040 "(V?)ADDSDrm",
1041 "(V?)ADDSSrm",
1042 "(V?)CMPSDrm",
1043 "(V?)CMPSSrm",
1044 "(V?)COMISDrm",
1045 "(V?)COMISSrm",
1046 "(V?)MAX(C?)SDrm",
1047 "(V?)MAX(C?)SSrm",
1048 "(V?)MIN(C?)SDrm",
1049 "(V?)MIN(C?)SSrm",
1050 "(V?)SUBSDrm",
1051 "(V?)SUBSSrm",
1052 "(V?)UCOMISDrm",
1053 "(V?)UCOMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001054
1055def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001056 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001057 let NumMicroOps = 2;
1058 let ResourceCycles = [1,1];
1059}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001060def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1061 "(V?)ANDNPDrm",
1062 "(V?)ANDNPSrm",
1063 "(V?)ANDPDrm",
1064 "(V?)ANDPSrm",
1065 "(V?)INSERTPSrm",
1066 "(V?)ORPDrm",
1067 "(V?)ORPSrm",
1068 "(V?)PACKSSDWrm",
1069 "(V?)PACKSSWBrm",
1070 "(V?)PACKUSDWrm",
1071 "(V?)PACKUSWBrm",
1072 "(V?)PALIGNRrmi",
1073 "(V?)PBLENDWrmi",
1074 "VPERMILPDmi",
1075 "VPERMILPDrm",
1076 "VPERMILPSmi",
1077 "VPERMILPSrm",
1078 "(V?)PSHUFBrm",
1079 "(V?)PSHUFDmi",
1080 "(V?)PSHUFHWmi",
1081 "(V?)PSHUFLWmi",
1082 "(V?)PUNPCKHBWrm",
1083 "(V?)PUNPCKHDQrm",
1084 "(V?)PUNPCKHQDQrm",
1085 "(V?)PUNPCKHWDrm",
1086 "(V?)PUNPCKLBWrm",
1087 "(V?)PUNPCKLDQrm",
1088 "(V?)PUNPCKLQDQrm",
1089 "(V?)PUNPCKLWDrm",
1090 "(V?)SHUFPDrmi",
1091 "(V?)SHUFPSrmi",
1092 "(V?)UNPCKHPDrm",
1093 "(V?)UNPCKHPSrm",
1094 "(V?)UNPCKLPDrm",
1095 "(V?)UNPCKLPSrm",
1096 "(V?)XORPDrm",
1097 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001098
Gadi Haber2cf601f2017-12-08 09:48:44 +00001099def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1100 let Latency = 8;
1101 let NumMicroOps = 2;
1102 let ResourceCycles = [1,1];
1103}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001104def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1105 "VANDNPSYrm",
1106 "VANDPDYrm",
1107 "VANDPSYrm",
1108 "VORPDYrm",
1109 "VORPSYrm",
1110 "VPACKSSDWYrm",
1111 "VPACKSSWBYrm",
1112 "VPACKUSDWYrm",
1113 "VPACKUSWBYrm",
1114 "VPALIGNRYrmi",
1115 "VPBLENDWYrmi",
1116 "VPERMILPDYmi",
1117 "VPERMILPDYrm",
1118 "VPERMILPSYmi",
1119 "VPERMILPSYrm",
1120 "VPMOVSXBDYrm",
1121 "VPMOVSXBQYrm",
1122 "VPMOVSXWQYrm",
1123 "VPSHUFBYrm",
1124 "VPSHUFDYmi",
1125 "VPSHUFHWYmi",
1126 "VPSHUFLWYmi",
1127 "VPUNPCKHBWYrm",
1128 "VPUNPCKHDQYrm",
1129 "VPUNPCKHQDQYrm",
1130 "VPUNPCKHWDYrm",
1131 "VPUNPCKLBWYrm",
1132 "VPUNPCKLDQYrm",
1133 "VPUNPCKLQDQYrm",
1134 "VPUNPCKLWDYrm",
1135 "VSHUFPDYrmi",
1136 "VSHUFPSYrmi",
1137 "VUNPCKHPDYrm",
1138 "VUNPCKHPSYrm",
1139 "VUNPCKLPDYrm",
1140 "VUNPCKLPSYrm",
1141 "VXORPDYrm",
1142 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001143
1144def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1145 let Latency = 6;
1146 let NumMicroOps = 2;
1147 let ResourceCycles = [1,1];
1148}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001149def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1150 "MMX_PINSRWrm",
1151 "MMX_PSHUFBrm",
1152 "MMX_PSHUFWmi",
1153 "MMX_PUNPCKHBWirm",
1154 "MMX_PUNPCKHDQirm",
1155 "MMX_PUNPCKHWDirm",
1156 "MMX_PUNPCKLBWirm",
1157 "MMX_PUNPCKLDQirm",
1158 "MMX_PUNPCKLWDirm",
1159 "(V?)MOVHPDrm",
1160 "(V?)MOVHPSrm",
1161 "(V?)MOVLPDrm",
1162 "(V?)MOVLPSrm",
1163 "(V?)PINSRBrm",
1164 "(V?)PINSRDrm",
1165 "(V?)PINSRQrm",
1166 "(V?)PINSRWrm",
1167 "(V?)PMOVSXBDrm",
1168 "(V?)PMOVSXBQrm",
1169 "(V?)PMOVSXBWrm",
1170 "(V?)PMOVSXDQrm",
1171 "(V?)PMOVSXWDrm",
1172 "(V?)PMOVSXWQrm",
1173 "(V?)PMOVZXBDrm",
1174 "(V?)PMOVZXBQrm",
1175 "(V?)PMOVZXBWrm",
1176 "(V?)PMOVZXDQrm",
1177 "(V?)PMOVZXWDrm",
1178 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001179
Gadi Haberd76f7b82017-08-28 10:04:16 +00001180def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001181 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001185def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1186 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001187
1188def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001189 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001190 let NumMicroOps = 2;
1191 let ResourceCycles = [1,1];
1192}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001193def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1194 "RORX(32|64)mi",
1195 "SARX(32|64)rm",
1196 "SHLX(32|64)rm",
1197 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001198
1199def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001200 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001201 let NumMicroOps = 2;
1202 let ResourceCycles = [1,1];
1203}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001204def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1205 "BLSI(32|64)rm",
1206 "BLSMSK(32|64)rm",
1207 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001208 "MMX_PABSBrm",
1209 "MMX_PABSDrm",
1210 "MMX_PABSWrm",
1211 "MMX_PADDBirm",
1212 "MMX_PADDDirm",
1213 "MMX_PADDQirm",
1214 "MMX_PADDSBirm",
1215 "MMX_PADDSWirm",
1216 "MMX_PADDUSBirm",
1217 "MMX_PADDUSWirm",
1218 "MMX_PADDWirm",
1219 "MMX_PAVGBirm",
1220 "MMX_PAVGWirm",
1221 "MMX_PCMPEQBirm",
1222 "MMX_PCMPEQDirm",
1223 "MMX_PCMPEQWirm",
1224 "MMX_PCMPGTBirm",
1225 "MMX_PCMPGTDirm",
1226 "MMX_PCMPGTWirm",
1227 "MMX_PMAXSWirm",
1228 "MMX_PMAXUBirm",
1229 "MMX_PMINSWirm",
1230 "MMX_PMINUBirm",
1231 "MMX_PSIGNBrm",
1232 "MMX_PSIGNDrm",
1233 "MMX_PSIGNWrm",
1234 "MMX_PSUBBirm",
1235 "MMX_PSUBDirm",
1236 "MMX_PSUBQirm",
1237 "MMX_PSUBSBirm",
1238 "MMX_PSUBSWirm",
1239 "MMX_PSUBUSBirm",
1240 "MMX_PSUBUSWirm",
1241 "MMX_PSUBWirm",
1242 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001243
1244def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1245 let Latency = 7;
1246 let NumMicroOps = 2;
1247 let ResourceCycles = [1,1];
1248}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001249def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1250 "(V?)PABSDrm",
1251 "(V?)PABSWrm",
1252 "(V?)PADDBrm",
1253 "(V?)PADDDrm",
1254 "(V?)PADDQrm",
1255 "(V?)PADDSBrm",
1256 "(V?)PADDSWrm",
1257 "(V?)PADDUSBrm",
1258 "(V?)PADDUSWrm",
1259 "(V?)PADDWrm",
1260 "(V?)PAVGBrm",
1261 "(V?)PAVGWrm",
1262 "(V?)PCMPEQBrm",
1263 "(V?)PCMPEQDrm",
1264 "(V?)PCMPEQQrm",
1265 "(V?)PCMPEQWrm",
1266 "(V?)PCMPGTBrm",
1267 "(V?)PCMPGTDrm",
1268 "(V?)PCMPGTWrm",
1269 "(V?)PMAXSBrm",
1270 "(V?)PMAXSDrm",
1271 "(V?)PMAXSWrm",
1272 "(V?)PMAXUBrm",
1273 "(V?)PMAXUDrm",
1274 "(V?)PMAXUWrm",
1275 "(V?)PMINSBrm",
1276 "(V?)PMINSDrm",
1277 "(V?)PMINSWrm",
1278 "(V?)PMINUBrm",
1279 "(V?)PMINUDrm",
1280 "(V?)PMINUWrm",
1281 "(V?)PSIGNBrm",
1282 "(V?)PSIGNDrm",
1283 "(V?)PSIGNWrm",
1284 "(V?)PSUBBrm",
1285 "(V?)PSUBDrm",
1286 "(V?)PSUBQrm",
1287 "(V?)PSUBSBrm",
1288 "(V?)PSUBSWrm",
1289 "(V?)PSUBUSBrm",
1290 "(V?)PSUBUSWrm",
1291 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001292
1293def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1294 let Latency = 8;
1295 let NumMicroOps = 2;
1296 let ResourceCycles = [1,1];
1297}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001298def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1299 "VPABSDYrm",
1300 "VPABSWYrm",
1301 "VPADDBYrm",
1302 "VPADDDYrm",
1303 "VPADDQYrm",
1304 "VPADDSBYrm",
1305 "VPADDSWYrm",
1306 "VPADDUSBYrm",
1307 "VPADDUSWYrm",
1308 "VPADDWYrm",
1309 "VPAVGBYrm",
1310 "VPAVGWYrm",
1311 "VPCMPEQBYrm",
1312 "VPCMPEQDYrm",
1313 "VPCMPEQQYrm",
1314 "VPCMPEQWYrm",
1315 "VPCMPGTBYrm",
1316 "VPCMPGTDYrm",
1317 "VPCMPGTWYrm",
1318 "VPMAXSBYrm",
1319 "VPMAXSDYrm",
1320 "VPMAXSWYrm",
1321 "VPMAXUBYrm",
1322 "VPMAXUDYrm",
1323 "VPMAXUWYrm",
1324 "VPMINSBYrm",
1325 "VPMINSDYrm",
1326 "VPMINSWYrm",
1327 "VPMINUBYrm",
1328 "VPMINUDYrm",
1329 "VPMINUWYrm",
1330 "VPSIGNBYrm",
1331 "VPSIGNDYrm",
1332 "VPSIGNWYrm",
1333 "VPSUBBYrm",
1334 "VPSUBDYrm",
1335 "VPSUBQYrm",
1336 "VPSUBSBYrm",
1337 "VPSUBSWYrm",
1338 "VPSUBUSBYrm",
1339 "VPSUBUSWYrm",
1340 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001341
1342def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001343 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001344 let NumMicroOps = 2;
1345 let ResourceCycles = [1,1];
1346}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001347def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1348 "(V?)BLENDPSrmi",
1349 "VINSERTF128rm",
1350 "VINSERTI128rm",
1351 "(V?)PANDNrm",
1352 "(V?)PANDrm",
1353 "VPBLENDDrmi",
1354 "(V?)PORrm",
1355 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001356
Gadi Haber2cf601f2017-12-08 09:48:44 +00001357def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1358 let Latency = 6;
1359 let NumMicroOps = 2;
1360 let ResourceCycles = [1,1];
1361}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001362def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1363 "MMX_PANDirm",
1364 "MMX_PORirm",
1365 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001366
1367def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1368 let Latency = 8;
1369 let NumMicroOps = 2;
1370 let ResourceCycles = [1,1];
1371}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001372def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1373 "VBLENDPSYrmi",
1374 "VPANDNYrm",
1375 "VPANDYrm",
1376 "VPBLENDDYrmi",
1377 "VPORYrm",
1378 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001379
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001381 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001382 let NumMicroOps = 2;
1383 let ResourceCycles = [1,1];
1384}
Craig Topper2d451e72018-03-18 08:38:06 +00001385def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001386def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387
1388def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001389 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001390 let NumMicroOps = 2;
1391 let ResourceCycles = [1,1];
1392}
1393def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1394
1395def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001396 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001397 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001398 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001399}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001400def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1401 "(V?)PEXTRBmr",
1402 "(V?)PEXTRDmr",
1403 "(V?)PEXTRQmr",
1404 "(V?)PEXTRWmr",
1405 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001406
Gadi Haberd76f7b82017-08-28 10:04:16 +00001407def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001408 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001409 let NumMicroOps = 3;
1410 let ResourceCycles = [1,1,1];
1411}
1412def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001413
Gadi Haberd76f7b82017-08-28 10:04:16 +00001414def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001415 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001416 let NumMicroOps = 3;
1417 let ResourceCycles = [1,1,1];
1418}
1419def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1420
1421def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001422 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001423 let NumMicroOps = 3;
1424 let ResourceCycles = [1,1,1];
1425}
1426def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1427
1428def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001429 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001430 let NumMicroOps = 3;
1431 let ResourceCycles = [1,1,1];
1432}
Craig Topper2d451e72018-03-18 08:38:06 +00001433def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001434def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1435 "PUSH64i8",
1436 "STOSB",
1437 "STOSL",
1438 "STOSQ",
1439 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001440
1441def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001442 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001443 let NumMicroOps = 4;
1444 let ResourceCycles = [1,1,1,1];
1445}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001446def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1447 "BTR(16|32|64)mi8",
1448 "BTS(16|32|64)mi8",
1449 "SAR(8|16|32|64)m1",
1450 "SAR(8|16|32|64)mi",
1451 "SHL(8|16|32|64)m1",
1452 "SHL(8|16|32|64)mi",
1453 "SHR(8|16|32|64)m1",
1454 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001455
1456def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001457 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001458 let NumMicroOps = 4;
1459 let ResourceCycles = [1,1,1,1];
1460}
Craig Topperf0d04262018-04-06 16:16:48 +00001461def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1462 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001463
1464def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001465 let Latency = 2;
1466 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001467 let ResourceCycles = [2];
1468}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001469def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1470 "BLENDVPSrr0",
1471 "MMX_PINSRWrr",
1472 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001473 "VBLENDVPD(Y?)rr",
1474 "VBLENDVPS(Y?)rr",
1475 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001476 "(V?)PINSRBrr",
1477 "(V?)PINSRDrr",
1478 "(V?)PINSRQrr",
1479 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001480
Gadi Haberd76f7b82017-08-28 10:04:16 +00001481def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1482 let Latency = 2;
1483 let NumMicroOps = 2;
1484 let ResourceCycles = [2];
1485}
1486def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1487
1488def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1489 let Latency = 2;
1490 let NumMicroOps = 2;
1491 let ResourceCycles = [2];
1492}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001493def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1494 "ROL(8|16|32|64)ri",
1495 "ROR(8|16|32|64)r1",
1496 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001497
1498def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1499 let Latency = 2;
1500 let NumMicroOps = 2;
1501 let ResourceCycles = [2];
1502}
1503def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1504def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1505def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1506def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1507
1508def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1509 let Latency = 2;
1510 let NumMicroOps = 2;
1511 let ResourceCycles = [1,1];
1512}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001513def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1514 "VCVTPH2PSYrr",
1515 "VCVTPH2PSrr",
1516 "(V?)CVTPS2PDrr",
1517 "(V?)CVTSS2SDrr",
1518 "(V?)EXTRACTPSrr",
1519 "(V?)PEXTRBrr",
1520 "(V?)PEXTRDrr",
1521 "(V?)PEXTRQrr",
1522 "(V?)PEXTRWrr",
1523 "(V?)PSLLDrr",
1524 "(V?)PSLLQrr",
1525 "(V?)PSLLWrr",
1526 "(V?)PSRADrr",
1527 "(V?)PSRAWrr",
1528 "(V?)PSRLDrr",
1529 "(V?)PSRLQrr",
1530 "(V?)PSRLWrr",
1531 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001532
1533def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1534 let Latency = 2;
1535 let NumMicroOps = 2;
1536 let ResourceCycles = [1,1];
1537}
1538def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1539
1540def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1541 let Latency = 2;
1542 let NumMicroOps = 2;
1543 let ResourceCycles = [1,1];
1544}
1545def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1546
1547def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1548 let Latency = 2;
1549 let NumMicroOps = 2;
1550 let ResourceCycles = [1,1];
1551}
Craig Topper498875f2018-04-04 17:54:19 +00001552def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1553
1554def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1555 let Latency = 1;
1556 let NumMicroOps = 1;
1557 let ResourceCycles = [1];
1558}
1559def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001560
1561def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1562 let Latency = 2;
1563 let NumMicroOps = 2;
1564 let ResourceCycles = [1,1];
1565}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001566def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1567def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1568 "ADC(8|16|32|64)rr",
1569 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001570 "SBB(8|16|32|64)ri",
1571 "SBB(8|16|32|64)rr",
1572 "SBB(8|16|32|64)i",
1573 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001574
1575def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001576 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001577 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001578 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001579}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001580def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1581 "BLENDVPSrm0",
1582 "PBLENDVBrm0",
1583 "VBLENDVPDrm",
1584 "VBLENDVPSrm",
1585 "VMASKMOVPDrm",
1586 "VMASKMOVPSrm",
1587 "VPBLENDVBrm",
1588 "VPMASKMOVDrm",
1589 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001590
Gadi Haber2cf601f2017-12-08 09:48:44 +00001591def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1592 let Latency = 9;
1593 let NumMicroOps = 3;
1594 let ResourceCycles = [2,1];
1595}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001596def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1597 "VBLENDVPSYrm",
1598 "VMASKMOVPDYrm",
1599 "VMASKMOVPSYrm",
1600 "VPBLENDVBYrm",
1601 "VPMASKMOVDYrm",
1602 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001603
1604def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1605 let Latency = 7;
1606 let NumMicroOps = 3;
1607 let ResourceCycles = [2,1];
1608}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001609def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1610 "MMX_PACKSSWBirm",
1611 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001612
Gadi Haberd76f7b82017-08-28 10:04:16 +00001613def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001614 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001615 let NumMicroOps = 3;
1616 let ResourceCycles = [1,2];
1617}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001618def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1619 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620
1621def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001622 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001623 let NumMicroOps = 3;
1624 let ResourceCycles = [1,1,1];
1625}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001626def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1627 "(V?)PSLLQrm",
1628 "(V?)PSLLWrm",
1629 "(V?)PSRADrm",
1630 "(V?)PSRAWrm",
1631 "(V?)PSRLDrm",
1632 "(V?)PSRLQrm",
1633 "(V?)PSRLWrm",
1634 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001635
1636def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001637 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001638 let NumMicroOps = 3;
1639 let ResourceCycles = [1,1,1];
1640}
1641def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1642
1643def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001644 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001645 let NumMicroOps = 3;
1646 let ResourceCycles = [1,1,1];
1647}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001648def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001649
1650def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001651 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001652 let NumMicroOps = 3;
1653 let ResourceCycles = [1,1,1];
1654}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001655def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1656 "RETL",
1657 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001658
Gadi Haberd76f7b82017-08-28 10:04:16 +00001659def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001660 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001661 let NumMicroOps = 3;
1662 let ResourceCycles = [1,1,1];
1663}
Craig Topperc50570f2018-04-06 17:12:18 +00001664def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1665 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001666
1667def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001668 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001669 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001671}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001672def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001673
Gadi Haberd76f7b82017-08-28 10:04:16 +00001674def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001675 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001676 let NumMicroOps = 4;
1677 let ResourceCycles = [1,1,1,1];
1678}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001679def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1680 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001681
1682def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001683 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001684 let NumMicroOps = 5;
1685 let ResourceCycles = [1,1,1,2];
1686}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001687def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1688 "ROL(8|16|32|64)mi",
1689 "ROR(8|16|32|64)m1",
1690 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001691
1692def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001693 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001694 let NumMicroOps = 5;
1695 let ResourceCycles = [1,1,1,2];
1696}
Craig Topper13a16502018-03-19 00:56:09 +00001697def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001698
1699def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001700 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001701 let NumMicroOps = 5;
1702 let ResourceCycles = [1,1,1,1,1];
1703}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001704def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1705 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001706
Gadi Haberd76f7b82017-08-28 10:04:16 +00001707def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1708 let Latency = 3;
1709 let NumMicroOps = 1;
1710 let ResourceCycles = [1];
1711}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001712def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1713def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1714 "ADD_FST0r",
1715 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001716 "MMX_CVTPI2PSirr",
1717 "PDEP(32|64)rr",
1718 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001719 "SHLD(16|32|64)rri8",
1720 "SHRD(16|32|64)rri8",
1721 "SUBR_FPrST0",
1722 "SUBR_FST0r",
1723 "SUBR_FrST0",
1724 "SUB_FPrST0",
1725 "SUB_FST0r",
1726 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001727 "(V?)ADDPD(Y?)rr",
1728 "(V?)ADDPS(Y?)rr",
1729 "(V?)ADDSDrr",
1730 "(V?)ADDSSrr",
1731 "(V?)ADDSUBPD(Y?)rr",
1732 "(V?)ADDSUBPS(Y?)rr",
1733 "(V?)CMPPD(Y?)rri",
1734 "(V?)CMPPS(Y?)rri",
1735 "(V?)CMPSDrr",
1736 "(V?)CMPSSrr",
1737 "(V?)COMISDrr",
1738 "(V?)COMISSrr",
1739 "(V?)CVTDQ2PS(Y?)rr",
1740 "(V?)CVTPS2DQ(Y?)rr",
1741 "(V?)CVTTPS2DQ(Y?)rr",
1742 "(V?)MAX(C?)PD(Y?)rr",
1743 "(V?)MAX(C?)PS(Y?)rr",
1744 "(V?)MAX(C?)SDrr",
1745 "(V?)MAX(C?)SSrr",
1746 "(V?)MIN(C?)PD(Y?)rr",
1747 "(V?)MIN(C?)PS(Y?)rr",
1748 "(V?)MIN(C?)SDrr",
1749 "(V?)MIN(C?)SSrr",
1750 "(V?)SUBPD(Y?)rr",
1751 "(V?)SUBPS(Y?)rr",
1752 "(V?)SUBSDrr",
1753 "(V?)SUBSSrr",
1754 "(V?)UCOMISDrr",
1755 "(V?)UCOMISSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001756
Clement Courbet327fac42018-03-07 08:14:02 +00001757def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001758 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00001759 let NumMicroOps = 2;
1760 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001761}
Clement Courbet327fac42018-03-07 08:14:02 +00001762def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001763
1764def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1765 let Latency = 3;
1766 let NumMicroOps = 1;
1767 let ResourceCycles = [1];
1768}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001769def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1770 "VBROADCASTSSYrr",
1771 "VEXTRACTF128rr",
1772 "VEXTRACTI128rr",
1773 "VINSERTF128rr",
1774 "VINSERTI128rr",
1775 "VPBROADCASTBYrr",
1776 "VPBROADCASTBrr",
1777 "VPBROADCASTDYrr",
1778 "VPBROADCASTQYrr",
1779 "VPBROADCASTWYrr",
1780 "VPBROADCASTWrr",
1781 "VPERM2F128rr",
1782 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001783 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001784 "VPERMQYri",
1785 "VPMOVSXBDYrr",
1786 "VPMOVSXBQYrr",
1787 "VPMOVSXBWYrr",
1788 "VPMOVSXDQYrr",
1789 "VPMOVSXWDYrr",
1790 "VPMOVSXWQYrr",
1791 "VPMOVZXBDYrr",
1792 "VPMOVZXBQYrr",
1793 "VPMOVZXBWYrr",
1794 "VPMOVZXDQYrr",
1795 "VPMOVZXWDYrr",
1796 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001797
1798def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001799 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001800 let NumMicroOps = 2;
1801 let ResourceCycles = [1,1];
1802}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001803def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1804 "(V?)ADDPSrm",
1805 "(V?)ADDSUBPDrm",
1806 "(V?)ADDSUBPSrm",
1807 "(V?)CMPPDrmi",
1808 "(V?)CMPPSrmi",
1809 "(V?)CVTDQ2PSrm",
1810 "(V?)CVTPS2DQrm",
1811 "(V?)CVTTPS2DQrm",
1812 "(V?)MAX(C?)PDrm",
1813 "(V?)MAX(C?)PSrm",
1814 "(V?)MIN(C?)PDrm",
1815 "(V?)MIN(C?)PSrm",
1816 "(V?)SUBPDrm",
1817 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001818
Gadi Haber2cf601f2017-12-08 09:48:44 +00001819def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1820 let Latency = 10;
1821 let NumMicroOps = 2;
1822 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001824def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1825 "ADD_F64m",
1826 "ILD_F16m",
1827 "ILD_F32m",
1828 "ILD_F64m",
1829 "SUBR_F32m",
1830 "SUBR_F64m",
1831 "SUB_F32m",
1832 "SUB_F64m",
1833 "VADDPDYrm",
1834 "VADDPSYrm",
1835 "VADDSUBPDYrm",
1836 "VADDSUBPSYrm",
1837 "VCMPPDYrmi",
1838 "VCMPPSYrmi",
1839 "VCVTDQ2PSYrm",
1840 "VCVTPS2DQYrm",
1841 "VCVTTPS2DQYrm",
1842 "VMAX(C?)PDYrm",
1843 "VMAX(C?)PSYrm",
1844 "VMIN(C?)PDYrm",
1845 "VMIN(C?)PSYrm",
1846 "VSUBPDYrm",
1847 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001848
1849def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001850 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001851 let NumMicroOps = 2;
1852 let ResourceCycles = [1,1];
1853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001854def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1855 "VPERM2I128rm",
1856 "VPERMDYrm",
1857 "VPERMPDYmi",
1858 "VPERMPSYrm",
1859 "VPERMQYmi",
1860 "VPMOVZXBDYrm",
1861 "VPMOVZXBQYrm",
1862 "VPMOVZXBWYrm",
1863 "VPMOVZXDQYrm",
1864 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001865
Gadi Haber2cf601f2017-12-08 09:48:44 +00001866def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1867 let Latency = 9;
1868 let NumMicroOps = 2;
1869 let ResourceCycles = [1,1];
1870}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001871def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1872 "VPMOVSXDQYrm",
1873 "VPMOVSXWDYrm",
1874 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001875
Gadi Haberd76f7b82017-08-28 10:04:16 +00001876def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1877 let Latency = 3;
1878 let NumMicroOps = 3;
1879 let ResourceCycles = [3];
1880}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001881def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1882 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001883
1884def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1885 let Latency = 3;
1886 let NumMicroOps = 3;
1887 let ResourceCycles = [2,1];
1888}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001889def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1890 "VPSRAVD(Y?)rr",
1891 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001892
1893def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1894 let Latency = 3;
1895 let NumMicroOps = 3;
1896 let ResourceCycles = [2,1];
1897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001898def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1899 "MMX_PHADDSWrr",
1900 "MMX_PHADDWrr",
1901 "MMX_PHSUBDrr",
1902 "MMX_PHSUBSWrr",
1903 "MMX_PHSUBWrr",
1904 "(V?)PHADDD(Y?)rr",
1905 "(V?)PHADDSW(Y?)rr",
1906 "(V?)PHADDW(Y?)rr",
1907 "(V?)PHSUBD(Y?)rr",
1908 "(V?)PHSUBSW(Y?)rr",
1909 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001910
1911def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1912 let Latency = 3;
1913 let NumMicroOps = 3;
1914 let ResourceCycles = [2,1];
1915}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001916def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1917 "MMX_PACKSSWBirr",
1918 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001919
1920def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1921 let Latency = 3;
1922 let NumMicroOps = 3;
1923 let ResourceCycles = [1,2];
1924}
1925def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1926
1927def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1928 let Latency = 3;
1929 let NumMicroOps = 3;
1930 let ResourceCycles = [1,2];
1931}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001932def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1933 "RCL(8|16|32|64)r1",
1934 "RCL(8|16|32|64)ri",
1935 "RCR(8|16|32|64)r1",
1936 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937
1938def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1939 let Latency = 3;
1940 let NumMicroOps = 3;
1941 let ResourceCycles = [2,1];
1942}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001943def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1944 "ROR(8|16|32|64)rCL",
1945 "SAR(8|16|32|64)rCL",
1946 "SHL(8|16|32|64)rCL",
1947 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001948
1949def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001950 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001951 let NumMicroOps = 3;
1952 let ResourceCycles = [1,1,1];
1953}
1954def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1955
1956def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001957 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001958 let NumMicroOps = 3;
1959 let ResourceCycles = [1,1,1];
1960}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001961def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1962 "ISTT_FP32m",
1963 "ISTT_FP64m",
1964 "IST_F16m",
1965 "IST_F32m",
1966 "IST_FP16m",
1967 "IST_FP32m",
1968 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001969
1970def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001971 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001972 let NumMicroOps = 4;
1973 let ResourceCycles = [2,1,1];
1974}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001975def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1976 "VPSRAVDYrm",
1977 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001978
1979def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1980 let Latency = 9;
1981 let NumMicroOps = 4;
1982 let ResourceCycles = [2,1,1];
1983}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001984def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1985 "VPSRAVDrm",
1986 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001987
1988def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001989 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001990 let NumMicroOps = 4;
1991 let ResourceCycles = [2,1,1];
1992}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001993def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
1994 "MMX_PHADDSWrm",
1995 "MMX_PHADDWrm",
1996 "MMX_PHSUBDrm",
1997 "MMX_PHSUBSWrm",
1998 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001999
2000def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2001 let Latency = 10;
2002 let NumMicroOps = 4;
2003 let ResourceCycles = [2,1,1];
2004}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002005def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
2006 "VPHADDSWYrm",
2007 "VPHADDWYrm",
2008 "VPHSUBDYrm",
2009 "VPHSUBSWYrm",
2010 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002011
2012def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2013 let Latency = 9;
2014 let NumMicroOps = 4;
2015 let ResourceCycles = [2,1,1];
2016}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002017def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
2018 "(V?)PHADDSWrm",
2019 "(V?)PHADDWrm",
2020 "(V?)PHSUBDrm",
2021 "(V?)PHSUBSWrm",
2022 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002023
2024def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002025 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002026 let NumMicroOps = 4;
2027 let ResourceCycles = [1,1,2];
2028}
Craig Topperf4cd9082018-01-19 05:47:32 +00002029def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002030
2031def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002032 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002033 let NumMicroOps = 5;
2034 let ResourceCycles = [1,1,1,2];
2035}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002036def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2037 "RCL(8|16|32|64)mi",
2038 "RCR(8|16|32|64)m1",
2039 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002040
2041def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002042 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002043 let NumMicroOps = 5;
2044 let ResourceCycles = [1,1,2,1];
2045}
Craig Topper13a16502018-03-19 00:56:09 +00002046def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002047
2048def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002049 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002050 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002051 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002052}
Craig Topper9f834812018-04-01 21:54:24 +00002053def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002054
Gadi Haberd76f7b82017-08-28 10:04:16 +00002055def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002056 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002057 let NumMicroOps = 6;
2058 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002059}
Craig Topper9f834812018-04-01 21:54:24 +00002060def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002061 "CMPXCHG(8|16|32|64)rm",
2062 "ROL(8|16|32|64)mCL",
2063 "SAR(8|16|32|64)mCL",
2064 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002065 "SHL(8|16|32|64)mCL",
2066 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00002067def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2068 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002069
Gadi Haberd76f7b82017-08-28 10:04:16 +00002070def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2071 let Latency = 4;
2072 let NumMicroOps = 2;
2073 let ResourceCycles = [1,1];
2074}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002075def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2076 "(V?)CVTSD2SIrr",
2077 "(V?)CVTSS2SI64rr",
2078 "(V?)CVTSS2SIrr",
2079 "(V?)CVTTSD2SI64rr",
2080 "(V?)CVTTSD2SIrr",
2081 "(V?)CVTTSS2SI64rr",
2082 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002083
2084def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2085 let Latency = 4;
2086 let NumMicroOps = 2;
2087 let ResourceCycles = [1,1];
2088}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002089def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2090 "VPSLLDYrr",
2091 "VPSLLQYrr",
2092 "VPSLLWYrr",
2093 "VPSRADYrr",
2094 "VPSRAWYrr",
2095 "VPSRLDYrr",
2096 "VPSRLQYrr",
2097 "VPSRLWYrr",
2098 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002099
2100def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2101 let Latency = 4;
2102 let NumMicroOps = 2;
2103 let ResourceCycles = [1,1];
2104}
2105def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2106
2107def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2108 let Latency = 4;
2109 let NumMicroOps = 2;
2110 let ResourceCycles = [1,1];
2111}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002112def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2113 "MMX_CVTPI2PDirr",
2114 "MMX_CVTPS2PIirr",
2115 "MMX_CVTTPD2PIirr",
2116 "MMX_CVTTPS2PIirr",
2117 "(V?)CVTDQ2PDrr",
2118 "(V?)CVTPD2DQrr",
2119 "(V?)CVTPD2PSrr",
2120 "VCVTPS2PHrr",
2121 "(V?)CVTSD2SSrr",
2122 "(V?)CVTSI642SDrr",
2123 "(V?)CVTSI2SDrr",
2124 "(V?)CVTSI2SSrr",
2125 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002126
2127def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2128 let Latency = 4;
2129 let NumMicroOps = 2;
2130 let ResourceCycles = [1,1];
2131}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002132def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002133
2134def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2135 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002136 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002137}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002138def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002139
Gadi Haberd76f7b82017-08-28 10:04:16 +00002140def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002142 let NumMicroOps = 3;
2143 let ResourceCycles = [2,1];
2144}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002145def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2146 "FICOM32m",
2147 "FICOMP16m",
2148 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002149
2150def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002151 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002152 let NumMicroOps = 3;
2153 let ResourceCycles = [1,1,1];
2154}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002155def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2156 "(V?)CVTSD2SIrm",
2157 "(V?)CVTSS2SI64rm",
2158 "(V?)CVTSS2SIrm",
2159 "(V?)CVTTSD2SI64rm",
2160 "(V?)CVTTSD2SIrm",
2161 "VCVTTSS2SI64rm",
2162 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002163
2164def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002165 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002166 let NumMicroOps = 3;
2167 let ResourceCycles = [1,1,1];
2168}
2169def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002170
2171def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2172 let Latency = 11;
2173 let NumMicroOps = 3;
2174 let ResourceCycles = [1,1,1];
2175}
2176def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002177
2178def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002179 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002180 let NumMicroOps = 3;
2181 let ResourceCycles = [1,1,1];
2182}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002183def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2184 "CVTPD2PSrm",
2185 "CVTTPD2DQrm",
2186 "MMX_CVTPD2PIirm",
2187 "MMX_CVTTPD2PIirm",
2188 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002189
2190def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2191 let Latency = 9;
2192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,1,1];
2194}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002195def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2196 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002197
2198def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002199 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002200 let NumMicroOps = 3;
2201 let ResourceCycles = [1,1,1];
2202}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002203def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002204
2205def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002206 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002207 let NumMicroOps = 3;
2208 let ResourceCycles = [1,1,1];
2209}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002210def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2211 "VPBROADCASTBrm",
2212 "VPBROADCASTWYrm",
2213 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002214
2215def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2216 let Latency = 4;
2217 let NumMicroOps = 4;
2218 let ResourceCycles = [4];
2219}
2220def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2221
2222def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2223 let Latency = 4;
2224 let NumMicroOps = 4;
2225 let ResourceCycles = [1,3];
2226}
2227def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2228
2229def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2230 let Latency = 4;
2231 let NumMicroOps = 4;
2232 let ResourceCycles = [1,1,2];
2233}
2234def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2235
2236def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002237 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002238 let NumMicroOps = 4;
2239 let ResourceCycles = [1,1,1,1];
2240}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002241def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2242 "VMASKMOVPS(Y?)mr",
2243 "VPMASKMOVD(Y?)mr",
2244 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002245
2246def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002247 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002248 let NumMicroOps = 4;
2249 let ResourceCycles = [1,1,1,1];
2250}
2251def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2252
2253def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002254 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002255 let NumMicroOps = 4;
2256 let ResourceCycles = [1,1,1,1];
2257}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002258def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2259 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002260
2261def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002262 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002263 let NumMicroOps = 5;
2264 let ResourceCycles = [1,2,1,1];
2265}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002266def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2267 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002268
2269def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002270 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002271 let NumMicroOps = 6;
2272 let ResourceCycles = [1,1,4];
2273}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002274def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2275 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002276
2277def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002278 let Latency = 5;
2279 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002280 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002281}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002282def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2283 "MMX_PMADDWDirr",
2284 "MMX_PMULHRSWrr",
2285 "MMX_PMULHUWirr",
2286 "MMX_PMULHWirr",
2287 "MMX_PMULLWirr",
2288 "MMX_PMULUDQirr",
2289 "MMX_PSADBWirr",
2290 "MUL_FPrST0",
2291 "MUL_FST0r",
2292 "MUL_FrST0",
2293 "(V?)PCMPGTQ(Y?)rr",
2294 "(V?)PHMINPOSUWrr",
2295 "(V?)PMADDUBSW(Y?)rr",
2296 "(V?)PMADDWD(Y?)rr",
2297 "(V?)PMULDQ(Y?)rr",
2298 "(V?)PMULHRSW(Y?)rr",
2299 "(V?)PMULHUW(Y?)rr",
2300 "(V?)PMULHW(Y?)rr",
2301 "(V?)PMULLW(Y?)rr",
2302 "(V?)PMULUDQ(Y?)rr",
2303 "(V?)PSADBW(Y?)rr",
2304 "(V?)RCPPSr",
2305 "(V?)RCPSSr",
2306 "(V?)RSQRTPSr",
2307 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002308
Gadi Haberd76f7b82017-08-28 10:04:16 +00002309def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002310 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002311 let NumMicroOps = 1;
2312 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002313}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002314def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2315 "(V?)MULPS(Y?)rr",
2316 "(V?)MULSDrr",
2317 "(V?)MULSSrr",
2318 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2319 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002320
Gadi Haberd76f7b82017-08-28 10:04:16 +00002321def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002322 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002323 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002324 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002325}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002326def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2327 "MMX_PMADDWDirm",
2328 "MMX_PMULHRSWrm",
2329 "MMX_PMULHUWirm",
2330 "MMX_PMULHWirm",
2331 "MMX_PMULLWirm",
2332 "MMX_PMULUDQirm",
2333 "MMX_PSADBWirm",
2334 "(V?)RCPSSm",
2335 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002336
Craig Topper8104f262018-04-02 05:33:28 +00002337def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002338 let Latency = 16;
2339 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002340 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002341}
2342def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2343
Craig Topper8104f262018-04-02 05:33:28 +00002344def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002345 let Latency = 18;
2346 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002347 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002348}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002349def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002350
2351def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2352 let Latency = 11;
2353 let NumMicroOps = 2;
2354 let ResourceCycles = [1,1];
2355}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002356def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2357 "(V?)PHMINPOSUWrm",
2358 "(V?)PMADDUBSWrm",
2359 "(V?)PMADDWDrm",
2360 "(V?)PMULDQrm",
2361 "(V?)PMULHRSWrm",
2362 "(V?)PMULHUWrm",
2363 "(V?)PMULHWrm",
2364 "(V?)PMULLWrm",
2365 "(V?)PMULUDQrm",
2366 "(V?)PSADBWrm",
2367 "(V?)RCPPSm",
2368 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002369
2370def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2371 let Latency = 12;
2372 let NumMicroOps = 2;
2373 let ResourceCycles = [1,1];
2374}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002375def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2376 "MUL_F64m",
2377 "VPCMPGTQYrm",
2378 "VPMADDUBSWYrm",
2379 "VPMADDWDYrm",
2380 "VPMULDQYrm",
2381 "VPMULHRSWYrm",
2382 "VPMULHUWYrm",
2383 "VPMULHWYrm",
2384 "VPMULLWYrm",
2385 "VPMULUDQYrm",
2386 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002387
Gadi Haberd76f7b82017-08-28 10:04:16 +00002388def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002389 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390 let NumMicroOps = 2;
2391 let ResourceCycles = [1,1];
2392}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002393def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2394 "(V?)MULPSrm",
2395 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002396
2397def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2398 let Latency = 12;
2399 let NumMicroOps = 2;
2400 let ResourceCycles = [1,1];
2401}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002402def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2403 "VMULPSYrm",
2404 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002405
2406def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2407 let Latency = 10;
2408 let NumMicroOps = 2;
2409 let ResourceCycles = [1,1];
2410}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002411def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2412 "(V?)MULSSrm",
2413 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002414
2415def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2416 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002417 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002418 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002419}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002420def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2421 "(V?)HADDPD(Y?)rr",
2422 "(V?)HADDPS(Y?)rr",
2423 "(V?)HSUBPD(Y?)rr",
2424 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002425
Gadi Haberd76f7b82017-08-28 10:04:16 +00002426def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2427 let Latency = 5;
2428 let NumMicroOps = 3;
2429 let ResourceCycles = [1,1,1];
2430}
2431def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2432
2433def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002434 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435 let NumMicroOps = 3;
2436 let ResourceCycles = [1,1,1];
2437}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002438def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439
2440def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002441 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002442 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002443 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002444}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002445def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2446 "(V?)HADDPSrm",
2447 "(V?)HSUBPDrm",
2448 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002449
Gadi Haber2cf601f2017-12-08 09:48:44 +00002450def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2451 let Latency = 12;
2452 let NumMicroOps = 4;
2453 let ResourceCycles = [1,2,1];
2454}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002455def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2456 "VHADDPSYrm",
2457 "VHSUBPDYrm",
2458 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002459
Gadi Haberd76f7b82017-08-28 10:04:16 +00002460def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002461 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002462 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002463 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002464}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002465def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002466
Gadi Haberd76f7b82017-08-28 10:04:16 +00002467def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002468 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002469 let NumMicroOps = 4;
2470 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002471}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002472def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002473
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2475 let Latency = 5;
2476 let NumMicroOps = 5;
2477 let ResourceCycles = [1,4];
2478}
2479def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2480
2481def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2482 let Latency = 5;
2483 let NumMicroOps = 5;
2484 let ResourceCycles = [1,4];
2485}
2486def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2487
2488def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2489 let Latency = 5;
2490 let NumMicroOps = 5;
2491 let ResourceCycles = [2,3];
2492}
Craig Topper13a16502018-03-19 00:56:09 +00002493def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002494
2495def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2496 let Latency = 6;
2497 let NumMicroOps = 2;
2498 let ResourceCycles = [1,1];
2499}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002500def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2501 "VCVTPD2DQYrr",
2502 "VCVTPD2PSYrr",
2503 "VCVTPS2PHYrr",
2504 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002505
2506def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002507 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002508 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002509 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002510}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002511def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2512 "ADD_FI32m",
2513 "SUBR_FI16m",
2514 "SUBR_FI32m",
2515 "SUB_FI16m",
2516 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002517 "VROUNDPDYm",
2518 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002519
Gadi Haber2cf601f2017-12-08 09:48:44 +00002520def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2521 let Latency = 12;
2522 let NumMicroOps = 3;
2523 let ResourceCycles = [2,1];
2524}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002525def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2526 "(V?)ROUNDPSm",
2527 "(V?)ROUNDSDm",
2528 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002529
Gadi Haberd76f7b82017-08-28 10:04:16 +00002530def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002531 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002532 let NumMicroOps = 3;
2533 let ResourceCycles = [1,1,1];
2534}
2535def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2536
2537def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2538 let Latency = 6;
2539 let NumMicroOps = 4;
2540 let ResourceCycles = [1,1,2];
2541}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002542def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2543 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002544
2545def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002546 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002547 let NumMicroOps = 4;
2548 let ResourceCycles = [1,1,1,1];
2549}
2550def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2551
2552def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2553 let Latency = 6;
2554 let NumMicroOps = 4;
2555 let ResourceCycles = [1,1,1,1];
2556}
2557def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2558
2559def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2560 let Latency = 6;
2561 let NumMicroOps = 6;
2562 let ResourceCycles = [1,5];
2563}
2564def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2565
2566def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002567 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002568 let NumMicroOps = 6;
2569 let ResourceCycles = [1,1,1,1,2];
2570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002571def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2572 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002573
Gadi Haberd76f7b82017-08-28 10:04:16 +00002574def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2575 let Latency = 7;
2576 let NumMicroOps = 3;
2577 let ResourceCycles = [1,2];
2578}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002579def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002580
2581def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002582 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002583 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002584 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002585}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002586def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002587
Gadi Haber2cf601f2017-12-08 09:48:44 +00002588def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2589 let Latency = 14;
2590 let NumMicroOps = 4;
2591 let ResourceCycles = [1,2,1];
2592}
2593def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2594
Gadi Haberd76f7b82017-08-28 10:04:16 +00002595def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2596 let Latency = 7;
2597 let NumMicroOps = 7;
2598 let ResourceCycles = [2,2,1,2];
2599}
Craig Topper2d451e72018-03-18 08:38:06 +00002600def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002601
2602def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002603 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002604 let NumMicroOps = 3;
2605 let ResourceCycles = [1,1,1];
2606}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002607def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2608 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002609
2610def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2611 let Latency = 9;
2612 let NumMicroOps = 3;
2613 let ResourceCycles = [1,1,1];
2614}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002615def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002616
2617def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002618 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002619 let NumMicroOps = 4;
2620 let ResourceCycles = [1,1,1,1];
2621}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002622def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002623
Gadi Haber2cf601f2017-12-08 09:48:44 +00002624def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2625 let Latency = 17;
2626 let NumMicroOps = 3;
2627 let ResourceCycles = [2,1];
2628}
2629def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2630
Gadi Haberd76f7b82017-08-28 10:04:16 +00002631def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002632 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002633 let NumMicroOps = 10;
2634 let ResourceCycles = [1,1,1,4,1,2];
2635}
Craig Topper13a16502018-03-19 00:56:09 +00002636def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002637
Craig Topper8104f262018-04-02 05:33:28 +00002638def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002639 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002640 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002641 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002642}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002643def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2644 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002645
Gadi Haberd76f7b82017-08-28 10:04:16 +00002646def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2647 let Latency = 11;
2648 let NumMicroOps = 3;
2649 let ResourceCycles = [2,1];
2650}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002651def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2652 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002653
Gadi Haberd76f7b82017-08-28 10:04:16 +00002654def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002655 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656 let NumMicroOps = 4;
2657 let ResourceCycles = [2,1,1];
2658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002659def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2660 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002661
2662def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2663 let Latency = 11;
2664 let NumMicroOps = 7;
2665 let ResourceCycles = [2,2,3];
2666}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002667def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2668 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002669
2670def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2671 let Latency = 11;
2672 let NumMicroOps = 9;
2673 let ResourceCycles = [1,4,1,3];
2674}
2675def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2676
2677def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2678 let Latency = 11;
2679 let NumMicroOps = 11;
2680 let ResourceCycles = [2,9];
2681}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002682def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002683
2684def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002685 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002686 let NumMicroOps = 14;
2687 let ResourceCycles = [1,1,1,4,2,5];
2688}
2689def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2690
Craig Topper8104f262018-04-02 05:33:28 +00002691def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002692 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002693 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002694 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002695}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002696def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2697 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002698
Craig Topper8104f262018-04-02 05:33:28 +00002699def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002700 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002701 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002702 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002704def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002705
2706def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002707 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002708 let NumMicroOps = 11;
2709 let ResourceCycles = [2,1,1,3,1,3];
2710}
Craig Topper13a16502018-03-19 00:56:09 +00002711def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002712
Craig Topper8104f262018-04-02 05:33:28 +00002713def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002714 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002715 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002716 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002717}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002718def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002719
Gadi Haberd76f7b82017-08-28 10:04:16 +00002720def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2721 let Latency = 14;
2722 let NumMicroOps = 4;
2723 let ResourceCycles = [2,1,1];
2724}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002725def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002726
2727def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002728 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002729 let NumMicroOps = 5;
2730 let ResourceCycles = [2,1,1,1];
2731}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002732def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002733
Gadi Haber2cf601f2017-12-08 09:48:44 +00002734def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2735 let Latency = 21;
2736 let NumMicroOps = 5;
2737 let ResourceCycles = [2,1,1,1];
2738}
2739def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2740
Gadi Haberd76f7b82017-08-28 10:04:16 +00002741def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2742 let Latency = 14;
2743 let NumMicroOps = 10;
2744 let ResourceCycles = [2,3,1,4];
2745}
2746def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2747
2748def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002749 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002750 let NumMicroOps = 15;
2751 let ResourceCycles = [1,14];
2752}
2753def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2754
2755def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002756 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002757 let NumMicroOps = 8;
2758 let ResourceCycles = [1,1,1,1,1,1,2];
2759}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002760def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2761 "INSL",
2762 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002763
2764def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2765 let Latency = 16;
2766 let NumMicroOps = 16;
2767 let ResourceCycles = [16];
2768}
2769def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2770
2771def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002772 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002773 let NumMicroOps = 19;
2774 let ResourceCycles = [2,1,4,1,1,4,6];
2775}
2776def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2777
2778def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2779 let Latency = 17;
2780 let NumMicroOps = 15;
2781 let ResourceCycles = [2,1,2,4,2,4];
2782}
2783def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2784
Gadi Haberd76f7b82017-08-28 10:04:16 +00002785def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2786 let Latency = 18;
2787 let NumMicroOps = 8;
2788 let ResourceCycles = [1,1,1,5];
2789}
2790def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002791def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002792
Gadi Haberd76f7b82017-08-28 10:04:16 +00002793def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002794 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002795 let NumMicroOps = 19;
2796 let ResourceCycles = [3,1,15];
2797}
Craig Topper391c6f92017-12-10 01:24:08 +00002798def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002799
Gadi Haberd76f7b82017-08-28 10:04:16 +00002800def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2801 let Latency = 20;
2802 let NumMicroOps = 1;
2803 let ResourceCycles = [1];
2804}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002805def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2806 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002807 "DIV_FrST0")>;
2808
2809def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2810 let Latency = 20;
2811 let NumMicroOps = 1;
2812 let ResourceCycles = [1,14];
2813}
2814def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2815 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002816
2817def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002818 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002819 let NumMicroOps = 2;
2820 let ResourceCycles = [1,1];
2821}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002822def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002823 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002824
Craig Topper8104f262018-04-02 05:33:28 +00002825def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002826 let Latency = 26;
2827 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002828 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002829}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002830def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002831
Craig Topper8104f262018-04-02 05:33:28 +00002832def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002833 let Latency = 21;
2834 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002835 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002836}
2837def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2838
Craig Topper8104f262018-04-02 05:33:28 +00002839def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002840 let Latency = 22;
2841 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002842 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002843}
2844def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2845
Craig Topper8104f262018-04-02 05:33:28 +00002846def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002847 let Latency = 25;
2848 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002849 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002850}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002851def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002852
2853def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2854 let Latency = 20;
2855 let NumMicroOps = 10;
2856 let ResourceCycles = [1,2,7];
2857}
2858def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2859
Craig Topper8104f262018-04-02 05:33:28 +00002860def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002861 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002862 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002863 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002864}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002865def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2866 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002867
Craig Topper8104f262018-04-02 05:33:28 +00002868def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002869 let Latency = 21;
2870 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002871 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002872}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002873def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2874 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002875
Craig Topper8104f262018-04-02 05:33:28 +00002876def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002877 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002878 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002879 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002880}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002881def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2882 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002883
2884def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002885 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002886 let NumMicroOps = 3;
2887 let ResourceCycles = [1,1,1];
2888}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002889def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2890 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002891
2892def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2893 let Latency = 24;
2894 let NumMicroOps = 1;
2895 let ResourceCycles = [1];
2896}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002897def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2898 "DIVR_FST0r",
2899 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002900
2901def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002902 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002903 let NumMicroOps = 2;
2904 let ResourceCycles = [1,1];
2905}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002906def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2907 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002908
2909def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002910 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002911 let NumMicroOps = 27;
2912 let ResourceCycles = [1,5,1,1,19];
2913}
2914def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2915
2916def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002917 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002918 let NumMicroOps = 28;
2919 let ResourceCycles = [1,6,1,1,19];
2920}
Craig Topper2d451e72018-03-18 08:38:06 +00002921def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002922
2923def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002924 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002925 let NumMicroOps = 3;
2926 let ResourceCycles = [1,1,1];
2927}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002928def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2929 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002930
Gadi Haberd76f7b82017-08-28 10:04:16 +00002931def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002932 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002933 let NumMicroOps = 23;
2934 let ResourceCycles = [1,5,3,4,10];
2935}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002936def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2937 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002938
2939def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002940 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002941 let NumMicroOps = 23;
2942 let ResourceCycles = [1,5,2,1,4,10];
2943}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002944def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2945 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002946
2947def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2948 let Latency = 31;
2949 let NumMicroOps = 31;
2950 let ResourceCycles = [8,1,21,1];
2951}
2952def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2953
Craig Topper8104f262018-04-02 05:33:28 +00002954def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002955 let Latency = 35;
2956 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002957 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002958}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002959def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2960 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002961
Craig Topper8104f262018-04-02 05:33:28 +00002962def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002963 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002964 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002965 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002966}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002967def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2968 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002969
2970def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002971 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002972 let NumMicroOps = 18;
2973 let ResourceCycles = [1,1,2,3,1,1,1,8];
2974}
2975def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2976
2977def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2978 let Latency = 42;
2979 let NumMicroOps = 22;
2980 let ResourceCycles = [2,20];
2981}
Craig Topper2d451e72018-03-18 08:38:06 +00002982def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002983
2984def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002985 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002986 let NumMicroOps = 64;
2987 let ResourceCycles = [2,2,8,1,10,2,39];
2988}
2989def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002990
2991def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002992 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002993 let NumMicroOps = 88;
2994 let ResourceCycles = [4,4,31,1,2,1,45];
2995}
Craig Topper2d451e72018-03-18 08:38:06 +00002996def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002997
2998def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002999 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003000 let NumMicroOps = 90;
3001 let ResourceCycles = [4,2,33,1,2,1,47];
3002}
Craig Topper2d451e72018-03-18 08:38:06 +00003003def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003004
3005def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
3006 let Latency = 75;
3007 let NumMicroOps = 15;
3008 let ResourceCycles = [6,3,6];
3009}
3010def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
3011
3012def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3013 let Latency = 98;
3014 let NumMicroOps = 32;
3015 let ResourceCycles = [7,7,3,3,1,11];
3016}
3017def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
3018
3019def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3020 let Latency = 112;
3021 let NumMicroOps = 66;
3022 let ResourceCycles = [4,2,4,8,14,34];
3023}
3024def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3025
3026def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003027 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003028 let NumMicroOps = 100;
3029 let ResourceCycles = [9,9,11,8,1,11,21,30];
3030}
3031def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003032
Gadi Haber2cf601f2017-12-08 09:48:44 +00003033def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3034 let Latency = 26;
3035 let NumMicroOps = 12;
3036 let ResourceCycles = [2,2,1,3,2,2];
3037}
Craig Topper17a31182017-12-16 18:35:29 +00003038def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3039 VPGATHERDQrm,
3040 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003041
3042def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3043 let Latency = 24;
3044 let NumMicroOps = 22;
3045 let ResourceCycles = [5,3,4,1,5,4];
3046}
Craig Topper17a31182017-12-16 18:35:29 +00003047def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3048 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003049
3050def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3051 let Latency = 28;
3052 let NumMicroOps = 22;
3053 let ResourceCycles = [5,3,4,1,5,4];
3054}
Craig Topper17a31182017-12-16 18:35:29 +00003055def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003056
3057def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3058 let Latency = 25;
3059 let NumMicroOps = 22;
3060 let ResourceCycles = [5,3,4,1,5,4];
3061}
Craig Topper17a31182017-12-16 18:35:29 +00003062def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003063
3064def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3065 let Latency = 27;
3066 let NumMicroOps = 20;
3067 let ResourceCycles = [3,3,4,1,5,4];
3068}
Craig Topper17a31182017-12-16 18:35:29 +00003069def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3070 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003071
3072def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3073 let Latency = 27;
3074 let NumMicroOps = 34;
3075 let ResourceCycles = [5,3,8,1,9,8];
3076}
Craig Topper17a31182017-12-16 18:35:29 +00003077def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3078 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003079
3080def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3081 let Latency = 23;
3082 let NumMicroOps = 14;
3083 let ResourceCycles = [3,3,2,1,3,2];
3084}
Craig Topper17a31182017-12-16 18:35:29 +00003085def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3086 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003087
3088def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3089 let Latency = 28;
3090 let NumMicroOps = 15;
3091 let ResourceCycles = [3,3,2,1,4,2];
3092}
Craig Topper17a31182017-12-16 18:35:29 +00003093def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003094
3095def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3096 let Latency = 25;
3097 let NumMicroOps = 15;
3098 let ResourceCycles = [3,3,2,1,4,2];
3099}
Craig Topper17a31182017-12-16 18:35:29 +00003100def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3101 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003102
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003103} // SchedModel