blob: 20c4f811e3857b067c1075c27a0df75c1f5b4fd7 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
163defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000164defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
166defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000167defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000169
170// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000171def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
172def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
173def : WriteRes<WriteVecMove, [HWPort015]>;
174
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000175defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
176defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1>;
177defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
178defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000179defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000181defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
183defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
186defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
187defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000189
190// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000191
Quentin Colombetca498512014-02-24 19:33:51 +0000192// Packed Compare Implicit Length Strings, Return Mask
193def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000194 let Latency = 11;
195 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000196 let ResourceCycles = [3];
197}
198def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199 let Latency = 17;
200 let NumMicroOps = 4;
201 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000202}
203
204// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
206 let Latency = 19;
207 let NumMicroOps = 9;
208 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000209}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000210def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
211 let Latency = 25;
212 let NumMicroOps = 10;
213 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000214}
215
216// Packed Compare Implicit Length Strings, Return Index
217def : WriteRes<WritePCmpIStrI, [HWPort0]> {
218 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000219 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000220 let ResourceCycles = [3];
221}
222def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 17;
224 let NumMicroOps = 4;
225 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000226}
227
228// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
230 let Latency = 18;
231 let NumMicroOps = 8;
232 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000233}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
235 let Latency = 24;
236 let NumMicroOps = 9;
237 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000238}
239
Simon Pilgrima2f26782018-03-27 20:38:54 +0000240// MOVMSK Instructions.
241def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
242def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
243def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
244
Quentin Colombetca498512014-02-24 19:33:51 +0000245// AES Instructions.
246def : WriteRes<WriteAESDecEnc, [HWPort5]> {
247 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000248 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000249 let ResourceCycles = [1];
250}
251def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000252 let Latency = 13;
253 let NumMicroOps = 2;
254 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000255}
256
257def : WriteRes<WriteAESIMC, [HWPort5]> {
258 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000259 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000260 let ResourceCycles = [2];
261}
262def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000263 let Latency = 20;
264 let NumMicroOps = 3;
265 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000266}
267
Simon Pilgrim7684e052018-03-22 13:18:08 +0000268def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
269 let Latency = 29;
270 let NumMicroOps = 11;
271 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000272}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000273def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
274 let Latency = 34;
275 let NumMicroOps = 11;
276 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000277}
278
279// Carry-less multiplication instructions.
280def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000281 let Latency = 11;
282 let NumMicroOps = 3;
283 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000284}
285def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000286 let Latency = 17;
287 let NumMicroOps = 4;
288 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000289}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000290
291def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
292def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000293def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
294def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000295
Michael Zuckermanf6684002017-06-28 11:23:31 +0000296//================ Exceptions ================//
297
298//-- Specific Scheduling Models --//
299
300// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000301def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302
Craig Topper02daec02018-04-02 01:12:32 +0000303def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000304
Craig Topper02daec02018-04-02 01:12:32 +0000305def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000306 let NumMicroOps = 2;
307}
Craig Topper02daec02018-04-02 01:12:32 +0000308def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000309 let NumMicroOps = 3;
310}
311
Craig Topper02daec02018-04-02 01:12:32 +0000312def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000313 let NumMicroOps = 2;
314}
315
Craig Topper02daec02018-04-02 01:12:32 +0000316def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000317 let NumMicroOps = 3;
318 let ResourceCycles = [2, 1];
319}
320
Michael Zuckermanf6684002017-06-28 11:23:31 +0000321// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323
Michael Zuckermanf6684002017-06-28 11:23:31 +0000324
Craig Topper02daec02018-04-02 01:12:32 +0000325def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000326 let NumMicroOps = 2;
327 let ResourceCycles = [2];
328}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
330// Notation:
331// - r: register.
332// - mm: 64 bit mmx register.
333// - x = 128 bit xmm register.
334// - (x)mm = mmx or xmm register.
335// - y = 256 bit ymm register.
336// - v = any vector register.
337// - m = memory.
338
339//=== Integer Instructions ===//
340//-- Move instructions --//
341
Michael Zuckermanf6684002017-06-28 11:23:31 +0000342// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000343def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000344 let Latency = 7;
345 let NumMicroOps = 3;
346}
Craig Topper02daec02018-04-02 01:12:32 +0000347def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348
Michael Zuckermanf6684002017-06-28 11:23:31 +0000349// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000350def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351 let NumMicroOps = 19;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 18;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361//-- Arithmetic instructions --//
362
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363// DIV.
364// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000365def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366 let Latency = 22;
367 let NumMicroOps = 9;
368}
Craig Topper02daec02018-04-02 01:12:32 +0000369def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000370
Michael Zuckermanf6684002017-06-28 11:23:31 +0000371// IDIV.
372// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000373def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000374 let Latency = 23;
375 let NumMicroOps = 9;
376}
Craig Topper02daec02018-04-02 01:12:32 +0000377def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000378
Michael Zuckermanf6684002017-06-28 11:23:31 +0000379// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000381def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382 let NumMicroOps = 10;
383}
Craig Topper02daec02018-04-02 01:12:32 +0000384def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000387// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000388def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000389 let NumMicroOps = 11;
390}
Craig Topper02daec02018-04-02 01:12:32 +0000391def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393//-- Control transfer instructions --//
394
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000396// i.
Craig Topper02daec02018-04-02 01:12:32 +0000397def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398 let NumMicroOps = 4;
399 let ResourceCycles = [1, 2, 1];
400}
Craig Topper02daec02018-04-02 01:12:32 +0000401def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402
403// BOUND.
404// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000405def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406 let NumMicroOps = 15;
407}
Craig Topper02daec02018-04-02 01:12:32 +0000408def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409
410// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 4;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416//-- String instructions --//
417
418// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000419def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420
421// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000422def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000423
Michael Zuckermanf6684002017-06-28 11:23:31 +0000424// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000425def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426 let Latency = 4;
427 let NumMicroOps = 5;
428 let ResourceCycles = [2, 1, 2];
429}
Craig Topper02daec02018-04-02 01:12:32 +0000430def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000433def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000434 let Latency = 4;
435 let NumMicroOps = 5;
436 let ResourceCycles = [2, 3];
437}
Craig Topper02daec02018-04-02 01:12:32 +0000438def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000439
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440//-- Other --//
441
Gadi Haberd76f7b82017-08-28 10:04:16 +0000442// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000443def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000444 let NumMicroOps = 34;
445}
Craig Topper02daec02018-04-02 01:12:32 +0000446def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000447
448// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 17;
451 let ResourceCycles = [1, 16];
452}
Craig Topper02daec02018-04-02 01:12:32 +0000453def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000454
455//=== Floating Point x87 Instructions ===//
456//-- Move instructions --//
457
458// FLD.
459// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000460def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000461
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462// FBLD.
463// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000464def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000465 let Latency = 47;
466 let NumMicroOps = 43;
467}
Craig Topper02daec02018-04-02 01:12:32 +0000468def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000469
470// FST(P).
471// r.
Craig Topper02daec02018-04-02 01:12:32 +0000472def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473
Michael Zuckermanf6684002017-06-28 11:23:31 +0000474// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000475def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
483// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000484def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485 let NumMicroOps = 147;
486}
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 90;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495//-- Arithmetic instructions --//
496
497// FABS.
Craig Topper02daec02018-04-02 01:12:32 +0000498def : InstRW<[HWWriteP0], (instregex "ABS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000499
500// FCHS.
Craig Topper02daec02018-04-02 01:12:32 +0000501def : InstRW<[HWWriteP0], (instregex "CHS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Craig Topper02daec02018-04-02 01:12:32 +0000537def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Craig Topper02daec02018-04-02 01:12:32 +0000546def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Craig Topper02daec02018-04-02 01:12:32 +0000553def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
560defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
621 "MMX_MOVD64to64rm",
622 "MMX_MOVQ64rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000623 "MOVSX(16|32|64)rm16",
624 "MOVSX(16|32|64)rm32",
625 "MOVSX(16|32|64)rm8",
626 "MOVZX(16|32|64)rm16",
627 "MOVZX(16|32|64)rm8",
628 "PREFETCHNTA",
629 "PREFETCHT0",
630 "PREFETCHT1",
631 "PREFETCHT2",
632 "(V?)MOV64toPQIrm",
633 "(V?)MOVDDUPrm",
634 "(V?)MOVDI2PDIrm",
635 "(V?)MOVQI2PQIrm",
636 "(V?)MOVSDrm",
637 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000638
Gadi Haberd76f7b82017-08-28 10:04:16 +0000639def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
640 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000641 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000642 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000643}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000644def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
645 "MMX_MOVD64from64rm",
646 "MMX_MOVD64mr",
647 "MMX_MOVNTQmr",
648 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000649 "MOVNTI_64mr",
650 "MOVNTImr",
651 "ST_FP32m",
652 "ST_FP64m",
653 "ST_FP80m",
654 "VEXTRACTF128mr",
655 "VEXTRACTI128mr",
656 "(V?)MOVAPD(Y?)mr",
657 "(V?)MOVAPS(V?)mr",
658 "(V?)MOVDQA(Y?)mr",
659 "(V?)MOVDQU(Y?)mr",
660 "(V?)MOVHPDmr",
661 "(V?)MOVHPSmr",
662 "(V?)MOVLPDmr",
663 "(V?)MOVLPSmr",
664 "(V?)MOVNTDQ(Y?)mr",
665 "(V?)MOVNTPD(Y?)mr",
666 "(V?)MOVNTPS(Y?)mr",
667 "(V?)MOVPDI2DImr",
668 "(V?)MOVPQI2QImr",
669 "(V?)MOVPQIto64mr",
670 "(V?)MOVSDmr",
671 "(V?)MOVSSmr",
672 "(V?)MOVUPD(Y?)mr",
673 "(V?)MOVUPS(Y?)mr",
674 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000675
Gadi Haberd76f7b82017-08-28 10:04:16 +0000676def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
677 let Latency = 1;
678 let NumMicroOps = 1;
679 let ResourceCycles = [1];
680}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000681def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
682 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000683 "MMX_PSLLDri",
684 "MMX_PSLLDrr",
685 "MMX_PSLLQri",
686 "MMX_PSLLQrr",
687 "MMX_PSLLWri",
688 "MMX_PSLLWrr",
689 "MMX_PSRADri",
690 "MMX_PSRADrr",
691 "MMX_PSRAWri",
692 "MMX_PSRAWrr",
693 "MMX_PSRLDri",
694 "MMX_PSRLDrr",
695 "MMX_PSRLQri",
696 "MMX_PSRLQrr",
697 "MMX_PSRLWri",
698 "MMX_PSRLWrr",
699 "(V?)MOVPDI2DIrr",
700 "(V?)MOVPQIto64rr",
701 "(V?)PSLLD(Y?)ri",
702 "(V?)PSLLQ(Y?)ri",
703 "VPSLLVQ(Y?)rr",
704 "(V?)PSLLW(Y?)ri",
705 "(V?)PSRAD(Y?)ri",
706 "(V?)PSRAW(Y?)ri",
707 "(V?)PSRLD(Y?)ri",
708 "(V?)PSRLQ(Y?)ri",
709 "VPSRLVQ(Y?)rr",
710 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000711 "VTESTPD(Y?)rr",
712 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000713
714def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
715 let Latency = 1;
716 let NumMicroOps = 1;
717 let ResourceCycles = [1];
718}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000719def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
720 "COM_FST0r",
721 "UCOM_FPr",
722 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000723
724def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
725 let Latency = 1;
726 let NumMicroOps = 1;
727 let ResourceCycles = [1];
728}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000729def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730 "MMX_MOVD64to64rr",
731 "MMX_MOVQ2DQrr",
732 "MMX_PALIGNRrri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000733 "MMX_PSHUFWri",
734 "MMX_PUNPCKHBWirr",
735 "MMX_PUNPCKHDQirr",
736 "MMX_PUNPCKHWDirr",
737 "MMX_PUNPCKLBWirr",
738 "MMX_PUNPCKLDQirr",
739 "MMX_PUNPCKLWDirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000740 "(V?)ANDNPD(Y?)rr",
741 "(V?)ANDNPS(Y?)rr",
742 "(V?)ANDPD(Y?)rr",
743 "(V?)ANDPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000744 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000745 "(V?)INSERTPSrr",
746 "(V?)MOV64toPQIrr",
747 "(V?)MOVAPD(Y?)rr",
748 "(V?)MOVAPS(Y?)rr",
749 "(V?)MOVDDUP(Y?)rr",
750 "(V?)MOVDI2PDIrr",
751 "(V?)MOVHLPSrr",
752 "(V?)MOVLHPSrr",
753 "(V?)MOVSDrr",
754 "(V?)MOVSHDUP(Y?)rr",
755 "(V?)MOVSLDUP(Y?)rr",
756 "(V?)MOVSSrr",
757 "(V?)MOVUPD(Y?)rr",
758 "(V?)MOVUPS(Y?)rr",
759 "(V?)ORPD(Y?)rr",
760 "(V?)ORPS(Y?)rr",
761 "(V?)PACKSSDW(Y?)rr",
762 "(V?)PACKSSWB(Y?)rr",
763 "(V?)PACKUSDW(Y?)rr",
764 "(V?)PACKUSWB(Y?)rr",
765 "(V?)PALIGNR(Y?)rri",
766 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000767 "VPBROADCASTDrr",
768 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000769 "VPERMILPD(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000770 "VPERMILPS(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000771 "(V?)PMOVSXBDrr",
772 "(V?)PMOVSXBQrr",
773 "(V?)PMOVSXBWrr",
774 "(V?)PMOVSXDQrr",
775 "(V?)PMOVSXWDrr",
776 "(V?)PMOVSXWQrr",
777 "(V?)PMOVZXBDrr",
778 "(V?)PMOVZXBQrr",
779 "(V?)PMOVZXBWrr",
780 "(V?)PMOVZXDQrr",
781 "(V?)PMOVZXWDrr",
782 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000783 "(V?)PSHUFD(Y?)ri",
784 "(V?)PSHUFHW(Y?)ri",
785 "(V?)PSHUFLW(Y?)ri",
786 "(V?)PSLLDQ(Y?)ri",
787 "(V?)PSRLDQ(Y?)ri",
788 "(V?)PUNPCKHBW(Y?)rr",
789 "(V?)PUNPCKHDQ(Y?)rr",
790 "(V?)PUNPCKHQDQ(Y?)rr",
791 "(V?)PUNPCKHWD(Y?)rr",
792 "(V?)PUNPCKLBW(Y?)rr",
793 "(V?)PUNPCKLDQ(Y?)rr",
794 "(V?)PUNPCKLQDQ(Y?)rr",
795 "(V?)PUNPCKLWD(Y?)rr",
796 "(V?)SHUFPD(Y?)rri",
797 "(V?)SHUFPS(Y?)rri",
798 "(V?)UNPCKHPD(Y?)rr",
799 "(V?)UNPCKHPS(Y?)rr",
800 "(V?)UNPCKLPD(Y?)rr",
801 "(V?)UNPCKLPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000802 "(V?)XORPD(Y?)rr",
803 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000804
805def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
806 let Latency = 1;
807 let NumMicroOps = 1;
808 let ResourceCycles = [1];
809}
810def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
811
812def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
813 let Latency = 1;
814 let NumMicroOps = 1;
815 let ResourceCycles = [1];
816}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000817def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
818 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000819
820def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
821 let Latency = 1;
822 let NumMicroOps = 1;
823 let ResourceCycles = [1];
824}
Craig Topperfbe31322018-04-05 21:56:19 +0000825def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000826def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
827 "BT(16|32|64)rr",
828 "BTC(16|32|64)ri8",
829 "BTC(16|32|64)rr",
830 "BTR(16|32|64)ri8",
831 "BTR(16|32|64)rr",
832 "BTS(16|32|64)ri8",
833 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000834 "RORX(32|64)ri",
835 "SAR(8|16|32|64)r1",
836 "SAR(8|16|32|64)ri",
837 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000838 "SHL(8|16|32|64)r1",
839 "SHL(8|16|32|64)ri",
840 "SHLX(32|64)rr",
841 "SHR(8|16|32|64)r1",
842 "SHR(8|16|32|64)ri",
843 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000844
845def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
846 let Latency = 1;
847 let NumMicroOps = 1;
848 let ResourceCycles = [1];
849}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
851 "BLSI(32|64)rr",
852 "BLSMSK(32|64)rr",
853 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854 "LEA(16|32|64)(_32)?r",
855 "MMX_PABSBrr",
856 "MMX_PABSDrr",
857 "MMX_PABSWrr",
858 "MMX_PADDBirr",
859 "MMX_PADDDirr",
860 "MMX_PADDQirr",
861 "MMX_PADDSBirr",
862 "MMX_PADDSWirr",
863 "MMX_PADDUSBirr",
864 "MMX_PADDUSWirr",
865 "MMX_PADDWirr",
866 "MMX_PAVGBirr",
867 "MMX_PAVGWirr",
868 "MMX_PCMPEQBirr",
869 "MMX_PCMPEQDirr",
870 "MMX_PCMPEQWirr",
871 "MMX_PCMPGTBirr",
872 "MMX_PCMPGTDirr",
873 "MMX_PCMPGTWirr",
874 "MMX_PMAXSWirr",
875 "MMX_PMAXUBirr",
876 "MMX_PMINSWirr",
877 "MMX_PMINUBirr",
878 "MMX_PSIGNBrr",
879 "MMX_PSIGNDrr",
880 "MMX_PSIGNWrr",
881 "MMX_PSUBBirr",
882 "MMX_PSUBDirr",
883 "MMX_PSUBQirr",
884 "MMX_PSUBSBirr",
885 "MMX_PSUBSWirr",
886 "MMX_PSUBUSBirr",
887 "MMX_PSUBUSWirr",
888 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000889 "(V?)PABSB(Y?)rr",
890 "(V?)PABSD(Y?)rr",
891 "(V?)PABSW(Y?)rr",
892 "(V?)PADDB(Y?)rr",
893 "(V?)PADDD(Y?)rr",
894 "(V?)PADDQ(Y?)rr",
895 "(V?)PADDSB(Y?)rr",
896 "(V?)PADDSW(Y?)rr",
897 "(V?)PADDUSB(Y?)rr",
898 "(V?)PADDUSW(Y?)rr",
899 "(V?)PADDW(Y?)rr",
900 "(V?)PAVGB(Y?)rr",
901 "(V?)PAVGW(Y?)rr",
902 "(V?)PCMPEQB(Y?)rr",
903 "(V?)PCMPEQD(Y?)rr",
904 "(V?)PCMPEQQ(Y?)rr",
905 "(V?)PCMPEQW(Y?)rr",
906 "(V?)PCMPGTB(Y?)rr",
907 "(V?)PCMPGTD(Y?)rr",
908 "(V?)PCMPGTW(Y?)rr",
909 "(V?)PMAXSB(Y?)rr",
910 "(V?)PMAXSD(Y?)rr",
911 "(V?)PMAXSW(Y?)rr",
912 "(V?)PMAXUB(Y?)rr",
913 "(V?)PMAXUD(Y?)rr",
914 "(V?)PMAXUW(Y?)rr",
915 "(V?)PMINSB(Y?)rr",
916 "(V?)PMINSD(Y?)rr",
917 "(V?)PMINSW(Y?)rr",
918 "(V?)PMINUB(Y?)rr",
919 "(V?)PMINUD(Y?)rr",
920 "(V?)PMINUW(Y?)rr",
921 "(V?)PSIGNB(Y?)rr",
922 "(V?)PSIGND(Y?)rr",
923 "(V?)PSIGNW(Y?)rr",
924 "(V?)PSUBB(Y?)rr",
925 "(V?)PSUBD(Y?)rr",
926 "(V?)PSUBQ(Y?)rr",
927 "(V?)PSUBSB(Y?)rr",
928 "(V?)PSUBSW(Y?)rr",
929 "(V?)PSUBUSB(Y?)rr",
930 "(V?)PSUBUSW(Y?)rr",
931 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000932
933def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
934 let Latency = 1;
935 let NumMicroOps = 1;
936 let ResourceCycles = [1];
937}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000938def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
939 "MMX_PANDNirr",
940 "MMX_PANDirr",
941 "MMX_PORirr",
942 "MMX_PXORirr",
943 "(V?)BLENDPD(Y?)rri",
944 "(V?)BLENDPS(Y?)rri",
945 "(V?)MOVDQA(Y?)rr",
946 "(V?)MOVDQU(Y?)rr",
947 "(V?)MOVPQI2QIrr",
948 "VMOVZPQILo2PQIrr",
949 "(V?)PANDN(Y?)rr",
950 "(V?)PAND(Y?)rr",
951 "VPBLENDD(Y?)rri",
952 "(V?)POR(Y?)rr",
953 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000954
955def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
956 let Latency = 1;
957 let NumMicroOps = 1;
958 let ResourceCycles = [1];
959}
Craig Topperfbe31322018-04-05 21:56:19 +0000960def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000961def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000962 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000963 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000964 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000965 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000966 "SGDT64m",
967 "SIDT64m",
968 "SLDT64m",
969 "SMSW16m",
970 "STC",
971 "STRm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000972 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000973 "XCHG(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000974
975def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000976 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000977 let NumMicroOps = 2;
978 let ResourceCycles = [1,1];
979}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000980def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
981 "MMX_PSLLQrm",
982 "MMX_PSLLWrm",
983 "MMX_PSRADrm",
984 "MMX_PSRAWrm",
985 "MMX_PSRLDrm",
986 "MMX_PSRLQrm",
987 "MMX_PSRLWrm",
988 "VCVTPH2PSrm",
989 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000990
Gadi Haber2cf601f2017-12-08 09:48:44 +0000991def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
992 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000993 let NumMicroOps = 2;
994 let ResourceCycles = [1,1];
995}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000996def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
997 "(V?)CVTSS2SDrm",
998 "VPSLLVQrm",
999 "VPSRLVQrm",
1000 "VTESTPDrm",
1001 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001002
1003def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1004 let Latency = 8;
1005 let NumMicroOps = 2;
1006 let ResourceCycles = [1,1];
1007}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001008def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1009 "VPSLLQYrm",
1010 "VPSLLVQYrm",
1011 "VPSLLWYrm",
1012 "VPSRADYrm",
1013 "VPSRAWYrm",
1014 "VPSRLDYrm",
1015 "VPSRLQYrm",
1016 "VPSRLVQYrm",
1017 "VPSRLWYrm",
1018 "VTESTPDYrm",
1019 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001020
1021def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1022 let Latency = 8;
1023 let NumMicroOps = 2;
1024 let ResourceCycles = [1,1];
1025}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001026def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1027 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001028 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001029def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001030 "FCOM64m",
1031 "FCOMP32m",
1032 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001033 "MMX_CVTPI2PSirm",
1034 "MMX_CVTPS2PIirm",
1035 "MMX_CVTTPS2PIirm",
1036 "PDEP(32|64)rm",
1037 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001038 "(V?)ADDSDrm",
1039 "(V?)ADDSSrm",
1040 "(V?)CMPSDrm",
1041 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001042 "(V?)MAX(C?)SDrm",
1043 "(V?)MAX(C?)SSrm",
1044 "(V?)MIN(C?)SDrm",
1045 "(V?)MIN(C?)SSrm",
1046 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001047 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001048
1049def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001050 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001051 let NumMicroOps = 2;
1052 let ResourceCycles = [1,1];
1053}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001054def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1055 "(V?)ANDNPDrm",
1056 "(V?)ANDNPSrm",
1057 "(V?)ANDPDrm",
1058 "(V?)ANDPSrm",
1059 "(V?)INSERTPSrm",
1060 "(V?)ORPDrm",
1061 "(V?)ORPSrm",
1062 "(V?)PACKSSDWrm",
1063 "(V?)PACKSSWBrm",
1064 "(V?)PACKUSDWrm",
1065 "(V?)PACKUSWBrm",
1066 "(V?)PALIGNRrmi",
1067 "(V?)PBLENDWrmi",
1068 "VPERMILPDmi",
1069 "VPERMILPDrm",
1070 "VPERMILPSmi",
1071 "VPERMILPSrm",
1072 "(V?)PSHUFBrm",
1073 "(V?)PSHUFDmi",
1074 "(V?)PSHUFHWmi",
1075 "(V?)PSHUFLWmi",
1076 "(V?)PUNPCKHBWrm",
1077 "(V?)PUNPCKHDQrm",
1078 "(V?)PUNPCKHQDQrm",
1079 "(V?)PUNPCKHWDrm",
1080 "(V?)PUNPCKLBWrm",
1081 "(V?)PUNPCKLDQrm",
1082 "(V?)PUNPCKLQDQrm",
1083 "(V?)PUNPCKLWDrm",
1084 "(V?)SHUFPDrmi",
1085 "(V?)SHUFPSrmi",
1086 "(V?)UNPCKHPDrm",
1087 "(V?)UNPCKHPSrm",
1088 "(V?)UNPCKLPDrm",
1089 "(V?)UNPCKLPSrm",
1090 "(V?)XORPDrm",
1091 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001092
Gadi Haber2cf601f2017-12-08 09:48:44 +00001093def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1094 let Latency = 8;
1095 let NumMicroOps = 2;
1096 let ResourceCycles = [1,1];
1097}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001098def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1099 "VANDNPSYrm",
1100 "VANDPDYrm",
1101 "VANDPSYrm",
1102 "VORPDYrm",
1103 "VORPSYrm",
1104 "VPACKSSDWYrm",
1105 "VPACKSSWBYrm",
1106 "VPACKUSDWYrm",
1107 "VPACKUSWBYrm",
1108 "VPALIGNRYrmi",
1109 "VPBLENDWYrmi",
1110 "VPERMILPDYmi",
1111 "VPERMILPDYrm",
1112 "VPERMILPSYmi",
1113 "VPERMILPSYrm",
1114 "VPMOVSXBDYrm",
1115 "VPMOVSXBQYrm",
1116 "VPMOVSXWQYrm",
1117 "VPSHUFBYrm",
1118 "VPSHUFDYmi",
1119 "VPSHUFHWYmi",
1120 "VPSHUFLWYmi",
1121 "VPUNPCKHBWYrm",
1122 "VPUNPCKHDQYrm",
1123 "VPUNPCKHQDQYrm",
1124 "VPUNPCKHWDYrm",
1125 "VPUNPCKLBWYrm",
1126 "VPUNPCKLDQYrm",
1127 "VPUNPCKLQDQYrm",
1128 "VPUNPCKLWDYrm",
1129 "VSHUFPDYrmi",
1130 "VSHUFPSYrmi",
1131 "VUNPCKHPDYrm",
1132 "VUNPCKHPSYrm",
1133 "VUNPCKLPDYrm",
1134 "VUNPCKLPSYrm",
1135 "VXORPDYrm",
1136 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001137
1138def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1139 let Latency = 6;
1140 let NumMicroOps = 2;
1141 let ResourceCycles = [1,1];
1142}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001143def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1144 "MMX_PINSRWrm",
1145 "MMX_PSHUFBrm",
1146 "MMX_PSHUFWmi",
1147 "MMX_PUNPCKHBWirm",
1148 "MMX_PUNPCKHDQirm",
1149 "MMX_PUNPCKHWDirm",
1150 "MMX_PUNPCKLBWirm",
1151 "MMX_PUNPCKLDQirm",
1152 "MMX_PUNPCKLWDirm",
1153 "(V?)MOVHPDrm",
1154 "(V?)MOVHPSrm",
1155 "(V?)MOVLPDrm",
1156 "(V?)MOVLPSrm",
1157 "(V?)PINSRBrm",
1158 "(V?)PINSRDrm",
1159 "(V?)PINSRQrm",
1160 "(V?)PINSRWrm",
1161 "(V?)PMOVSXBDrm",
1162 "(V?)PMOVSXBQrm",
1163 "(V?)PMOVSXBWrm",
1164 "(V?)PMOVSXDQrm",
1165 "(V?)PMOVSXWDrm",
1166 "(V?)PMOVSXWQrm",
1167 "(V?)PMOVZXBDrm",
1168 "(V?)PMOVZXBQrm",
1169 "(V?)PMOVZXBWrm",
1170 "(V?)PMOVZXDQrm",
1171 "(V?)PMOVZXWDrm",
1172 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001173
Gadi Haberd76f7b82017-08-28 10:04:16 +00001174def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001175 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001176 let NumMicroOps = 2;
1177 let ResourceCycles = [1,1];
1178}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001179def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1180 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001181
1182def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001183 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001184 let NumMicroOps = 2;
1185 let ResourceCycles = [1,1];
1186}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001187def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1188 "RORX(32|64)mi",
1189 "SARX(32|64)rm",
1190 "SHLX(32|64)rm",
1191 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001192
1193def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001194 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001195 let NumMicroOps = 2;
1196 let ResourceCycles = [1,1];
1197}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001198def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1199 "BLSI(32|64)rm",
1200 "BLSMSK(32|64)rm",
1201 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001202 "MMX_PABSBrm",
1203 "MMX_PABSDrm",
1204 "MMX_PABSWrm",
1205 "MMX_PADDBirm",
1206 "MMX_PADDDirm",
1207 "MMX_PADDQirm",
1208 "MMX_PADDSBirm",
1209 "MMX_PADDSWirm",
1210 "MMX_PADDUSBirm",
1211 "MMX_PADDUSWirm",
1212 "MMX_PADDWirm",
1213 "MMX_PAVGBirm",
1214 "MMX_PAVGWirm",
1215 "MMX_PCMPEQBirm",
1216 "MMX_PCMPEQDirm",
1217 "MMX_PCMPEQWirm",
1218 "MMX_PCMPGTBirm",
1219 "MMX_PCMPGTDirm",
1220 "MMX_PCMPGTWirm",
1221 "MMX_PMAXSWirm",
1222 "MMX_PMAXUBirm",
1223 "MMX_PMINSWirm",
1224 "MMX_PMINUBirm",
1225 "MMX_PSIGNBrm",
1226 "MMX_PSIGNDrm",
1227 "MMX_PSIGNWrm",
1228 "MMX_PSUBBirm",
1229 "MMX_PSUBDirm",
1230 "MMX_PSUBQirm",
1231 "MMX_PSUBSBirm",
1232 "MMX_PSUBSWirm",
1233 "MMX_PSUBUSBirm",
1234 "MMX_PSUBUSWirm",
1235 "MMX_PSUBWirm",
1236 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001237
1238def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1239 let Latency = 7;
1240 let NumMicroOps = 2;
1241 let ResourceCycles = [1,1];
1242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001243def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1244 "(V?)PABSDrm",
1245 "(V?)PABSWrm",
1246 "(V?)PADDBrm",
1247 "(V?)PADDDrm",
1248 "(V?)PADDQrm",
1249 "(V?)PADDSBrm",
1250 "(V?)PADDSWrm",
1251 "(V?)PADDUSBrm",
1252 "(V?)PADDUSWrm",
1253 "(V?)PADDWrm",
1254 "(V?)PAVGBrm",
1255 "(V?)PAVGWrm",
1256 "(V?)PCMPEQBrm",
1257 "(V?)PCMPEQDrm",
1258 "(V?)PCMPEQQrm",
1259 "(V?)PCMPEQWrm",
1260 "(V?)PCMPGTBrm",
1261 "(V?)PCMPGTDrm",
1262 "(V?)PCMPGTWrm",
1263 "(V?)PMAXSBrm",
1264 "(V?)PMAXSDrm",
1265 "(V?)PMAXSWrm",
1266 "(V?)PMAXUBrm",
1267 "(V?)PMAXUDrm",
1268 "(V?)PMAXUWrm",
1269 "(V?)PMINSBrm",
1270 "(V?)PMINSDrm",
1271 "(V?)PMINSWrm",
1272 "(V?)PMINUBrm",
1273 "(V?)PMINUDrm",
1274 "(V?)PMINUWrm",
1275 "(V?)PSIGNBrm",
1276 "(V?)PSIGNDrm",
1277 "(V?)PSIGNWrm",
1278 "(V?)PSUBBrm",
1279 "(V?)PSUBDrm",
1280 "(V?)PSUBQrm",
1281 "(V?)PSUBSBrm",
1282 "(V?)PSUBSWrm",
1283 "(V?)PSUBUSBrm",
1284 "(V?)PSUBUSWrm",
1285 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001286
1287def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1288 let Latency = 8;
1289 let NumMicroOps = 2;
1290 let ResourceCycles = [1,1];
1291}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001292def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1293 "VPABSDYrm",
1294 "VPABSWYrm",
1295 "VPADDBYrm",
1296 "VPADDDYrm",
1297 "VPADDQYrm",
1298 "VPADDSBYrm",
1299 "VPADDSWYrm",
1300 "VPADDUSBYrm",
1301 "VPADDUSWYrm",
1302 "VPADDWYrm",
1303 "VPAVGBYrm",
1304 "VPAVGWYrm",
1305 "VPCMPEQBYrm",
1306 "VPCMPEQDYrm",
1307 "VPCMPEQQYrm",
1308 "VPCMPEQWYrm",
1309 "VPCMPGTBYrm",
1310 "VPCMPGTDYrm",
1311 "VPCMPGTWYrm",
1312 "VPMAXSBYrm",
1313 "VPMAXSDYrm",
1314 "VPMAXSWYrm",
1315 "VPMAXUBYrm",
1316 "VPMAXUDYrm",
1317 "VPMAXUWYrm",
1318 "VPMINSBYrm",
1319 "VPMINSDYrm",
1320 "VPMINSWYrm",
1321 "VPMINUBYrm",
1322 "VPMINUDYrm",
1323 "VPMINUWYrm",
1324 "VPSIGNBYrm",
1325 "VPSIGNDYrm",
1326 "VPSIGNWYrm",
1327 "VPSUBBYrm",
1328 "VPSUBDYrm",
1329 "VPSUBQYrm",
1330 "VPSUBSBYrm",
1331 "VPSUBSWYrm",
1332 "VPSUBUSBYrm",
1333 "VPSUBUSWYrm",
1334 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001335
1336def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001337 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338 let NumMicroOps = 2;
1339 let ResourceCycles = [1,1];
1340}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001341def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1342 "(V?)BLENDPSrmi",
1343 "VINSERTF128rm",
1344 "VINSERTI128rm",
1345 "(V?)PANDNrm",
1346 "(V?)PANDrm",
1347 "VPBLENDDrmi",
1348 "(V?)PORrm",
1349 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350
Gadi Haber2cf601f2017-12-08 09:48:44 +00001351def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1352 let Latency = 6;
1353 let NumMicroOps = 2;
1354 let ResourceCycles = [1,1];
1355}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001356def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1357 "MMX_PANDirm",
1358 "MMX_PORirm",
1359 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001360
1361def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1362 let Latency = 8;
1363 let NumMicroOps = 2;
1364 let ResourceCycles = [1,1];
1365}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001366def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1367 "VBLENDPSYrmi",
1368 "VPANDNYrm",
1369 "VPANDYrm",
1370 "VPBLENDDYrmi",
1371 "VPORYrm",
1372 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001373
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001375 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001376 let NumMicroOps = 2;
1377 let ResourceCycles = [1,1];
1378}
Craig Topper2d451e72018-03-18 08:38:06 +00001379def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001380def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001381
1382def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001383 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001384 let NumMicroOps = 2;
1385 let ResourceCycles = [1,1];
1386}
1387def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1388
1389def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001390 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001391 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001393}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001394def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1395 "(V?)PEXTRBmr",
1396 "(V?)PEXTRDmr",
1397 "(V?)PEXTRQmr",
1398 "(V?)PEXTRWmr",
1399 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001400
Gadi Haberd76f7b82017-08-28 10:04:16 +00001401def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001402 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,1,1];
1405}
1406def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001407
Gadi Haberd76f7b82017-08-28 10:04:16 +00001408def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001409 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001410 let NumMicroOps = 3;
1411 let ResourceCycles = [1,1,1];
1412}
1413def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1414
1415def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001416 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001417 let NumMicroOps = 3;
1418 let ResourceCycles = [1,1,1];
1419}
1420def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1421
1422def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001423 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001424 let NumMicroOps = 3;
1425 let ResourceCycles = [1,1,1];
1426}
Craig Topper2d451e72018-03-18 08:38:06 +00001427def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001428def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1429 "PUSH64i8",
1430 "STOSB",
1431 "STOSL",
1432 "STOSQ",
1433 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001434
1435def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001436 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001437 let NumMicroOps = 4;
1438 let ResourceCycles = [1,1,1,1];
1439}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001440def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1441 "BTR(16|32|64)mi8",
1442 "BTS(16|32|64)mi8",
1443 "SAR(8|16|32|64)m1",
1444 "SAR(8|16|32|64)mi",
1445 "SHL(8|16|32|64)m1",
1446 "SHL(8|16|32|64)mi",
1447 "SHR(8|16|32|64)m1",
1448 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001449
1450def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001451 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001452 let NumMicroOps = 4;
1453 let ResourceCycles = [1,1,1,1];
1454}
Craig Topperf0d04262018-04-06 16:16:48 +00001455def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1456 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001457
1458def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001459 let Latency = 2;
1460 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001461 let ResourceCycles = [2];
1462}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001463def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1464 "BLENDVPSrr0",
1465 "MMX_PINSRWrr",
1466 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001467 "VBLENDVPD(Y?)rr",
1468 "VBLENDVPS(Y?)rr",
1469 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001470 "(V?)PINSRBrr",
1471 "(V?)PINSRDrr",
1472 "(V?)PINSRQrr",
1473 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001474
Gadi Haberd76f7b82017-08-28 10:04:16 +00001475def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1476 let Latency = 2;
1477 let NumMicroOps = 2;
1478 let ResourceCycles = [2];
1479}
1480def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1481
1482def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1483 let Latency = 2;
1484 let NumMicroOps = 2;
1485 let ResourceCycles = [2];
1486}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001487def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1488 "ROL(8|16|32|64)ri",
1489 "ROR(8|16|32|64)r1",
1490 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001491
1492def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1493 let Latency = 2;
1494 let NumMicroOps = 2;
1495 let ResourceCycles = [2];
1496}
1497def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1498def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1499def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1500def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1501
1502def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1503 let Latency = 2;
1504 let NumMicroOps = 2;
1505 let ResourceCycles = [1,1];
1506}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001507def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1508 "VCVTPH2PSYrr",
1509 "VCVTPH2PSrr",
1510 "(V?)CVTPS2PDrr",
1511 "(V?)CVTSS2SDrr",
1512 "(V?)EXTRACTPSrr",
1513 "(V?)PEXTRBrr",
1514 "(V?)PEXTRDrr",
1515 "(V?)PEXTRQrr",
1516 "(V?)PEXTRWrr",
1517 "(V?)PSLLDrr",
1518 "(V?)PSLLQrr",
1519 "(V?)PSLLWrr",
1520 "(V?)PSRADrr",
1521 "(V?)PSRAWrr",
1522 "(V?)PSRLDrr",
1523 "(V?)PSRLQrr",
1524 "(V?)PSRLWrr",
1525 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001526
1527def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1528 let Latency = 2;
1529 let NumMicroOps = 2;
1530 let ResourceCycles = [1,1];
1531}
1532def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1533
1534def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1535 let Latency = 2;
1536 let NumMicroOps = 2;
1537 let ResourceCycles = [1,1];
1538}
1539def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1540
1541def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1542 let Latency = 2;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Craig Topper498875f2018-04-04 17:54:19 +00001546def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1547
1548def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1549 let Latency = 1;
1550 let NumMicroOps = 1;
1551 let ResourceCycles = [1];
1552}
1553def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001554
1555def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1556 let Latency = 2;
1557 let NumMicroOps = 2;
1558 let ResourceCycles = [1,1];
1559}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001560def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1561def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1562 "ADC(8|16|32|64)rr",
1563 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001564 "SBB(8|16|32|64)ri",
1565 "SBB(8|16|32|64)rr",
1566 "SBB(8|16|32|64)i",
1567 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001568
1569def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001570 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001571 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001572 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001573}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001574def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1575 "BLENDVPSrm0",
1576 "PBLENDVBrm0",
1577 "VBLENDVPDrm",
1578 "VBLENDVPSrm",
1579 "VMASKMOVPDrm",
1580 "VMASKMOVPSrm",
1581 "VPBLENDVBrm",
1582 "VPMASKMOVDrm",
1583 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001584
Gadi Haber2cf601f2017-12-08 09:48:44 +00001585def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1586 let Latency = 9;
1587 let NumMicroOps = 3;
1588 let ResourceCycles = [2,1];
1589}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001590def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1591 "VBLENDVPSYrm",
1592 "VMASKMOVPDYrm",
1593 "VMASKMOVPSYrm",
1594 "VPBLENDVBYrm",
1595 "VPMASKMOVDYrm",
1596 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001597
1598def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1599 let Latency = 7;
1600 let NumMicroOps = 3;
1601 let ResourceCycles = [2,1];
1602}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001603def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1604 "MMX_PACKSSWBirm",
1605 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001606
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001608 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001609 let NumMicroOps = 3;
1610 let ResourceCycles = [1,2];
1611}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001612def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1613 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001614
1615def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001616 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001617 let NumMicroOps = 3;
1618 let ResourceCycles = [1,1,1];
1619}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001620def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1621 "(V?)PSLLQrm",
1622 "(V?)PSLLWrm",
1623 "(V?)PSRADrm",
1624 "(V?)PSRAWrm",
1625 "(V?)PSRLDrm",
1626 "(V?)PSRLQrm",
1627 "(V?)PSRLWrm",
1628 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001629
1630def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001631 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001632 let NumMicroOps = 3;
1633 let ResourceCycles = [1,1,1];
1634}
1635def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1636
1637def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001638 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001639 let NumMicroOps = 3;
1640 let ResourceCycles = [1,1,1];
1641}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001642def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001643
1644def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001645 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001646 let NumMicroOps = 3;
1647 let ResourceCycles = [1,1,1];
1648}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001649def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1650 "RETL",
1651 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001652
Gadi Haberd76f7b82017-08-28 10:04:16 +00001653def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001654 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001655 let NumMicroOps = 3;
1656 let ResourceCycles = [1,1,1];
1657}
Craig Topperc50570f2018-04-06 17:12:18 +00001658def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1659 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001660
1661def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001662 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001663 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001664 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001665}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001666def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001667
Gadi Haberd76f7b82017-08-28 10:04:16 +00001668def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001669 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670 let NumMicroOps = 4;
1671 let ResourceCycles = [1,1,1,1];
1672}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001673def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1674 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001675
1676def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001677 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001678 let NumMicroOps = 5;
1679 let ResourceCycles = [1,1,1,2];
1680}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001681def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1682 "ROL(8|16|32|64)mi",
1683 "ROR(8|16|32|64)m1",
1684 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001685
1686def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001687 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001688 let NumMicroOps = 5;
1689 let ResourceCycles = [1,1,1,2];
1690}
Craig Topper13a16502018-03-19 00:56:09 +00001691def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001692
1693def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001694 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001695 let NumMicroOps = 5;
1696 let ResourceCycles = [1,1,1,1,1];
1697}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001698def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1699 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001700
Gadi Haberd76f7b82017-08-28 10:04:16 +00001701def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1702 let Latency = 3;
1703 let NumMicroOps = 1;
1704 let ResourceCycles = [1];
1705}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001706def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1707def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1708 "ADD_FST0r",
1709 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001710 "MMX_CVTPI2PSirr",
1711 "PDEP(32|64)rr",
1712 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001713 "SHLD(16|32|64)rri8",
1714 "SHRD(16|32|64)rri8",
1715 "SUBR_FPrST0",
1716 "SUBR_FST0r",
1717 "SUBR_FrST0",
1718 "SUB_FPrST0",
1719 "SUB_FST0r",
1720 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001721 "(V?)ADDPD(Y?)rr",
1722 "(V?)ADDPS(Y?)rr",
1723 "(V?)ADDSDrr",
1724 "(V?)ADDSSrr",
1725 "(V?)ADDSUBPD(Y?)rr",
1726 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001727 "(V?)CVTDQ2PS(Y?)rr",
1728 "(V?)CVTPS2DQ(Y?)rr",
1729 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001730 "(V?)SUBPD(Y?)rr",
1731 "(V?)SUBPS(Y?)rr",
1732 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001733 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001734
Clement Courbet327fac42018-03-07 08:14:02 +00001735def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001736 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00001737 let NumMicroOps = 2;
1738 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001739}
Clement Courbet327fac42018-03-07 08:14:02 +00001740def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001741
1742def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1743 let Latency = 3;
1744 let NumMicroOps = 1;
1745 let ResourceCycles = [1];
1746}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001747def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1748 "VBROADCASTSSYrr",
1749 "VEXTRACTF128rr",
1750 "VEXTRACTI128rr",
1751 "VINSERTF128rr",
1752 "VINSERTI128rr",
1753 "VPBROADCASTBYrr",
1754 "VPBROADCASTBrr",
1755 "VPBROADCASTDYrr",
1756 "VPBROADCASTQYrr",
1757 "VPBROADCASTWYrr",
1758 "VPBROADCASTWrr",
1759 "VPERM2F128rr",
1760 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001761 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001762 "VPERMQYri",
1763 "VPMOVSXBDYrr",
1764 "VPMOVSXBQYrr",
1765 "VPMOVSXBWYrr",
1766 "VPMOVSXDQYrr",
1767 "VPMOVSXWDYrr",
1768 "VPMOVSXWQYrr",
1769 "VPMOVZXBDYrr",
1770 "VPMOVZXBQYrr",
1771 "VPMOVZXBWYrr",
1772 "VPMOVZXDQYrr",
1773 "VPMOVZXWDYrr",
1774 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001775
1776def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001777 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001778 let NumMicroOps = 2;
1779 let ResourceCycles = [1,1];
1780}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001781def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1782 "(V?)ADDPSrm",
1783 "(V?)ADDSUBPDrm",
1784 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001785 "(V?)CVTDQ2PSrm",
1786 "(V?)CVTPS2DQrm",
1787 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001788 "(V?)SUBPDrm",
1789 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001790
Gadi Haber2cf601f2017-12-08 09:48:44 +00001791def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1792 let Latency = 10;
1793 let NumMicroOps = 2;
1794 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001795}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001796def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1797 "ADD_F64m",
1798 "ILD_F16m",
1799 "ILD_F32m",
1800 "ILD_F64m",
1801 "SUBR_F32m",
1802 "SUBR_F64m",
1803 "SUB_F32m",
1804 "SUB_F64m",
1805 "VADDPDYrm",
1806 "VADDPSYrm",
1807 "VADDSUBPDYrm",
1808 "VADDSUBPSYrm",
1809 "VCMPPDYrmi",
1810 "VCMPPSYrmi",
1811 "VCVTDQ2PSYrm",
1812 "VCVTPS2DQYrm",
1813 "VCVTTPS2DQYrm",
1814 "VMAX(C?)PDYrm",
1815 "VMAX(C?)PSYrm",
1816 "VMIN(C?)PDYrm",
1817 "VMIN(C?)PSYrm",
1818 "VSUBPDYrm",
1819 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001820
1821def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001822 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823 let NumMicroOps = 2;
1824 let ResourceCycles = [1,1];
1825}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001826def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1827 "VPERM2I128rm",
1828 "VPERMDYrm",
1829 "VPERMPDYmi",
1830 "VPERMPSYrm",
1831 "VPERMQYmi",
1832 "VPMOVZXBDYrm",
1833 "VPMOVZXBQYrm",
1834 "VPMOVZXBWYrm",
1835 "VPMOVZXDQYrm",
1836 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001837
Gadi Haber2cf601f2017-12-08 09:48:44 +00001838def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1839 let Latency = 9;
1840 let NumMicroOps = 2;
1841 let ResourceCycles = [1,1];
1842}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001843def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1844 "VPMOVSXDQYrm",
1845 "VPMOVSXWDYrm",
1846 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001847
Gadi Haberd76f7b82017-08-28 10:04:16 +00001848def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1849 let Latency = 3;
1850 let NumMicroOps = 3;
1851 let ResourceCycles = [3];
1852}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001853def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1854 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001855
1856def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1857 let Latency = 3;
1858 let NumMicroOps = 3;
1859 let ResourceCycles = [2,1];
1860}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001861def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1862 "VPSRAVD(Y?)rr",
1863 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001864
1865def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1866 let Latency = 3;
1867 let NumMicroOps = 3;
1868 let ResourceCycles = [2,1];
1869}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001870def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1871 "MMX_PHADDSWrr",
1872 "MMX_PHADDWrr",
1873 "MMX_PHSUBDrr",
1874 "MMX_PHSUBSWrr",
1875 "MMX_PHSUBWrr",
1876 "(V?)PHADDD(Y?)rr",
1877 "(V?)PHADDSW(Y?)rr",
1878 "(V?)PHADDW(Y?)rr",
1879 "(V?)PHSUBD(Y?)rr",
1880 "(V?)PHSUBSW(Y?)rr",
1881 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001882
1883def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1884 let Latency = 3;
1885 let NumMicroOps = 3;
1886 let ResourceCycles = [2,1];
1887}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001888def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1889 "MMX_PACKSSWBirr",
1890 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001891
1892def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1893 let Latency = 3;
1894 let NumMicroOps = 3;
1895 let ResourceCycles = [1,2];
1896}
1897def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1898
1899def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1900 let Latency = 3;
1901 let NumMicroOps = 3;
1902 let ResourceCycles = [1,2];
1903}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001904def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1905 "RCL(8|16|32|64)r1",
1906 "RCL(8|16|32|64)ri",
1907 "RCR(8|16|32|64)r1",
1908 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001909
1910def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1911 let Latency = 3;
1912 let NumMicroOps = 3;
1913 let ResourceCycles = [2,1];
1914}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001915def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1916 "ROR(8|16|32|64)rCL",
1917 "SAR(8|16|32|64)rCL",
1918 "SHL(8|16|32|64)rCL",
1919 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920
1921def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001922 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001923 let NumMicroOps = 3;
1924 let ResourceCycles = [1,1,1];
1925}
1926def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1927
1928def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001929 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001930 let NumMicroOps = 3;
1931 let ResourceCycles = [1,1,1];
1932}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001933def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1934 "ISTT_FP32m",
1935 "ISTT_FP64m",
1936 "IST_F16m",
1937 "IST_F32m",
1938 "IST_FP16m",
1939 "IST_FP32m",
1940 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001941
1942def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001943 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001944 let NumMicroOps = 4;
1945 let ResourceCycles = [2,1,1];
1946}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001947def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1948 "VPSRAVDYrm",
1949 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001950
1951def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1952 let Latency = 9;
1953 let NumMicroOps = 4;
1954 let ResourceCycles = [2,1,1];
1955}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001956def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1957 "VPSRAVDrm",
1958 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001959
1960def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001961 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001962 let NumMicroOps = 4;
1963 let ResourceCycles = [2,1,1];
1964}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001965def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
1966 "MMX_PHADDSWrm",
1967 "MMX_PHADDWrm",
1968 "MMX_PHSUBDrm",
1969 "MMX_PHSUBSWrm",
1970 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001971
1972def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1973 let Latency = 10;
1974 let NumMicroOps = 4;
1975 let ResourceCycles = [2,1,1];
1976}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001977def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1978 "VPHADDSWYrm",
1979 "VPHADDWYrm",
1980 "VPHSUBDYrm",
1981 "VPHSUBSWYrm",
1982 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001983
1984def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1985 let Latency = 9;
1986 let NumMicroOps = 4;
1987 let ResourceCycles = [2,1,1];
1988}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001989def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1990 "(V?)PHADDSWrm",
1991 "(V?)PHADDWrm",
1992 "(V?)PHSUBDrm",
1993 "(V?)PHSUBSWrm",
1994 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001995
1996def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001997 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001998 let NumMicroOps = 4;
1999 let ResourceCycles = [1,1,2];
2000}
Craig Topperf4cd9082018-01-19 05:47:32 +00002001def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002002
2003def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002004 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002005 let NumMicroOps = 5;
2006 let ResourceCycles = [1,1,1,2];
2007}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002008def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2009 "RCL(8|16|32|64)mi",
2010 "RCR(8|16|32|64)m1",
2011 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002012
2013def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002014 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002015 let NumMicroOps = 5;
2016 let ResourceCycles = [1,1,2,1];
2017}
Craig Topper13a16502018-03-19 00:56:09 +00002018def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002019
2020def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002021 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002022 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002023 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002024}
Craig Topper9f834812018-04-01 21:54:24 +00002025def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002026
Gadi Haberd76f7b82017-08-28 10:04:16 +00002027def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002028 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002029 let NumMicroOps = 6;
2030 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002031}
Craig Topper9f834812018-04-01 21:54:24 +00002032def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002033 "CMPXCHG(8|16|32|64)rm",
2034 "ROL(8|16|32|64)mCL",
2035 "SAR(8|16|32|64)mCL",
2036 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002037 "SHL(8|16|32|64)mCL",
2038 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00002039def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2040 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002041
Gadi Haberd76f7b82017-08-28 10:04:16 +00002042def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2043 let Latency = 4;
2044 let NumMicroOps = 2;
2045 let ResourceCycles = [1,1];
2046}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002047def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2048 "(V?)CVTSD2SIrr",
2049 "(V?)CVTSS2SI64rr",
2050 "(V?)CVTSS2SIrr",
2051 "(V?)CVTTSD2SI64rr",
2052 "(V?)CVTTSD2SIrr",
2053 "(V?)CVTTSS2SI64rr",
2054 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002055
2056def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2057 let Latency = 4;
2058 let NumMicroOps = 2;
2059 let ResourceCycles = [1,1];
2060}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002061def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2062 "VPSLLDYrr",
2063 "VPSLLQYrr",
2064 "VPSLLWYrr",
2065 "VPSRADYrr",
2066 "VPSRAWYrr",
2067 "VPSRLDYrr",
2068 "VPSRLQYrr",
2069 "VPSRLWYrr",
2070 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071
2072def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2073 let Latency = 4;
2074 let NumMicroOps = 2;
2075 let ResourceCycles = [1,1];
2076}
2077def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2078
2079def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2080 let Latency = 4;
2081 let NumMicroOps = 2;
2082 let ResourceCycles = [1,1];
2083}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002084def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2085 "MMX_CVTPI2PDirr",
2086 "MMX_CVTPS2PIirr",
2087 "MMX_CVTTPD2PIirr",
2088 "MMX_CVTTPS2PIirr",
2089 "(V?)CVTDQ2PDrr",
2090 "(V?)CVTPD2DQrr",
2091 "(V?)CVTPD2PSrr",
2092 "VCVTPS2PHrr",
2093 "(V?)CVTSD2SSrr",
2094 "(V?)CVTSI642SDrr",
2095 "(V?)CVTSI2SDrr",
2096 "(V?)CVTSI2SSrr",
2097 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002098
2099def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2100 let Latency = 4;
2101 let NumMicroOps = 2;
2102 let ResourceCycles = [1,1];
2103}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002104def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002105
2106def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2107 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002108 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002109}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002110def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002111
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002113 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002114 let NumMicroOps = 3;
2115 let ResourceCycles = [2,1];
2116}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002117def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2118 "FICOM32m",
2119 "FICOMP16m",
2120 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002121
2122def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002123 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002124 let NumMicroOps = 3;
2125 let ResourceCycles = [1,1,1];
2126}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002127def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2128 "(V?)CVTSD2SIrm",
2129 "(V?)CVTSS2SI64rm",
2130 "(V?)CVTSS2SIrm",
2131 "(V?)CVTTSD2SI64rm",
2132 "(V?)CVTTSD2SIrm",
2133 "VCVTTSS2SI64rm",
2134 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002135
2136def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002137 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002138 let NumMicroOps = 3;
2139 let ResourceCycles = [1,1,1];
2140}
2141def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002142
2143def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2144 let Latency = 11;
2145 let NumMicroOps = 3;
2146 let ResourceCycles = [1,1,1];
2147}
2148def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002149
2150def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002151 let Latency = 10;
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<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2156 "CVTPD2PSrm",
2157 "CVTTPD2DQrm",
2158 "MMX_CVTPD2PIirm",
2159 "MMX_CVTTPD2PIirm",
2160 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002161
2162def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2163 let Latency = 9;
2164 let NumMicroOps = 3;
2165 let ResourceCycles = [1,1,1];
2166}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002167def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2168 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002169
2170def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002171 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002172 let NumMicroOps = 3;
2173 let ResourceCycles = [1,1,1];
2174}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002175def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002176
2177def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002178 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002179 let NumMicroOps = 3;
2180 let ResourceCycles = [1,1,1];
2181}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002182def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2183 "VPBROADCASTBrm",
2184 "VPBROADCASTWYrm",
2185 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186
2187def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2188 let Latency = 4;
2189 let NumMicroOps = 4;
2190 let ResourceCycles = [4];
2191}
2192def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2193
2194def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2195 let Latency = 4;
2196 let NumMicroOps = 4;
2197 let ResourceCycles = [1,3];
2198}
2199def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2200
2201def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2202 let Latency = 4;
2203 let NumMicroOps = 4;
2204 let ResourceCycles = [1,1,2];
2205}
2206def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2207
2208def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002209 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002210 let NumMicroOps = 4;
2211 let ResourceCycles = [1,1,1,1];
2212}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002213def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2214 "VMASKMOVPS(Y?)mr",
2215 "VPMASKMOVD(Y?)mr",
2216 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002217
2218def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002219 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002220 let NumMicroOps = 4;
2221 let ResourceCycles = [1,1,1,1];
2222}
2223def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2224
2225def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002226 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002227 let NumMicroOps = 4;
2228 let ResourceCycles = [1,1,1,1];
2229}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002230def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2231 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002232
2233def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002234 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002235 let NumMicroOps = 5;
2236 let ResourceCycles = [1,2,1,1];
2237}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002238def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2239 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002240
2241def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002242 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243 let NumMicroOps = 6;
2244 let ResourceCycles = [1,1,4];
2245}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002246def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2247 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002248
2249def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002250 let Latency = 5;
2251 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002252 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002253}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002254def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2255 "MMX_PMADDWDirr",
2256 "MMX_PMULHRSWrr",
2257 "MMX_PMULHUWirr",
2258 "MMX_PMULHWirr",
2259 "MMX_PMULLWirr",
2260 "MMX_PMULUDQirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002261 "MUL_FPrST0",
2262 "MUL_FST0r",
2263 "MUL_FrST0",
2264 "(V?)PCMPGTQ(Y?)rr",
2265 "(V?)PHMINPOSUWrr",
2266 "(V?)PMADDUBSW(Y?)rr",
2267 "(V?)PMADDWD(Y?)rr",
2268 "(V?)PMULDQ(Y?)rr",
2269 "(V?)PMULHRSW(Y?)rr",
2270 "(V?)PMULHUW(Y?)rr",
2271 "(V?)PMULHW(Y?)rr",
2272 "(V?)PMULLW(Y?)rr",
2273 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002274 "(V?)RCPPSr",
2275 "(V?)RCPSSr",
2276 "(V?)RSQRTPSr",
2277 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002278
Gadi Haberd76f7b82017-08-28 10:04:16 +00002279def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002280 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002281 let NumMicroOps = 1;
2282 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002283}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002284def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2285 "(V?)MULPS(Y?)rr",
2286 "(V?)MULSDrr",
2287 "(V?)MULSSrr",
2288 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2289 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002290
Gadi Haberd76f7b82017-08-28 10:04:16 +00002291def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002292 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002293 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002294 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002295}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002296def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2297 "MMX_PMADDWDirm",
2298 "MMX_PMULHRSWrm",
2299 "MMX_PMULHUWirm",
2300 "MMX_PMULHWirm",
2301 "MMX_PMULLWirm",
2302 "MMX_PMULUDQirm",
2303 "MMX_PSADBWirm",
2304 "(V?)RCPSSm",
2305 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002306
Craig Topper8104f262018-04-02 05:33:28 +00002307def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002308 let Latency = 16;
2309 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002310 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002311}
2312def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2313
Craig Topper8104f262018-04-02 05:33:28 +00002314def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002315 let Latency = 18;
2316 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002317 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002318}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002319def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002320
2321def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2322 let Latency = 11;
2323 let NumMicroOps = 2;
2324 let ResourceCycles = [1,1];
2325}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002326def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2327 "(V?)PHMINPOSUWrm",
2328 "(V?)PMADDUBSWrm",
2329 "(V?)PMADDWDrm",
2330 "(V?)PMULDQrm",
2331 "(V?)PMULHRSWrm",
2332 "(V?)PMULHUWrm",
2333 "(V?)PMULHWrm",
2334 "(V?)PMULLWrm",
2335 "(V?)PMULUDQrm",
2336 "(V?)PSADBWrm",
2337 "(V?)RCPPSm",
2338 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002339
2340def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2341 let Latency = 12;
2342 let NumMicroOps = 2;
2343 let ResourceCycles = [1,1];
2344}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002345def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2346 "MUL_F64m",
2347 "VPCMPGTQYrm",
2348 "VPMADDUBSWYrm",
2349 "VPMADDWDYrm",
2350 "VPMULDQYrm",
2351 "VPMULHRSWYrm",
2352 "VPMULHUWYrm",
2353 "VPMULHWYrm",
2354 "VPMULLWYrm",
2355 "VPMULUDQYrm",
2356 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002357
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002359 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002360 let NumMicroOps = 2;
2361 let ResourceCycles = [1,1];
2362}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002363def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2364 "(V?)MULPSrm",
2365 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002366
2367def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2368 let Latency = 12;
2369 let NumMicroOps = 2;
2370 let ResourceCycles = [1,1];
2371}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002372def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2373 "VMULPSYrm",
2374 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002375
2376def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2377 let Latency = 10;
2378 let NumMicroOps = 2;
2379 let ResourceCycles = [1,1];
2380}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002381def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2382 "(V?)MULSSrm",
2383 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002384
2385def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2386 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002387 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002388 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002389}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002390def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2391 "(V?)HADDPD(Y?)rr",
2392 "(V?)HADDPS(Y?)rr",
2393 "(V?)HSUBPD(Y?)rr",
2394 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002395
Gadi Haberd76f7b82017-08-28 10:04:16 +00002396def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2397 let Latency = 5;
2398 let NumMicroOps = 3;
2399 let ResourceCycles = [1,1,1];
2400}
2401def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2402
2403def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002404 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002405 let NumMicroOps = 3;
2406 let ResourceCycles = [1,1,1];
2407}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002408def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002409
2410def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002411 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002412 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002413 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002414}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002415def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2416 "(V?)HADDPSrm",
2417 "(V?)HSUBPDrm",
2418 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002419
Gadi Haber2cf601f2017-12-08 09:48:44 +00002420def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2421 let Latency = 12;
2422 let NumMicroOps = 4;
2423 let ResourceCycles = [1,2,1];
2424}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002425def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2426 "VHADDPSYrm",
2427 "VHSUBPDYrm",
2428 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002429
Gadi Haberd76f7b82017-08-28 10:04:16 +00002430def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002431 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002432 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002433 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002434}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002436
Gadi Haberd76f7b82017-08-28 10:04:16 +00002437def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002438 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439 let NumMicroOps = 4;
2440 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002441}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002442def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002443
Gadi Haberd76f7b82017-08-28 10:04:16 +00002444def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2445 let Latency = 5;
2446 let NumMicroOps = 5;
2447 let ResourceCycles = [1,4];
2448}
2449def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2450
2451def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2452 let Latency = 5;
2453 let NumMicroOps = 5;
2454 let ResourceCycles = [1,4];
2455}
2456def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2457
2458def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2459 let Latency = 5;
2460 let NumMicroOps = 5;
2461 let ResourceCycles = [2,3];
2462}
Craig Topper13a16502018-03-19 00:56:09 +00002463def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002464
2465def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2466 let Latency = 6;
2467 let NumMicroOps = 2;
2468 let ResourceCycles = [1,1];
2469}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002470def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2471 "VCVTPD2DQYrr",
2472 "VCVTPD2PSYrr",
2473 "VCVTPS2PHYrr",
2474 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002475
2476def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002477 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002478 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002479 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002480}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002481def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2482 "ADD_FI32m",
2483 "SUBR_FI16m",
2484 "SUBR_FI32m",
2485 "SUB_FI16m",
2486 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002487 "VROUNDPDYm",
2488 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002489
Gadi Haber2cf601f2017-12-08 09:48:44 +00002490def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2491 let Latency = 12;
2492 let NumMicroOps = 3;
2493 let ResourceCycles = [2,1];
2494}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002495def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2496 "(V?)ROUNDPSm",
2497 "(V?)ROUNDSDm",
2498 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002499
Gadi Haberd76f7b82017-08-28 10:04:16 +00002500def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002501 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002502 let NumMicroOps = 3;
2503 let ResourceCycles = [1,1,1];
2504}
2505def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2506
2507def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2508 let Latency = 6;
2509 let NumMicroOps = 4;
2510 let ResourceCycles = [1,1,2];
2511}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002512def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2513 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002514
2515def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002516 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002517 let NumMicroOps = 4;
2518 let ResourceCycles = [1,1,1,1];
2519}
2520def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2521
2522def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2523 let Latency = 6;
2524 let NumMicroOps = 4;
2525 let ResourceCycles = [1,1,1,1];
2526}
2527def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2528
2529def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2530 let Latency = 6;
2531 let NumMicroOps = 6;
2532 let ResourceCycles = [1,5];
2533}
2534def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2535
2536def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002537 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002538 let NumMicroOps = 6;
2539 let ResourceCycles = [1,1,1,1,2];
2540}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002541def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2542 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002543
Gadi Haberd76f7b82017-08-28 10:04:16 +00002544def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2545 let Latency = 7;
2546 let NumMicroOps = 3;
2547 let ResourceCycles = [1,2];
2548}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002549def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002550
2551def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002552 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002553 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002554 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002555}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002556def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002557
Gadi Haber2cf601f2017-12-08 09:48:44 +00002558def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2559 let Latency = 14;
2560 let NumMicroOps = 4;
2561 let ResourceCycles = [1,2,1];
2562}
2563def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2564
Gadi Haberd76f7b82017-08-28 10:04:16 +00002565def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2566 let Latency = 7;
2567 let NumMicroOps = 7;
2568 let ResourceCycles = [2,2,1,2];
2569}
Craig Topper2d451e72018-03-18 08:38:06 +00002570def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002571
2572def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002573 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002574 let NumMicroOps = 3;
2575 let ResourceCycles = [1,1,1];
2576}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002577def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2578 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002579
2580def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2581 let Latency = 9;
2582 let NumMicroOps = 3;
2583 let ResourceCycles = [1,1,1];
2584}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002585def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002586
2587def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002588 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002589 let NumMicroOps = 4;
2590 let ResourceCycles = [1,1,1,1];
2591}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002592def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002593
Gadi Haber2cf601f2017-12-08 09:48:44 +00002594def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2595 let Latency = 17;
2596 let NumMicroOps = 3;
2597 let ResourceCycles = [2,1];
2598}
2599def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2600
Gadi Haberd76f7b82017-08-28 10:04:16 +00002601def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002602 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002603 let NumMicroOps = 10;
2604 let ResourceCycles = [1,1,1,4,1,2];
2605}
Craig Topper13a16502018-03-19 00:56:09 +00002606def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002607
Craig Topper8104f262018-04-02 05:33:28 +00002608def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002609 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002610 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002611 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002612}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002613def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2614 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002615
Gadi Haberd76f7b82017-08-28 10:04:16 +00002616def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2617 let Latency = 11;
2618 let NumMicroOps = 3;
2619 let ResourceCycles = [2,1];
2620}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002621def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2622 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002623
Gadi Haberd76f7b82017-08-28 10:04:16 +00002624def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002625 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002626 let NumMicroOps = 4;
2627 let ResourceCycles = [2,1,1];
2628}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002629def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2630 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002631
2632def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2633 let Latency = 11;
2634 let NumMicroOps = 7;
2635 let ResourceCycles = [2,2,3];
2636}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002637def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2638 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002639
2640def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2641 let Latency = 11;
2642 let NumMicroOps = 9;
2643 let ResourceCycles = [1,4,1,3];
2644}
2645def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2646
2647def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2648 let Latency = 11;
2649 let NumMicroOps = 11;
2650 let ResourceCycles = [2,9];
2651}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002652def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002653
2654def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002655 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656 let NumMicroOps = 14;
2657 let ResourceCycles = [1,1,1,4,2,5];
2658}
2659def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2660
Craig Topper8104f262018-04-02 05:33:28 +00002661def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002662 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002663 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002664 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002665}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002666def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2667 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002668
Craig Topper8104f262018-04-02 05:33:28 +00002669def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002670 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002671 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002672 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002673}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002674def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002675
2676def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002677 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002678 let NumMicroOps = 11;
2679 let ResourceCycles = [2,1,1,3,1,3];
2680}
Craig Topper13a16502018-03-19 00:56:09 +00002681def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002682
Craig Topper8104f262018-04-02 05:33:28 +00002683def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002684 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002685 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002686 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002687}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002688def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002689
Gadi Haberd76f7b82017-08-28 10:04:16 +00002690def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2691 let Latency = 14;
2692 let NumMicroOps = 4;
2693 let ResourceCycles = [2,1,1];
2694}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002695def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002696
2697def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002698 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002699 let NumMicroOps = 5;
2700 let ResourceCycles = [2,1,1,1];
2701}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002702def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703
Gadi Haber2cf601f2017-12-08 09:48:44 +00002704def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2705 let Latency = 21;
2706 let NumMicroOps = 5;
2707 let ResourceCycles = [2,1,1,1];
2708}
2709def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2710
Gadi Haberd76f7b82017-08-28 10:04:16 +00002711def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2712 let Latency = 14;
2713 let NumMicroOps = 10;
2714 let ResourceCycles = [2,3,1,4];
2715}
2716def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2717
2718def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002719 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002720 let NumMicroOps = 15;
2721 let ResourceCycles = [1,14];
2722}
2723def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2724
2725def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002726 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002727 let NumMicroOps = 8;
2728 let ResourceCycles = [1,1,1,1,1,1,2];
2729}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002730def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2731 "INSL",
2732 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002733
2734def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2735 let Latency = 16;
2736 let NumMicroOps = 16;
2737 let ResourceCycles = [16];
2738}
2739def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2740
2741def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002742 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002743 let NumMicroOps = 19;
2744 let ResourceCycles = [2,1,4,1,1,4,6];
2745}
2746def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2747
2748def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2749 let Latency = 17;
2750 let NumMicroOps = 15;
2751 let ResourceCycles = [2,1,2,4,2,4];
2752}
2753def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2754
Gadi Haberd76f7b82017-08-28 10:04:16 +00002755def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2756 let Latency = 18;
2757 let NumMicroOps = 8;
2758 let ResourceCycles = [1,1,1,5];
2759}
2760def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002761def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002762
Gadi Haberd76f7b82017-08-28 10:04:16 +00002763def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002764 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002765 let NumMicroOps = 19;
2766 let ResourceCycles = [3,1,15];
2767}
Craig Topper391c6f92017-12-10 01:24:08 +00002768def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002769
Gadi Haberd76f7b82017-08-28 10:04:16 +00002770def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2771 let Latency = 20;
2772 let NumMicroOps = 1;
2773 let ResourceCycles = [1];
2774}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002775def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2776 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002777 "DIV_FrST0")>;
2778
2779def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2780 let Latency = 20;
2781 let NumMicroOps = 1;
2782 let ResourceCycles = [1,14];
2783}
2784def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2785 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002786
2787def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002788 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002789 let NumMicroOps = 2;
2790 let ResourceCycles = [1,1];
2791}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002792def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002793 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002794
Craig Topper8104f262018-04-02 05:33:28 +00002795def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002796 let Latency = 26;
2797 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002798 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002799}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002800def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002801
Craig Topper8104f262018-04-02 05:33:28 +00002802def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002803 let Latency = 21;
2804 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002805 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002806}
2807def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2808
Craig Topper8104f262018-04-02 05:33:28 +00002809def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002810 let Latency = 22;
2811 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002812 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002813}
2814def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2815
Craig Topper8104f262018-04-02 05:33:28 +00002816def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002817 let Latency = 25;
2818 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002819 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002820}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002821def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002822
2823def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2824 let Latency = 20;
2825 let NumMicroOps = 10;
2826 let ResourceCycles = [1,2,7];
2827}
2828def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2829
Craig Topper8104f262018-04-02 05:33:28 +00002830def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002831 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002832 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002833 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002834}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002835def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2836 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002837
Craig Topper8104f262018-04-02 05:33:28 +00002838def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002839 let Latency = 21;
2840 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002841 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002842}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002843def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2844 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002845
Craig Topper8104f262018-04-02 05:33:28 +00002846def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002847 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002848 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002849 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002850}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002851def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2852 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002853
2854def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002855 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002856 let NumMicroOps = 3;
2857 let ResourceCycles = [1,1,1];
2858}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002859def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2860 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002861
2862def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2863 let Latency = 24;
2864 let NumMicroOps = 1;
2865 let ResourceCycles = [1];
2866}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002867def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2868 "DIVR_FST0r",
2869 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002870
2871def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002872 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002873 let NumMicroOps = 2;
2874 let ResourceCycles = [1,1];
2875}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002876def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2877 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002878
2879def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002880 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002881 let NumMicroOps = 27;
2882 let ResourceCycles = [1,5,1,1,19];
2883}
2884def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2885
2886def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002887 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002888 let NumMicroOps = 28;
2889 let ResourceCycles = [1,6,1,1,19];
2890}
Craig Topper2d451e72018-03-18 08:38:06 +00002891def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002892
2893def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002894 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002895 let NumMicroOps = 3;
2896 let ResourceCycles = [1,1,1];
2897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002898def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2899 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002900
Gadi Haberd76f7b82017-08-28 10:04:16 +00002901def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002902 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002903 let NumMicroOps = 23;
2904 let ResourceCycles = [1,5,3,4,10];
2905}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002906def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2907 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002908
2909def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002910 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002911 let NumMicroOps = 23;
2912 let ResourceCycles = [1,5,2,1,4,10];
2913}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002914def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2915 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002916
2917def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2918 let Latency = 31;
2919 let NumMicroOps = 31;
2920 let ResourceCycles = [8,1,21,1];
2921}
2922def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2923
Craig Topper8104f262018-04-02 05:33:28 +00002924def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002925 let Latency = 35;
2926 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002927 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002928}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002929def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2930 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002931
Craig Topper8104f262018-04-02 05:33:28 +00002932def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002933 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002934 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002935 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002936}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002937def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2938 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002939
2940def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002941 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002942 let NumMicroOps = 18;
2943 let ResourceCycles = [1,1,2,3,1,1,1,8];
2944}
2945def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2946
2947def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2948 let Latency = 42;
2949 let NumMicroOps = 22;
2950 let ResourceCycles = [2,20];
2951}
Craig Topper2d451e72018-03-18 08:38:06 +00002952def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002953
2954def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002955 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002956 let NumMicroOps = 64;
2957 let ResourceCycles = [2,2,8,1,10,2,39];
2958}
2959def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002960
2961def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002962 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002963 let NumMicroOps = 88;
2964 let ResourceCycles = [4,4,31,1,2,1,45];
2965}
Craig Topper2d451e72018-03-18 08:38:06 +00002966def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002967
2968def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002969 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002970 let NumMicroOps = 90;
2971 let ResourceCycles = [4,2,33,1,2,1,47];
2972}
Craig Topper2d451e72018-03-18 08:38:06 +00002973def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002974
2975def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2976 let Latency = 75;
2977 let NumMicroOps = 15;
2978 let ResourceCycles = [6,3,6];
2979}
2980def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2981
2982def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2983 let Latency = 98;
2984 let NumMicroOps = 32;
2985 let ResourceCycles = [7,7,3,3,1,11];
2986}
2987def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2988
2989def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2990 let Latency = 112;
2991 let NumMicroOps = 66;
2992 let ResourceCycles = [4,2,4,8,14,34];
2993}
2994def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2995
2996def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002997 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002998 let NumMicroOps = 100;
2999 let ResourceCycles = [9,9,11,8,1,11,21,30];
3000}
3001def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003002
Gadi Haber2cf601f2017-12-08 09:48:44 +00003003def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3004 let Latency = 26;
3005 let NumMicroOps = 12;
3006 let ResourceCycles = [2,2,1,3,2,2];
3007}
Craig Topper17a31182017-12-16 18:35:29 +00003008def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3009 VPGATHERDQrm,
3010 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003011
3012def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3013 let Latency = 24;
3014 let NumMicroOps = 22;
3015 let ResourceCycles = [5,3,4,1,5,4];
3016}
Craig Topper17a31182017-12-16 18:35:29 +00003017def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3018 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003019
3020def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3021 let Latency = 28;
3022 let NumMicroOps = 22;
3023 let ResourceCycles = [5,3,4,1,5,4];
3024}
Craig Topper17a31182017-12-16 18:35:29 +00003025def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003026
3027def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3028 let Latency = 25;
3029 let NumMicroOps = 22;
3030 let ResourceCycles = [5,3,4,1,5,4];
3031}
Craig Topper17a31182017-12-16 18:35:29 +00003032def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003033
3034def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3035 let Latency = 27;
3036 let NumMicroOps = 20;
3037 let ResourceCycles = [3,3,4,1,5,4];
3038}
Craig Topper17a31182017-12-16 18:35:29 +00003039def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3040 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003041
3042def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3043 let Latency = 27;
3044 let NumMicroOps = 34;
3045 let ResourceCycles = [5,3,8,1,9,8];
3046}
Craig Topper17a31182017-12-16 18:35:29 +00003047def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3048 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003049
3050def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3051 let Latency = 23;
3052 let NumMicroOps = 14;
3053 let ResourceCycles = [3,3,2,1,3,2];
3054}
Craig Topper17a31182017-12-16 18:35:29 +00003055def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3056 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003057
3058def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3059 let Latency = 28;
3060 let NumMicroOps = 15;
3061 let ResourceCycles = [3,3,2,1,4,2];
3062}
Craig Topper17a31182017-12-16 18:35:29 +00003063def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003064
3065def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3066 let Latency = 25;
3067 let NumMicroOps = 15;
3068 let ResourceCycles = [3,3,2,1,4,2];
3069}
Craig Topper17a31182017-12-16 18:35:29 +00003070def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3071 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003072
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003073} // SchedModel