blob: 6976d551bdb73d93b8dfb7b50d70fd077b57667a [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",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000855 "MMX_PABS(B|D|W)rr",
856 "MMX_PADD(B|D|Q|W)irr",
857 "MMX_PADDS(B|W)irr",
858 "MMX_PADDUS(B|W)irr",
859 "MMX_PAVG(B|W)irr",
860 "MMX_PCMPEQ(B|D|W)irr",
861 "MMX_PCMPGT(B|D|W)irr",
862 "MMX_P(MAX|MIN)SWirr",
863 "MMX_P(MAX|MIN)UBirr",
864 "MMX_PSIGN(B|D|W)rr",
865 "MMX_PSUB(B|D|Q|W)irr",
866 "MMX_PSUBS(B|W)irr",
867 "MMX_PSUBUS(B|W)irr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000868 "(V?)PABSB(Y?)rr",
869 "(V?)PABSD(Y?)rr",
870 "(V?)PABSW(Y?)rr",
871 "(V?)PADDB(Y?)rr",
872 "(V?)PADDD(Y?)rr",
873 "(V?)PADDQ(Y?)rr",
874 "(V?)PADDSB(Y?)rr",
875 "(V?)PADDSW(Y?)rr",
876 "(V?)PADDUSB(Y?)rr",
877 "(V?)PADDUSW(Y?)rr",
878 "(V?)PADDW(Y?)rr",
879 "(V?)PAVGB(Y?)rr",
880 "(V?)PAVGW(Y?)rr",
881 "(V?)PCMPEQB(Y?)rr",
882 "(V?)PCMPEQD(Y?)rr",
883 "(V?)PCMPEQQ(Y?)rr",
884 "(V?)PCMPEQW(Y?)rr",
885 "(V?)PCMPGTB(Y?)rr",
886 "(V?)PCMPGTD(Y?)rr",
887 "(V?)PCMPGTW(Y?)rr",
888 "(V?)PMAXSB(Y?)rr",
889 "(V?)PMAXSD(Y?)rr",
890 "(V?)PMAXSW(Y?)rr",
891 "(V?)PMAXUB(Y?)rr",
892 "(V?)PMAXUD(Y?)rr",
893 "(V?)PMAXUW(Y?)rr",
894 "(V?)PMINSB(Y?)rr",
895 "(V?)PMINSD(Y?)rr",
896 "(V?)PMINSW(Y?)rr",
897 "(V?)PMINUB(Y?)rr",
898 "(V?)PMINUD(Y?)rr",
899 "(V?)PMINUW(Y?)rr",
900 "(V?)PSIGNB(Y?)rr",
901 "(V?)PSIGND(Y?)rr",
902 "(V?)PSIGNW(Y?)rr",
903 "(V?)PSUBB(Y?)rr",
904 "(V?)PSUBD(Y?)rr",
905 "(V?)PSUBQ(Y?)rr",
906 "(V?)PSUBSB(Y?)rr",
907 "(V?)PSUBSW(Y?)rr",
908 "(V?)PSUBUSB(Y?)rr",
909 "(V?)PSUBUSW(Y?)rr",
910 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000911
912def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
913 let Latency = 1;
914 let NumMicroOps = 1;
915 let ResourceCycles = [1];
916}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000917def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
918 "MMX_PANDNirr",
919 "MMX_PANDirr",
920 "MMX_PORirr",
921 "MMX_PXORirr",
922 "(V?)BLENDPD(Y?)rri",
923 "(V?)BLENDPS(Y?)rri",
924 "(V?)MOVDQA(Y?)rr",
925 "(V?)MOVDQU(Y?)rr",
926 "(V?)MOVPQI2QIrr",
927 "VMOVZPQILo2PQIrr",
928 "(V?)PANDN(Y?)rr",
929 "(V?)PAND(Y?)rr",
930 "VPBLENDD(Y?)rri",
931 "(V?)POR(Y?)rr",
932 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000933
934def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
935 let Latency = 1;
936 let NumMicroOps = 1;
937 let ResourceCycles = [1];
938}
Craig Topperfbe31322018-04-05 21:56:19 +0000939def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000940def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000941 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000942 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000943 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000944 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000945 "SGDT64m",
946 "SIDT64m",
947 "SLDT64m",
948 "SMSW16m",
949 "STC",
950 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000951 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000952
953def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000954 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000955 let NumMicroOps = 2;
956 let ResourceCycles = [1,1];
957}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000958def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
959 "MMX_PSLLQrm",
960 "MMX_PSLLWrm",
961 "MMX_PSRADrm",
962 "MMX_PSRAWrm",
963 "MMX_PSRLDrm",
964 "MMX_PSRLQrm",
965 "MMX_PSRLWrm",
966 "VCVTPH2PSrm",
967 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000968
Gadi Haber2cf601f2017-12-08 09:48:44 +0000969def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
970 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000971 let NumMicroOps = 2;
972 let ResourceCycles = [1,1];
973}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000974def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
975 "(V?)CVTSS2SDrm",
976 "VPSLLVQrm",
977 "VPSRLVQrm",
978 "VTESTPDrm",
979 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000980
981def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
982 let Latency = 8;
983 let NumMicroOps = 2;
984 let ResourceCycles = [1,1];
985}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000986def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
987 "VPSLLQYrm",
988 "VPSLLVQYrm",
989 "VPSLLWYrm",
990 "VPSRADYrm",
991 "VPSRAWYrm",
992 "VPSRLDYrm",
993 "VPSRLQYrm",
994 "VPSRLVQYrm",
995 "VPSRLWYrm",
996 "VTESTPDYrm",
997 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000998
999def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1000 let Latency = 8;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001004def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001005 "FCOM64m",
1006 "FCOMP32m",
1007 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001008 "MMX_CVTPI2PSirm",
1009 "MMX_CVTPS2PIirm",
1010 "MMX_CVTTPS2PIirm",
1011 "PDEP(32|64)rm",
1012 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001013 "(V?)ADDSDrm",
1014 "(V?)ADDSSrm",
1015 "(V?)CMPSDrm",
1016 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001017 "(V?)MAX(C?)SDrm",
1018 "(V?)MAX(C?)SSrm",
1019 "(V?)MIN(C?)SDrm",
1020 "(V?)MIN(C?)SSrm",
1021 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001022 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001023
Craig Topperf846e2d2018-04-19 05:34:05 +00001024def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
1025 let Latency = 8;
1026 let NumMicroOps = 3;
1027 let ResourceCycles = [1,1,1];
1028}
1029def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
1030
1031def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
1032 let Latency = 9;
1033 let NumMicroOps = 5;
1034 let ResourceCycles = [1,1,2,1];
1035}
1036def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
1037
Gadi Haberd76f7b82017-08-28 10:04:16 +00001038def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001039 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001040 let NumMicroOps = 2;
1041 let ResourceCycles = [1,1];
1042}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001043def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1044 "(V?)ANDNPDrm",
1045 "(V?)ANDNPSrm",
1046 "(V?)ANDPDrm",
1047 "(V?)ANDPSrm",
1048 "(V?)INSERTPSrm",
1049 "(V?)ORPDrm",
1050 "(V?)ORPSrm",
1051 "(V?)PACKSSDWrm",
1052 "(V?)PACKSSWBrm",
1053 "(V?)PACKUSDWrm",
1054 "(V?)PACKUSWBrm",
1055 "(V?)PALIGNRrmi",
1056 "(V?)PBLENDWrmi",
1057 "VPERMILPDmi",
1058 "VPERMILPDrm",
1059 "VPERMILPSmi",
1060 "VPERMILPSrm",
1061 "(V?)PSHUFBrm",
1062 "(V?)PSHUFDmi",
1063 "(V?)PSHUFHWmi",
1064 "(V?)PSHUFLWmi",
1065 "(V?)PUNPCKHBWrm",
1066 "(V?)PUNPCKHDQrm",
1067 "(V?)PUNPCKHQDQrm",
1068 "(V?)PUNPCKHWDrm",
1069 "(V?)PUNPCKLBWrm",
1070 "(V?)PUNPCKLDQrm",
1071 "(V?)PUNPCKLQDQrm",
1072 "(V?)PUNPCKLWDrm",
1073 "(V?)SHUFPDrmi",
1074 "(V?)SHUFPSrmi",
1075 "(V?)UNPCKHPDrm",
1076 "(V?)UNPCKHPSrm",
1077 "(V?)UNPCKLPDrm",
1078 "(V?)UNPCKLPSrm",
1079 "(V?)XORPDrm",
1080 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001081
Gadi Haber2cf601f2017-12-08 09:48:44 +00001082def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1083 let Latency = 8;
1084 let NumMicroOps = 2;
1085 let ResourceCycles = [1,1];
1086}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001087def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1088 "VANDNPSYrm",
1089 "VANDPDYrm",
1090 "VANDPSYrm",
1091 "VORPDYrm",
1092 "VORPSYrm",
1093 "VPACKSSDWYrm",
1094 "VPACKSSWBYrm",
1095 "VPACKUSDWYrm",
1096 "VPACKUSWBYrm",
1097 "VPALIGNRYrmi",
1098 "VPBLENDWYrmi",
1099 "VPERMILPDYmi",
1100 "VPERMILPDYrm",
1101 "VPERMILPSYmi",
1102 "VPERMILPSYrm",
1103 "VPMOVSXBDYrm",
1104 "VPMOVSXBQYrm",
1105 "VPMOVSXWQYrm",
1106 "VPSHUFBYrm",
1107 "VPSHUFDYmi",
1108 "VPSHUFHWYmi",
1109 "VPSHUFLWYmi",
1110 "VPUNPCKHBWYrm",
1111 "VPUNPCKHDQYrm",
1112 "VPUNPCKHQDQYrm",
1113 "VPUNPCKHWDYrm",
1114 "VPUNPCKLBWYrm",
1115 "VPUNPCKLDQYrm",
1116 "VPUNPCKLQDQYrm",
1117 "VPUNPCKLWDYrm",
1118 "VSHUFPDYrmi",
1119 "VSHUFPSYrmi",
1120 "VUNPCKHPDYrm",
1121 "VUNPCKHPSYrm",
1122 "VUNPCKLPDYrm",
1123 "VUNPCKLPSYrm",
1124 "VXORPDYrm",
1125 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001126
1127def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1128 let Latency = 6;
1129 let NumMicroOps = 2;
1130 let ResourceCycles = [1,1];
1131}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001132def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1133 "MMX_PINSRWrm",
1134 "MMX_PSHUFBrm",
1135 "MMX_PSHUFWmi",
1136 "MMX_PUNPCKHBWirm",
1137 "MMX_PUNPCKHDQirm",
1138 "MMX_PUNPCKHWDirm",
1139 "MMX_PUNPCKLBWirm",
1140 "MMX_PUNPCKLDQirm",
1141 "MMX_PUNPCKLWDirm",
1142 "(V?)MOVHPDrm",
1143 "(V?)MOVHPSrm",
1144 "(V?)MOVLPDrm",
1145 "(V?)MOVLPSrm",
1146 "(V?)PINSRBrm",
1147 "(V?)PINSRDrm",
1148 "(V?)PINSRQrm",
1149 "(V?)PINSRWrm",
1150 "(V?)PMOVSXBDrm",
1151 "(V?)PMOVSXBQrm",
1152 "(V?)PMOVSXBWrm",
1153 "(V?)PMOVSXDQrm",
1154 "(V?)PMOVSXWDrm",
1155 "(V?)PMOVSXWQrm",
1156 "(V?)PMOVZXBDrm",
1157 "(V?)PMOVZXBQrm",
1158 "(V?)PMOVZXBWrm",
1159 "(V?)PMOVZXDQrm",
1160 "(V?)PMOVZXWDrm",
1161 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001162
Gadi Haberd76f7b82017-08-28 10:04:16 +00001163def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001164 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001165 let NumMicroOps = 2;
1166 let ResourceCycles = [1,1];
1167}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001168def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1169 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001170
1171def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001172 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001173 let NumMicroOps = 2;
1174 let ResourceCycles = [1,1];
1175}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001176def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1177 "RORX(32|64)mi",
1178 "SARX(32|64)rm",
1179 "SHLX(32|64)rm",
1180 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001181
1182def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
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<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1188 "BLSI(32|64)rm",
1189 "BLSMSK(32|64)rm",
1190 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001191 "MMX_PABS(B|D|W)rm",
1192 "MMX_PADD(B|D|Q|W)irm",
1193 "MMX_PADDS(B|W)irm",
1194 "MMX_PADDUS(B|W)irm",
1195 "MMX_PAVG(B|W)irm",
1196 "MMX_PCMPEQ(B|D|W)irm",
1197 "MMX_PCMPGT(B|D|W)irm",
1198 "MMX_P(MAX|MIN)SWirm",
1199 "MMX_P(MAX|MIN)UBirm",
1200 "MMX_PSIGN(B|D|W)rm",
1201 "MMX_PSUB(B|D|Q|W)irm",
1202 "MMX_PSUBS(B|W)irm",
1203 "MMX_PSUBUS(B|W)irm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001204 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001205
1206def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1207 let Latency = 7;
1208 let NumMicroOps = 2;
1209 let ResourceCycles = [1,1];
1210}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001211def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1212 "(V?)PABSDrm",
1213 "(V?)PABSWrm",
1214 "(V?)PADDBrm",
1215 "(V?)PADDDrm",
1216 "(V?)PADDQrm",
1217 "(V?)PADDSBrm",
1218 "(V?)PADDSWrm",
1219 "(V?)PADDUSBrm",
1220 "(V?)PADDUSWrm",
1221 "(V?)PADDWrm",
1222 "(V?)PAVGBrm",
1223 "(V?)PAVGWrm",
1224 "(V?)PCMPEQBrm",
1225 "(V?)PCMPEQDrm",
1226 "(V?)PCMPEQQrm",
1227 "(V?)PCMPEQWrm",
1228 "(V?)PCMPGTBrm",
1229 "(V?)PCMPGTDrm",
1230 "(V?)PCMPGTWrm",
1231 "(V?)PMAXSBrm",
1232 "(V?)PMAXSDrm",
1233 "(V?)PMAXSWrm",
1234 "(V?)PMAXUBrm",
1235 "(V?)PMAXUDrm",
1236 "(V?)PMAXUWrm",
1237 "(V?)PMINSBrm",
1238 "(V?)PMINSDrm",
1239 "(V?)PMINSWrm",
1240 "(V?)PMINUBrm",
1241 "(V?)PMINUDrm",
1242 "(V?)PMINUWrm",
1243 "(V?)PSIGNBrm",
1244 "(V?)PSIGNDrm",
1245 "(V?)PSIGNWrm",
1246 "(V?)PSUBBrm",
1247 "(V?)PSUBDrm",
1248 "(V?)PSUBQrm",
1249 "(V?)PSUBSBrm",
1250 "(V?)PSUBSWrm",
1251 "(V?)PSUBUSBrm",
1252 "(V?)PSUBUSWrm",
1253 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001254
1255def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1256 let Latency = 8;
1257 let NumMicroOps = 2;
1258 let ResourceCycles = [1,1];
1259}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001260def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1261 "VPABSDYrm",
1262 "VPABSWYrm",
1263 "VPADDBYrm",
1264 "VPADDDYrm",
1265 "VPADDQYrm",
1266 "VPADDSBYrm",
1267 "VPADDSWYrm",
1268 "VPADDUSBYrm",
1269 "VPADDUSWYrm",
1270 "VPADDWYrm",
1271 "VPAVGBYrm",
1272 "VPAVGWYrm",
1273 "VPCMPEQBYrm",
1274 "VPCMPEQDYrm",
1275 "VPCMPEQQYrm",
1276 "VPCMPEQWYrm",
1277 "VPCMPGTBYrm",
1278 "VPCMPGTDYrm",
1279 "VPCMPGTWYrm",
1280 "VPMAXSBYrm",
1281 "VPMAXSDYrm",
1282 "VPMAXSWYrm",
1283 "VPMAXUBYrm",
1284 "VPMAXUDYrm",
1285 "VPMAXUWYrm",
1286 "VPMINSBYrm",
1287 "VPMINSDYrm",
1288 "VPMINSWYrm",
1289 "VPMINUBYrm",
1290 "VPMINUDYrm",
1291 "VPMINUWYrm",
1292 "VPSIGNBYrm",
1293 "VPSIGNDYrm",
1294 "VPSIGNWYrm",
1295 "VPSUBBYrm",
1296 "VPSUBDYrm",
1297 "VPSUBQYrm",
1298 "VPSUBSBYrm",
1299 "VPSUBSWYrm",
1300 "VPSUBUSBYrm",
1301 "VPSUBUSWYrm",
1302 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001303
1304def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001305 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001306 let NumMicroOps = 2;
1307 let ResourceCycles = [1,1];
1308}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001309def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1310 "(V?)BLENDPSrmi",
1311 "VINSERTF128rm",
1312 "VINSERTI128rm",
1313 "(V?)PANDNrm",
1314 "(V?)PANDrm",
1315 "VPBLENDDrmi",
1316 "(V?)PORrm",
1317 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001318
Gadi Haber2cf601f2017-12-08 09:48:44 +00001319def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1320 let Latency = 6;
1321 let NumMicroOps = 2;
1322 let ResourceCycles = [1,1];
1323}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001324def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1325 "MMX_PANDirm",
1326 "MMX_PORirm",
1327 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001328
1329def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1330 let Latency = 8;
1331 let NumMicroOps = 2;
1332 let ResourceCycles = [1,1];
1333}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001334def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1335 "VBLENDPSYrmi",
1336 "VPANDNYrm",
1337 "VPANDYrm",
1338 "VPBLENDDYrmi",
1339 "VPORYrm",
1340 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001341
Gadi Haberd76f7b82017-08-28 10:04:16 +00001342def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001343 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001344 let NumMicroOps = 2;
1345 let ResourceCycles = [1,1];
1346}
Craig Topper2d451e72018-03-18 08:38:06 +00001347def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001348def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001349
1350def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001351 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
1355def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1356
1357def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001358 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001359 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001360 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001361}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001362def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1363 "(V?)PEXTRBmr",
1364 "(V?)PEXTRDmr",
1365 "(V?)PEXTRQmr",
1366 "(V?)PEXTRWmr",
1367 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001368
Gadi Haberd76f7b82017-08-28 10:04:16 +00001369def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001370 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001371 let NumMicroOps = 3;
1372 let ResourceCycles = [1,1,1];
1373}
1374def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001375
Gadi Haberd76f7b82017-08-28 10:04:16 +00001376def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001377 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001378 let NumMicroOps = 3;
1379 let ResourceCycles = [1,1,1];
1380}
1381def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1382
1383def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001384 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001385 let NumMicroOps = 3;
1386 let ResourceCycles = [1,1,1];
1387}
1388def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1389
1390def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001391 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392 let NumMicroOps = 3;
1393 let ResourceCycles = [1,1,1];
1394}
Craig Topper2d451e72018-03-18 08:38:06 +00001395def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001396def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1397 "PUSH64i8",
1398 "STOSB",
1399 "STOSL",
1400 "STOSQ",
1401 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001402
1403def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001404 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001405 let NumMicroOps = 4;
1406 let ResourceCycles = [1,1,1,1];
1407}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001408def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1409 "BTR(16|32|64)mi8",
1410 "BTS(16|32|64)mi8",
1411 "SAR(8|16|32|64)m1",
1412 "SAR(8|16|32|64)mi",
1413 "SHL(8|16|32|64)m1",
1414 "SHL(8|16|32|64)mi",
1415 "SHR(8|16|32|64)m1",
1416 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001417
1418def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001419 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001420 let NumMicroOps = 4;
1421 let ResourceCycles = [1,1,1,1];
1422}
Craig Topperf0d04262018-04-06 16:16:48 +00001423def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1424 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001425
1426def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001427 let Latency = 2;
1428 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001429 let ResourceCycles = [2];
1430}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001431def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1432 "BLENDVPSrr0",
1433 "MMX_PINSRWrr",
1434 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001435 "VBLENDVPD(Y?)rr",
1436 "VBLENDVPS(Y?)rr",
1437 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001438 "(V?)PINSRBrr",
1439 "(V?)PINSRDrr",
1440 "(V?)PINSRQrr",
1441 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001442
Gadi Haberd76f7b82017-08-28 10:04:16 +00001443def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1444 let Latency = 2;
1445 let NumMicroOps = 2;
1446 let ResourceCycles = [2];
1447}
1448def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1449
1450def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1451 let Latency = 2;
1452 let NumMicroOps = 2;
1453 let ResourceCycles = [2];
1454}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001455def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1456 "ROL(8|16|32|64)ri",
1457 "ROR(8|16|32|64)r1",
1458 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001459
1460def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1461 let Latency = 2;
1462 let NumMicroOps = 2;
1463 let ResourceCycles = [2];
1464}
1465def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1466def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1467def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1468def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1469
1470def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1471 let Latency = 2;
1472 let NumMicroOps = 2;
1473 let ResourceCycles = [1,1];
1474}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001475def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1476 "VCVTPH2PSYrr",
1477 "VCVTPH2PSrr",
1478 "(V?)CVTPS2PDrr",
1479 "(V?)CVTSS2SDrr",
1480 "(V?)EXTRACTPSrr",
1481 "(V?)PEXTRBrr",
1482 "(V?)PEXTRDrr",
1483 "(V?)PEXTRQrr",
1484 "(V?)PEXTRWrr",
1485 "(V?)PSLLDrr",
1486 "(V?)PSLLQrr",
1487 "(V?)PSLLWrr",
1488 "(V?)PSRADrr",
1489 "(V?)PSRAWrr",
1490 "(V?)PSRLDrr",
1491 "(V?)PSRLQrr",
1492 "(V?)PSRLWrr",
1493 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001494
1495def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1496 let Latency = 2;
1497 let NumMicroOps = 2;
1498 let ResourceCycles = [1,1];
1499}
1500def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1501
1502def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1503 let Latency = 2;
1504 let NumMicroOps = 2;
1505 let ResourceCycles = [1,1];
1506}
1507def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1508
1509def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1510 let Latency = 2;
1511 let NumMicroOps = 2;
1512 let ResourceCycles = [1,1];
1513}
Craig Topper498875f2018-04-04 17:54:19 +00001514def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1515
1516def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1517 let Latency = 1;
1518 let NumMicroOps = 1;
1519 let ResourceCycles = [1];
1520}
1521def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001522
1523def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1524 let Latency = 2;
1525 let NumMicroOps = 2;
1526 let ResourceCycles = [1,1];
1527}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001528def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1529def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1530 "ADC(8|16|32|64)rr",
1531 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001532 "SBB(8|16|32|64)ri",
1533 "SBB(8|16|32|64)rr",
1534 "SBB(8|16|32|64)i",
1535 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001536
1537def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001538 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001539 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001540 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001541}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001542def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1543 "BLENDVPSrm0",
1544 "PBLENDVBrm0",
1545 "VBLENDVPDrm",
1546 "VBLENDVPSrm",
1547 "VMASKMOVPDrm",
1548 "VMASKMOVPSrm",
1549 "VPBLENDVBrm",
1550 "VPMASKMOVDrm",
1551 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001552
Gadi Haber2cf601f2017-12-08 09:48:44 +00001553def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1554 let Latency = 9;
1555 let NumMicroOps = 3;
1556 let ResourceCycles = [2,1];
1557}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001558def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1559 "VBLENDVPSYrm",
1560 "VMASKMOVPDYrm",
1561 "VMASKMOVPSYrm",
1562 "VPBLENDVBYrm",
1563 "VPMASKMOVDYrm",
1564 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001565
1566def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1567 let Latency = 7;
1568 let NumMicroOps = 3;
1569 let ResourceCycles = [2,1];
1570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001571def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1572 "MMX_PACKSSWBirm",
1573 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001574
Gadi Haberd76f7b82017-08-28 10:04:16 +00001575def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001576 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001577 let NumMicroOps = 3;
1578 let ResourceCycles = [1,2];
1579}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001580def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1581 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001582
1583def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001584 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001585 let NumMicroOps = 3;
1586 let ResourceCycles = [1,1,1];
1587}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001588def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1589 "(V?)PSLLQrm",
1590 "(V?)PSLLWrm",
1591 "(V?)PSRADrm",
1592 "(V?)PSRAWrm",
1593 "(V?)PSRLDrm",
1594 "(V?)PSRLQrm",
1595 "(V?)PSRLWrm",
1596 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001597
1598def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001599 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001600 let NumMicroOps = 3;
1601 let ResourceCycles = [1,1,1];
1602}
1603def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1604
1605def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001606 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607 let NumMicroOps = 3;
1608 let ResourceCycles = [1,1,1];
1609}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001610def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001611
1612def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001613 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001614 let NumMicroOps = 3;
1615 let ResourceCycles = [1,1,1];
1616}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001617def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1618 "RETL",
1619 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620
Gadi Haberd76f7b82017-08-28 10:04:16 +00001621def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001622 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001623 let NumMicroOps = 3;
1624 let ResourceCycles = [1,1,1];
1625}
Craig Topperc50570f2018-04-06 17:12:18 +00001626def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1627 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001628
1629def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001630 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001631 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001632 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001633}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001634def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001635
Gadi Haberd76f7b82017-08-28 10:04:16 +00001636def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001637 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001638 let NumMicroOps = 4;
1639 let ResourceCycles = [1,1,1,1];
1640}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001641def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1642 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001643
1644def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001645 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001646 let NumMicroOps = 5;
1647 let ResourceCycles = [1,1,1,2];
1648}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001649def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1650 "ROL(8|16|32|64)mi",
1651 "ROR(8|16|32|64)m1",
1652 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001653
1654def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001655 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001656 let NumMicroOps = 5;
1657 let ResourceCycles = [1,1,1,2];
1658}
Craig Topper13a16502018-03-19 00:56:09 +00001659def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001660
1661def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001662 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001663 let NumMicroOps = 5;
1664 let ResourceCycles = [1,1,1,1,1];
1665}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001666def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1667 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001668
Gadi Haberd76f7b82017-08-28 10:04:16 +00001669def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1670 let Latency = 3;
1671 let NumMicroOps = 1;
1672 let ResourceCycles = [1];
1673}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001674def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1675 "ADD_FST0r",
1676 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001677 "MMX_CVTPI2PSirr",
1678 "PDEP(32|64)rr",
1679 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001680 "SHLD(16|32|64)rri8",
1681 "SHRD(16|32|64)rri8",
1682 "SUBR_FPrST0",
1683 "SUBR_FST0r",
1684 "SUBR_FrST0",
1685 "SUB_FPrST0",
1686 "SUB_FST0r",
1687 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001688 "(V?)ADDPD(Y?)rr",
1689 "(V?)ADDPS(Y?)rr",
1690 "(V?)ADDSDrr",
1691 "(V?)ADDSSrr",
1692 "(V?)ADDSUBPD(Y?)rr",
1693 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001694 "(V?)CVTDQ2PS(Y?)rr",
1695 "(V?)CVTPS2DQ(Y?)rr",
1696 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001697 "(V?)SUBPD(Y?)rr",
1698 "(V?)SUBPS(Y?)rr",
1699 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001700 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001701
Clement Courbet327fac42018-03-07 08:14:02 +00001702def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001703 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001704 let NumMicroOps = 2;
1705 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001706}
Clement Courbet327fac42018-03-07 08:14:02 +00001707def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001708
1709def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1710 let Latency = 3;
1711 let NumMicroOps = 1;
1712 let ResourceCycles = [1];
1713}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001714def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1715 "VBROADCASTSSYrr",
1716 "VEXTRACTF128rr",
1717 "VEXTRACTI128rr",
1718 "VINSERTF128rr",
1719 "VINSERTI128rr",
1720 "VPBROADCASTBYrr",
1721 "VPBROADCASTBrr",
1722 "VPBROADCASTDYrr",
1723 "VPBROADCASTQYrr",
1724 "VPBROADCASTWYrr",
1725 "VPBROADCASTWrr",
1726 "VPERM2F128rr",
1727 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001728 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001729 "VPERMQYri",
1730 "VPMOVSXBDYrr",
1731 "VPMOVSXBQYrr",
1732 "VPMOVSXBWYrr",
1733 "VPMOVSXDQYrr",
1734 "VPMOVSXWDYrr",
1735 "VPMOVSXWQYrr",
1736 "VPMOVZXBDYrr",
1737 "VPMOVZXBQYrr",
1738 "VPMOVZXBWYrr",
1739 "VPMOVZXDQYrr",
1740 "VPMOVZXWDYrr",
1741 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001742
1743def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001744 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001745 let NumMicroOps = 2;
1746 let ResourceCycles = [1,1];
1747}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001748def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1749 "(V?)ADDPSrm",
1750 "(V?)ADDSUBPDrm",
1751 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001752 "(V?)CVTDQ2PSrm",
1753 "(V?)CVTPS2DQrm",
1754 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001755 "(V?)SUBPDrm",
1756 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001757
Gadi Haber2cf601f2017-12-08 09:48:44 +00001758def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1759 let Latency = 10;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001762}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001763def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1764 "ADD_F64m",
1765 "ILD_F16m",
1766 "ILD_F32m",
1767 "ILD_F64m",
1768 "SUBR_F32m",
1769 "SUBR_F64m",
1770 "SUB_F32m",
1771 "SUB_F64m",
1772 "VADDPDYrm",
1773 "VADDPSYrm",
1774 "VADDSUBPDYrm",
1775 "VADDSUBPSYrm",
1776 "VCMPPDYrmi",
1777 "VCMPPSYrmi",
1778 "VCVTDQ2PSYrm",
1779 "VCVTPS2DQYrm",
1780 "VCVTTPS2DQYrm",
1781 "VMAX(C?)PDYrm",
1782 "VMAX(C?)PSYrm",
1783 "VMIN(C?)PDYrm",
1784 "VMIN(C?)PSYrm",
1785 "VSUBPDYrm",
1786 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001787
1788def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001789 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001790 let NumMicroOps = 2;
1791 let ResourceCycles = [1,1];
1792}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001793def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1794 "VPERM2I128rm",
1795 "VPERMDYrm",
1796 "VPERMPDYmi",
1797 "VPERMPSYrm",
1798 "VPERMQYmi",
1799 "VPMOVZXBDYrm",
1800 "VPMOVZXBQYrm",
1801 "VPMOVZXBWYrm",
1802 "VPMOVZXDQYrm",
1803 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001804
Gadi Haber2cf601f2017-12-08 09:48:44 +00001805def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1806 let Latency = 9;
1807 let NumMicroOps = 2;
1808 let ResourceCycles = [1,1];
1809}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001810def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1811 "VPMOVSXDQYrm",
1812 "VPMOVSXWDYrm",
1813 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001814
Gadi Haberd76f7b82017-08-28 10:04:16 +00001815def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001816 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001817 let NumMicroOps = 3;
1818 let ResourceCycles = [3];
1819}
Craig Topperb5f26592018-04-19 18:00:17 +00001820def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1821 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1822 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823
1824def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1825 let Latency = 3;
1826 let NumMicroOps = 3;
1827 let ResourceCycles = [2,1];
1828}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001829def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1830 "VPSRAVD(Y?)rr",
1831 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001832
1833def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1834 let Latency = 3;
1835 let NumMicroOps = 3;
1836 let ResourceCycles = [2,1];
1837}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001838def: InstRW<[HWWriteResGroup56], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001839 "(V?)PHADDD(Y?)rr",
1840 "(V?)PHADDSW(Y?)rr",
1841 "(V?)PHADDW(Y?)rr",
1842 "(V?)PHSUBD(Y?)rr",
1843 "(V?)PHSUBSW(Y?)rr",
1844 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001845
1846def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1847 let Latency = 3;
1848 let NumMicroOps = 3;
1849 let ResourceCycles = [2,1];
1850}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001851def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1852 "MMX_PACKSSWBirr",
1853 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001854
1855def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1856 let Latency = 3;
1857 let NumMicroOps = 3;
1858 let ResourceCycles = [1,2];
1859}
1860def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1861
1862def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1863 let Latency = 3;
1864 let NumMicroOps = 3;
1865 let ResourceCycles = [1,2];
1866}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001867def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1868 "RCL(8|16|32|64)r1",
1869 "RCL(8|16|32|64)ri",
1870 "RCR(8|16|32|64)r1",
1871 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001872
1873def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1874 let Latency = 3;
1875 let NumMicroOps = 3;
1876 let ResourceCycles = [2,1];
1877}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001878def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1879 "ROR(8|16|32|64)rCL",
1880 "SAR(8|16|32|64)rCL",
1881 "SHL(8|16|32|64)rCL",
1882 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001883
1884def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001885 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001886 let NumMicroOps = 3;
1887 let ResourceCycles = [1,1,1];
1888}
1889def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1890
1891def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001892 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001893 let NumMicroOps = 3;
1894 let ResourceCycles = [1,1,1];
1895}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001896def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1897 "ISTT_FP32m",
1898 "ISTT_FP64m",
1899 "IST_F16m",
1900 "IST_F32m",
1901 "IST_FP16m",
1902 "IST_FP32m",
1903 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001904
1905def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001906 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001907 let NumMicroOps = 4;
1908 let ResourceCycles = [2,1,1];
1909}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001910def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1911 "VPSRAVDYrm",
1912 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001913
1914def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1915 let Latency = 9;
1916 let NumMicroOps = 4;
1917 let ResourceCycles = [2,1,1];
1918}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001919def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1920 "VPSRAVDrm",
1921 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001922
1923def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001924 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001925 let NumMicroOps = 4;
1926 let ResourceCycles = [2,1,1];
1927}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001928def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001929
1930def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1931 let Latency = 10;
1932 let NumMicroOps = 4;
1933 let ResourceCycles = [2,1,1];
1934}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001935def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1936 "VPHADDSWYrm",
1937 "VPHADDWYrm",
1938 "VPHSUBDYrm",
1939 "VPHSUBSWYrm",
1940 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001941
1942def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1943 let Latency = 9;
1944 let NumMicroOps = 4;
1945 let ResourceCycles = [2,1,1];
1946}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001947def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1948 "(V?)PHADDSWrm",
1949 "(V?)PHADDWrm",
1950 "(V?)PHSUBDrm",
1951 "(V?)PHSUBSWrm",
1952 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001953
1954def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001955 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001956 let NumMicroOps = 4;
1957 let ResourceCycles = [1,1,2];
1958}
Craig Topperf4cd9082018-01-19 05:47:32 +00001959def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001960
1961def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001962 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963 let NumMicroOps = 5;
1964 let ResourceCycles = [1,1,1,2];
1965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001966def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1967 "RCL(8|16|32|64)mi",
1968 "RCR(8|16|32|64)m1",
1969 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001970
1971def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001972 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001973 let NumMicroOps = 5;
1974 let ResourceCycles = [1,1,2,1];
1975}
Craig Topper13a16502018-03-19 00:56:09 +00001976def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001977
1978def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001979 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001980 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001981 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001982}
Craig Topper9f834812018-04-01 21:54:24 +00001983def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001984
Gadi Haberd76f7b82017-08-28 10:04:16 +00001985def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001986 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001987 let NumMicroOps = 6;
1988 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001989}
Craig Topper9f834812018-04-01 21:54:24 +00001990def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001991 "CMPXCHG(8|16|32|64)rm",
1992 "ROL(8|16|32|64)mCL",
1993 "SAR(8|16|32|64)mCL",
1994 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001995 "SHL(8|16|32|64)mCL",
1996 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001997def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1998 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001999
Gadi Haberd76f7b82017-08-28 10:04:16 +00002000def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2001 let Latency = 4;
2002 let NumMicroOps = 2;
2003 let ResourceCycles = [1,1];
2004}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002005def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2006 "(V?)CVTSD2SIrr",
2007 "(V?)CVTSS2SI64rr",
2008 "(V?)CVTSS2SIrr",
2009 "(V?)CVTTSD2SI64rr",
2010 "(V?)CVTTSD2SIrr",
2011 "(V?)CVTTSS2SI64rr",
2012 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002013
2014def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2015 let Latency = 4;
2016 let NumMicroOps = 2;
2017 let ResourceCycles = [1,1];
2018}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002019def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2020 "VPSLLDYrr",
2021 "VPSLLQYrr",
2022 "VPSLLWYrr",
2023 "VPSRADYrr",
2024 "VPSRAWYrr",
2025 "VPSRLDYrr",
2026 "VPSRLQYrr",
2027 "VPSRLWYrr",
2028 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002029
2030def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2031 let Latency = 4;
2032 let NumMicroOps = 2;
2033 let ResourceCycles = [1,1];
2034}
2035def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2036
2037def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2038 let Latency = 4;
2039 let NumMicroOps = 2;
2040 let ResourceCycles = [1,1];
2041}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002042def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2043 "MMX_CVTPI2PDirr",
2044 "MMX_CVTPS2PIirr",
2045 "MMX_CVTTPD2PIirr",
2046 "MMX_CVTTPS2PIirr",
2047 "(V?)CVTDQ2PDrr",
2048 "(V?)CVTPD2DQrr",
2049 "(V?)CVTPD2PSrr",
2050 "VCVTPS2PHrr",
2051 "(V?)CVTSD2SSrr",
2052 "(V?)CVTSI642SDrr",
2053 "(V?)CVTSI2SDrr",
2054 "(V?)CVTSI2SSrr",
2055 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002056
2057def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2058 let Latency = 4;
2059 let NumMicroOps = 2;
2060 let ResourceCycles = [1,1];
2061}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002062def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002063
Craig Topperf846e2d2018-04-19 05:34:05 +00002064def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002065 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002066 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00002067 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002068}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002069def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002070
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002072 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002073 let NumMicroOps = 3;
2074 let ResourceCycles = [2,1];
2075}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002076def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2077 "FICOM32m",
2078 "FICOMP16m",
2079 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002080
2081def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002082 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002083 let NumMicroOps = 3;
2084 let ResourceCycles = [1,1,1];
2085}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002086def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2087 "(V?)CVTSD2SIrm",
2088 "(V?)CVTSS2SI64rm",
2089 "(V?)CVTSS2SIrm",
2090 "(V?)CVTTSD2SI64rm",
2091 "(V?)CVTTSD2SIrm",
2092 "VCVTTSS2SI64rm",
2093 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002094
2095def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002096 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002097 let NumMicroOps = 3;
2098 let ResourceCycles = [1,1,1];
2099}
2100def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002101
2102def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2103 let Latency = 11;
2104 let NumMicroOps = 3;
2105 let ResourceCycles = [1,1,1];
2106}
2107def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002108
2109def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002110 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002111 let NumMicroOps = 3;
2112 let ResourceCycles = [1,1,1];
2113}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002114def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2115 "CVTPD2PSrm",
2116 "CVTTPD2DQrm",
2117 "MMX_CVTPD2PIirm",
2118 "MMX_CVTTPD2PIirm",
2119 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002120
2121def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2122 let Latency = 9;
2123 let NumMicroOps = 3;
2124 let ResourceCycles = [1,1,1];
2125}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002126def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2127 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002128
2129def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002130 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002131 let NumMicroOps = 3;
2132 let ResourceCycles = [1,1,1];
2133}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002134def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002135
2136def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002137 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002138 let NumMicroOps = 3;
2139 let ResourceCycles = [1,1,1];
2140}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002141def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2142 "VPBROADCASTBrm",
2143 "VPBROADCASTWYrm",
2144 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145
2146def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2147 let Latency = 4;
2148 let NumMicroOps = 4;
2149 let ResourceCycles = [4];
2150}
2151def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2152
2153def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2154 let Latency = 4;
2155 let NumMicroOps = 4;
2156 let ResourceCycles = [1,3];
2157}
2158def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2159
2160def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2161 let Latency = 4;
2162 let NumMicroOps = 4;
2163 let ResourceCycles = [1,1,2];
2164}
2165def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2166
2167def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002168 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002169 let NumMicroOps = 4;
2170 let ResourceCycles = [1,1,1,1];
2171}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002172def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2173 "VMASKMOVPS(Y?)mr",
2174 "VPMASKMOVD(Y?)mr",
2175 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002176
2177def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002178 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002179 let NumMicroOps = 4;
2180 let ResourceCycles = [1,1,1,1];
2181}
2182def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2183
2184def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002185 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186 let NumMicroOps = 4;
2187 let ResourceCycles = [1,1,1,1];
2188}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002189def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2190 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002191
2192def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002193 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002194 let NumMicroOps = 5;
2195 let ResourceCycles = [1,2,1,1];
2196}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002197def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2198 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002199
2200def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002201 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002202 let NumMicroOps = 6;
2203 let ResourceCycles = [1,1,4];
2204}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002205def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2206 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002207
2208def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002209 let Latency = 5;
2210 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002211 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002212}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002213def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2214 "MMX_PMADDWDirr",
2215 "MMX_PMULHRSWrr",
2216 "MMX_PMULHUWirr",
2217 "MMX_PMULHWirr",
2218 "MMX_PMULLWirr",
2219 "MMX_PMULUDQirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002220 "MUL_FPrST0",
2221 "MUL_FST0r",
2222 "MUL_FrST0",
2223 "(V?)PCMPGTQ(Y?)rr",
2224 "(V?)PHMINPOSUWrr",
2225 "(V?)PMADDUBSW(Y?)rr",
2226 "(V?)PMADDWD(Y?)rr",
2227 "(V?)PMULDQ(Y?)rr",
2228 "(V?)PMULHRSW(Y?)rr",
2229 "(V?)PMULHUW(Y?)rr",
2230 "(V?)PMULHW(Y?)rr",
2231 "(V?)PMULLW(Y?)rr",
2232 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002233 "(V?)RCPPSr",
2234 "(V?)RCPSSr",
2235 "(V?)RSQRTPSr",
2236 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002237
Gadi Haberd76f7b82017-08-28 10:04:16 +00002238def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002239 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002240 let NumMicroOps = 1;
2241 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002243def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2244 "(V?)MULPS(Y?)rr",
2245 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00002246 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002247
Gadi Haberd76f7b82017-08-28 10:04:16 +00002248def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002249 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002250 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002251 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002252}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002253def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2254 "MMX_PMADDWDirm",
2255 "MMX_PMULHRSWrm",
2256 "MMX_PMULHUWirm",
2257 "MMX_PMULHWirm",
2258 "MMX_PMULLWirm",
2259 "MMX_PMULUDQirm",
2260 "MMX_PSADBWirm",
2261 "(V?)RCPSSm",
2262 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002263
Craig Topper8104f262018-04-02 05:33:28 +00002264def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002265 let Latency = 16;
2266 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002267 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002268}
2269def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2270
Craig Topper8104f262018-04-02 05:33:28 +00002271def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002272 let Latency = 18;
2273 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002274 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002275}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002276def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002277
2278def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2279 let Latency = 11;
2280 let NumMicroOps = 2;
2281 let ResourceCycles = [1,1];
2282}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002283def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2284 "(V?)PHMINPOSUWrm",
2285 "(V?)PMADDUBSWrm",
2286 "(V?)PMADDWDrm",
2287 "(V?)PMULDQrm",
2288 "(V?)PMULHRSWrm",
2289 "(V?)PMULHUWrm",
2290 "(V?)PMULHWrm",
2291 "(V?)PMULLWrm",
2292 "(V?)PMULUDQrm",
2293 "(V?)PSADBWrm",
2294 "(V?)RCPPSm",
2295 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002296
2297def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2298 let Latency = 12;
2299 let NumMicroOps = 2;
2300 let ResourceCycles = [1,1];
2301}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002302def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2303 "MUL_F64m",
2304 "VPCMPGTQYrm",
2305 "VPMADDUBSWYrm",
2306 "VPMADDWDYrm",
2307 "VPMULDQYrm",
2308 "VPMULHRSWYrm",
2309 "VPMULHUWYrm",
2310 "VPMULHWYrm",
2311 "VPMULLWYrm",
2312 "VPMULUDQYrm",
2313 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002314
Gadi Haberd76f7b82017-08-28 10:04:16 +00002315def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002316 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002317 let NumMicroOps = 2;
2318 let ResourceCycles = [1,1];
2319}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002320def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2321 "(V?)MULPSrm",
2322 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002323
2324def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2325 let Latency = 12;
2326 let NumMicroOps = 2;
2327 let ResourceCycles = [1,1];
2328}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002329def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2330 "VMULPSYrm",
2331 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002332
2333def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2334 let Latency = 10;
2335 let NumMicroOps = 2;
2336 let ResourceCycles = [1,1];
2337}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002338def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2339 "(V?)MULSSrm",
2340 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002341
2342def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2343 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002344 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002345 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002346}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002347def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2348 "(V?)HADDPD(Y?)rr",
2349 "(V?)HADDPS(Y?)rr",
2350 "(V?)HSUBPD(Y?)rr",
2351 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002352
Gadi Haberd76f7b82017-08-28 10:04:16 +00002353def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2354 let Latency = 5;
2355 let NumMicroOps = 3;
2356 let ResourceCycles = [1,1,1];
2357}
2358def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2359
2360def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002361 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002362 let NumMicroOps = 3;
2363 let ResourceCycles = [1,1,1];
2364}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002365def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002366
2367def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002368 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002369 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002370 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002371}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002372def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2373 "(V?)HADDPSrm",
2374 "(V?)HSUBPDrm",
2375 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002376
Gadi Haber2cf601f2017-12-08 09:48:44 +00002377def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2378 let Latency = 12;
2379 let NumMicroOps = 4;
2380 let ResourceCycles = [1,2,1];
2381}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002382def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2383 "VHADDPSYrm",
2384 "VHSUBPDYrm",
2385 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002386
Gadi Haberd76f7b82017-08-28 10:04:16 +00002387def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002388 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002389 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002391}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002392def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002393
Gadi Haberd76f7b82017-08-28 10:04:16 +00002394def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002395 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002396 let NumMicroOps = 4;
2397 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002398}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002399def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002400
Gadi Haberd76f7b82017-08-28 10:04:16 +00002401def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2402 let Latency = 5;
2403 let NumMicroOps = 5;
2404 let ResourceCycles = [1,4];
2405}
2406def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2407
2408def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2409 let Latency = 5;
2410 let NumMicroOps = 5;
2411 let ResourceCycles = [1,4];
2412}
2413def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2414
2415def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2416 let Latency = 5;
2417 let NumMicroOps = 5;
2418 let ResourceCycles = [2,3];
2419}
Craig Topper13a16502018-03-19 00:56:09 +00002420def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002421
2422def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2423 let Latency = 6;
2424 let NumMicroOps = 2;
2425 let ResourceCycles = [1,1];
2426}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002427def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2428 "VCVTPD2DQYrr",
2429 "VCVTPD2PSYrr",
2430 "VCVTPS2PHYrr",
2431 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432
2433def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002434 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002435 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002436 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002437}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002438def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2439 "ADD_FI32m",
2440 "SUBR_FI16m",
2441 "SUBR_FI32m",
2442 "SUB_FI16m",
2443 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002444 "VROUNDPDYm",
2445 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002446
Gadi Haber2cf601f2017-12-08 09:48:44 +00002447def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2448 let Latency = 12;
2449 let NumMicroOps = 3;
2450 let ResourceCycles = [2,1];
2451}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002452def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2453 "(V?)ROUNDPSm",
2454 "(V?)ROUNDSDm",
2455 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002456
Gadi Haberd76f7b82017-08-28 10:04:16 +00002457def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002458 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002459 let NumMicroOps = 3;
2460 let ResourceCycles = [1,1,1];
2461}
2462def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2463
2464def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2465 let Latency = 6;
2466 let NumMicroOps = 4;
2467 let ResourceCycles = [1,1,2];
2468}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002469def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2470 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002471
2472def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002473 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474 let NumMicroOps = 4;
2475 let ResourceCycles = [1,1,1,1];
2476}
2477def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2478
2479def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2480 let Latency = 6;
2481 let NumMicroOps = 4;
2482 let ResourceCycles = [1,1,1,1];
2483}
2484def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2485
2486def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2487 let Latency = 6;
2488 let NumMicroOps = 6;
2489 let ResourceCycles = [1,5];
2490}
2491def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2492
2493def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002494 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002495 let NumMicroOps = 6;
2496 let ResourceCycles = [1,1,1,1,2];
2497}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002498def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2499 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002500
Gadi Haberd76f7b82017-08-28 10:04:16 +00002501def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2502 let Latency = 7;
2503 let NumMicroOps = 3;
2504 let ResourceCycles = [1,2];
2505}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002506def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002507
2508def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002509 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002510 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002511 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002512}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002513def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002514
Gadi Haber2cf601f2017-12-08 09:48:44 +00002515def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2516 let Latency = 14;
2517 let NumMicroOps = 4;
2518 let ResourceCycles = [1,2,1];
2519}
2520def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2521
Gadi Haberd76f7b82017-08-28 10:04:16 +00002522def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2523 let Latency = 7;
2524 let NumMicroOps = 7;
2525 let ResourceCycles = [2,2,1,2];
2526}
Craig Topper2d451e72018-03-18 08:38:06 +00002527def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002528
2529def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002530 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002531 let NumMicroOps = 3;
2532 let ResourceCycles = [1,1,1];
2533}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002534def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2535 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002536
2537def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2538 let Latency = 9;
2539 let NumMicroOps = 3;
2540 let ResourceCycles = [1,1,1];
2541}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002542def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002543
2544def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002545 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002546 let NumMicroOps = 4;
2547 let ResourceCycles = [1,1,1,1];
2548}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002549def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002550
Gadi Haber2cf601f2017-12-08 09:48:44 +00002551def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2552 let Latency = 17;
2553 let NumMicroOps = 3;
2554 let ResourceCycles = [2,1];
2555}
2556def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2557
Gadi Haberd76f7b82017-08-28 10:04:16 +00002558def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002559 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002560 let NumMicroOps = 10;
2561 let ResourceCycles = [1,1,1,4,1,2];
2562}
Craig Topper13a16502018-03-19 00:56:09 +00002563def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002564
Craig Topper8104f262018-04-02 05:33:28 +00002565def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002566 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002567 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002568 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002569}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002570def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2571 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002572
Gadi Haberd76f7b82017-08-28 10:04:16 +00002573def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2574 let Latency = 11;
2575 let NumMicroOps = 3;
2576 let ResourceCycles = [2,1];
2577}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002578def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2579 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002580
Gadi Haberd76f7b82017-08-28 10:04:16 +00002581def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002582 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002583 let NumMicroOps = 4;
2584 let ResourceCycles = [2,1,1];
2585}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002586def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2587 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002588
2589def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2590 let Latency = 11;
2591 let NumMicroOps = 7;
2592 let ResourceCycles = [2,2,3];
2593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002594def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2595 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002596
2597def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2598 let Latency = 11;
2599 let NumMicroOps = 9;
2600 let ResourceCycles = [1,4,1,3];
2601}
2602def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2603
2604def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2605 let Latency = 11;
2606 let NumMicroOps = 11;
2607 let ResourceCycles = [2,9];
2608}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002609def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002610
2611def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002612 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002613 let NumMicroOps = 14;
2614 let ResourceCycles = [1,1,1,4,2,5];
2615}
2616def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2617
Craig Topper8104f262018-04-02 05:33:28 +00002618def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002619 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002620 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002621 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002622}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002623def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2624 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002625
Craig Topper8104f262018-04-02 05:33:28 +00002626def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002627 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002628 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002629 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002630}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002631def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002632
2633def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002634 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002635 let NumMicroOps = 11;
2636 let ResourceCycles = [2,1,1,3,1,3];
2637}
Craig Topper13a16502018-03-19 00:56:09 +00002638def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002639
Craig Topper8104f262018-04-02 05:33:28 +00002640def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002641 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002642 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002643 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002644}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002645def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002646
Gadi Haberd76f7b82017-08-28 10:04:16 +00002647def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2648 let Latency = 14;
2649 let NumMicroOps = 4;
2650 let ResourceCycles = [2,1,1];
2651}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002652def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002653
2654def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002655 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656 let NumMicroOps = 5;
2657 let ResourceCycles = [2,1,1,1];
2658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002659def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002660
Gadi Haber2cf601f2017-12-08 09:48:44 +00002661def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2662 let Latency = 21;
2663 let NumMicroOps = 5;
2664 let ResourceCycles = [2,1,1,1];
2665}
2666def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2667
Gadi Haberd76f7b82017-08-28 10:04:16 +00002668def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2669 let Latency = 14;
2670 let NumMicroOps = 10;
2671 let ResourceCycles = [2,3,1,4];
2672}
2673def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2674
2675def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002676 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002677 let NumMicroOps = 15;
2678 let ResourceCycles = [1,14];
2679}
2680def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2681
2682def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002683 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002684 let NumMicroOps = 8;
2685 let ResourceCycles = [1,1,1,1,1,1,2];
2686}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002687def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2688 "INSL",
2689 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002690
2691def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2692 let Latency = 16;
2693 let NumMicroOps = 16;
2694 let ResourceCycles = [16];
2695}
2696def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2697
2698def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002699 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002700 let NumMicroOps = 19;
2701 let ResourceCycles = [2,1,4,1,1,4,6];
2702}
2703def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2704
2705def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2706 let Latency = 17;
2707 let NumMicroOps = 15;
2708 let ResourceCycles = [2,1,2,4,2,4];
2709}
2710def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2711
Gadi Haberd76f7b82017-08-28 10:04:16 +00002712def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2713 let Latency = 18;
2714 let NumMicroOps = 8;
2715 let ResourceCycles = [1,1,1,5];
2716}
2717def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002718def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002719
Gadi Haberd76f7b82017-08-28 10:04:16 +00002720def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002721 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722 let NumMicroOps = 19;
2723 let ResourceCycles = [3,1,15];
2724}
Craig Topper391c6f92017-12-10 01:24:08 +00002725def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002726
Gadi Haberd76f7b82017-08-28 10:04:16 +00002727def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2728 let Latency = 20;
2729 let NumMicroOps = 1;
2730 let ResourceCycles = [1];
2731}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002732def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2733 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002734 "DIV_FrST0")>;
2735
2736def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2737 let Latency = 20;
2738 let NumMicroOps = 1;
2739 let ResourceCycles = [1,14];
2740}
2741def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2742 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002743
2744def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002745 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002746 let NumMicroOps = 2;
2747 let ResourceCycles = [1,1];
2748}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002749def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002750 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002751
Craig Topper8104f262018-04-02 05:33:28 +00002752def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002753 let Latency = 26;
2754 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002755 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002756}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002757def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002758
Craig Topper8104f262018-04-02 05:33:28 +00002759def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002760 let Latency = 21;
2761 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002762 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002763}
2764def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2765
Craig Topper8104f262018-04-02 05:33:28 +00002766def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002767 let Latency = 22;
2768 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002769 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002770}
2771def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2772
Craig Topper8104f262018-04-02 05:33:28 +00002773def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002774 let Latency = 25;
2775 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002776 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002777}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002778def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002779
2780def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2781 let Latency = 20;
2782 let NumMicroOps = 10;
2783 let ResourceCycles = [1,2,7];
2784}
2785def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2786
Craig Topper8104f262018-04-02 05:33:28 +00002787def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002788 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002789 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002790 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002791}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002792def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2793 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002794
Craig Topper8104f262018-04-02 05:33:28 +00002795def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002796 let Latency = 21;
2797 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002798 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002799}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002800def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2801 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002802
Craig Topper8104f262018-04-02 05:33:28 +00002803def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002804 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002805 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002806 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002807}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002808def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2809 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002810
2811def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002812 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002813 let NumMicroOps = 3;
2814 let ResourceCycles = [1,1,1];
2815}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002816def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2817 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002818
2819def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2820 let Latency = 24;
2821 let NumMicroOps = 1;
2822 let ResourceCycles = [1];
2823}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002824def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2825 "DIVR_FST0r",
2826 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002827
2828def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002829 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002830 let NumMicroOps = 2;
2831 let ResourceCycles = [1,1];
2832}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002833def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2834 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002835
2836def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002837 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002838 let NumMicroOps = 27;
2839 let ResourceCycles = [1,5,1,1,19];
2840}
2841def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2842
2843def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002844 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002845 let NumMicroOps = 28;
2846 let ResourceCycles = [1,6,1,1,19];
2847}
Craig Topper2d451e72018-03-18 08:38:06 +00002848def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002849
2850def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002851 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002852 let NumMicroOps = 3;
2853 let ResourceCycles = [1,1,1];
2854}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002855def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2856 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002857
Gadi Haberd76f7b82017-08-28 10:04:16 +00002858def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002859 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002860 let NumMicroOps = 23;
2861 let ResourceCycles = [1,5,3,4,10];
2862}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002863def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2864 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002865
2866def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002867 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002868 let NumMicroOps = 23;
2869 let ResourceCycles = [1,5,2,1,4,10];
2870}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002871def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2872 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002873
2874def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2875 let Latency = 31;
2876 let NumMicroOps = 31;
2877 let ResourceCycles = [8,1,21,1];
2878}
2879def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2880
Craig Topper8104f262018-04-02 05:33:28 +00002881def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002882 let Latency = 35;
2883 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002884 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002885}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002886def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2887 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002888
Craig Topper8104f262018-04-02 05:33:28 +00002889def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002890 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002891 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002892 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002893}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002894def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2895 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002896
2897def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002898 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002899 let NumMicroOps = 18;
2900 let ResourceCycles = [1,1,2,3,1,1,1,8];
2901}
2902def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2903
2904def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2905 let Latency = 42;
2906 let NumMicroOps = 22;
2907 let ResourceCycles = [2,20];
2908}
Craig Topper2d451e72018-03-18 08:38:06 +00002909def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002910
2911def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002912 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002913 let NumMicroOps = 64;
2914 let ResourceCycles = [2,2,8,1,10,2,39];
2915}
2916def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002917
2918def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002919 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002920 let NumMicroOps = 88;
2921 let ResourceCycles = [4,4,31,1,2,1,45];
2922}
Craig Topper2d451e72018-03-18 08:38:06 +00002923def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002924
2925def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002926 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002927 let NumMicroOps = 90;
2928 let ResourceCycles = [4,2,33,1,2,1,47];
2929}
Craig Topper2d451e72018-03-18 08:38:06 +00002930def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002931
2932def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2933 let Latency = 75;
2934 let NumMicroOps = 15;
2935 let ResourceCycles = [6,3,6];
2936}
2937def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2938
2939def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2940 let Latency = 98;
2941 let NumMicroOps = 32;
2942 let ResourceCycles = [7,7,3,3,1,11];
2943}
2944def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2945
2946def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2947 let Latency = 112;
2948 let NumMicroOps = 66;
2949 let ResourceCycles = [4,2,4,8,14,34];
2950}
2951def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2952
2953def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002954 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002955 let NumMicroOps = 100;
2956 let ResourceCycles = [9,9,11,8,1,11,21,30];
2957}
2958def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002959
Gadi Haber2cf601f2017-12-08 09:48:44 +00002960def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2961 let Latency = 26;
2962 let NumMicroOps = 12;
2963 let ResourceCycles = [2,2,1,3,2,2];
2964}
Craig Topper17a31182017-12-16 18:35:29 +00002965def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2966 VPGATHERDQrm,
2967 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002968
2969def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2970 let Latency = 24;
2971 let NumMicroOps = 22;
2972 let ResourceCycles = [5,3,4,1,5,4];
2973}
Craig Topper17a31182017-12-16 18:35:29 +00002974def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2975 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002976
2977def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2978 let Latency = 28;
2979 let NumMicroOps = 22;
2980 let ResourceCycles = [5,3,4,1,5,4];
2981}
Craig Topper17a31182017-12-16 18:35:29 +00002982def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002983
2984def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2985 let Latency = 25;
2986 let NumMicroOps = 22;
2987 let ResourceCycles = [5,3,4,1,5,4];
2988}
Craig Topper17a31182017-12-16 18:35:29 +00002989def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002990
2991def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2992 let Latency = 27;
2993 let NumMicroOps = 20;
2994 let ResourceCycles = [3,3,4,1,5,4];
2995}
Craig Topper17a31182017-12-16 18:35:29 +00002996def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2997 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002998
2999def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3000 let Latency = 27;
3001 let NumMicroOps = 34;
3002 let ResourceCycles = [5,3,8,1,9,8];
3003}
Craig Topper17a31182017-12-16 18:35:29 +00003004def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3005 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003006
3007def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3008 let Latency = 23;
3009 let NumMicroOps = 14;
3010 let ResourceCycles = [3,3,2,1,3,2];
3011}
Craig Topper17a31182017-12-16 18:35:29 +00003012def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3013 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003014
3015def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3016 let Latency = 28;
3017 let NumMicroOps = 15;
3018 let ResourceCycles = [3,3,2,1,4,2];
3019}
Craig Topper17a31182017-12-16 18:35:29 +00003020def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003021
3022def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3023 let Latency = 25;
3024 let NumMicroOps = 15;
3025 let ResourceCycles = [3,3,2,1,4,2];
3026}
Craig Topper17a31182017-12-16 18:35:29 +00003027def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3028 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003029
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003030} // SchedModel