blob: 32fec40595bbd05ce28b16d6b46ee3054bd0228d [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
163defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000164defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
166defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000167defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000169
170// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000171def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
172def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
173def : WriteRes<WriteVecMove, [HWPort015]>;
174
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000175defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
176defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1>;
177defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
178defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000179defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000181defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
183defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
186defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
187defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000189
190// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000191
Quentin Colombetca498512014-02-24 19:33:51 +0000192// Packed Compare Implicit Length Strings, Return Mask
193def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000194 let Latency = 11;
195 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000196 let ResourceCycles = [3];
197}
198def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199 let Latency = 17;
200 let NumMicroOps = 4;
201 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000202}
203
204// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
206 let Latency = 19;
207 let NumMicroOps = 9;
208 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000209}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000210def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
211 let Latency = 25;
212 let NumMicroOps = 10;
213 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000214}
215
216// Packed Compare Implicit Length Strings, Return Index
217def : WriteRes<WritePCmpIStrI, [HWPort0]> {
218 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000219 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000220 let ResourceCycles = [3];
221}
222def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 17;
224 let NumMicroOps = 4;
225 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000226}
227
228// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
230 let Latency = 18;
231 let NumMicroOps = 8;
232 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000233}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
235 let Latency = 24;
236 let NumMicroOps = 9;
237 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000238}
239
Simon Pilgrima2f26782018-03-27 20:38:54 +0000240// MOVMSK Instructions.
241def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
242def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
243def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
244
Quentin Colombetca498512014-02-24 19:33:51 +0000245// AES Instructions.
246def : WriteRes<WriteAESDecEnc, [HWPort5]> {
247 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000248 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000249 let ResourceCycles = [1];
250}
251def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000252 let Latency = 13;
253 let NumMicroOps = 2;
254 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000255}
256
257def : WriteRes<WriteAESIMC, [HWPort5]> {
258 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000259 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000260 let ResourceCycles = [2];
261}
262def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000263 let Latency = 20;
264 let NumMicroOps = 3;
265 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000266}
267
Simon Pilgrim7684e052018-03-22 13:18:08 +0000268def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
269 let Latency = 29;
270 let NumMicroOps = 11;
271 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000272}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000273def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
274 let Latency = 34;
275 let NumMicroOps = 11;
276 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000277}
278
279// Carry-less multiplication instructions.
280def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000281 let Latency = 11;
282 let NumMicroOps = 3;
283 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000284}
285def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000286 let Latency = 17;
287 let NumMicroOps = 4;
288 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000289}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000290
291def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
292def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000293def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
294def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000295
Michael Zuckermanf6684002017-06-28 11:23:31 +0000296//================ Exceptions ================//
297
298//-- Specific Scheduling Models --//
299
300// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000301def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302
Craig Topper02daec02018-04-02 01:12:32 +0000303def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000304
Craig Topper02daec02018-04-02 01:12:32 +0000305def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000306 let NumMicroOps = 2;
307}
Craig Topper02daec02018-04-02 01:12:32 +0000308def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000309 let NumMicroOps = 3;
310}
311
Craig Topper02daec02018-04-02 01:12:32 +0000312def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000313 let NumMicroOps = 2;
314}
315
Craig Topper02daec02018-04-02 01:12:32 +0000316def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000317 let NumMicroOps = 3;
318 let ResourceCycles = [2, 1];
319}
320
Michael Zuckermanf6684002017-06-28 11:23:31 +0000321// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323
Michael Zuckermanf6684002017-06-28 11:23:31 +0000324
Craig Topper02daec02018-04-02 01:12:32 +0000325def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000326 let NumMicroOps = 2;
327 let ResourceCycles = [2];
328}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
330// Notation:
331// - r: register.
332// - mm: 64 bit mmx register.
333// - x = 128 bit xmm register.
334// - (x)mm = mmx or xmm register.
335// - y = 256 bit ymm register.
336// - v = any vector register.
337// - m = memory.
338
339//=== Integer Instructions ===//
340//-- Move instructions --//
341
Michael Zuckermanf6684002017-06-28 11:23:31 +0000342// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000343def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000344 let Latency = 7;
345 let NumMicroOps = 3;
346}
Craig Topper02daec02018-04-02 01:12:32 +0000347def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348
Michael Zuckermanf6684002017-06-28 11:23:31 +0000349// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000350def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351 let NumMicroOps = 19;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 18;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361//-- Arithmetic instructions --//
362
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363// DIV.
364// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000365def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366 let Latency = 22;
367 let NumMicroOps = 9;
368}
Craig Topper02daec02018-04-02 01:12:32 +0000369def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000370
Michael Zuckermanf6684002017-06-28 11:23:31 +0000371// IDIV.
372// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000373def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000374 let Latency = 23;
375 let NumMicroOps = 9;
376}
Craig Topper02daec02018-04-02 01:12:32 +0000377def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000378
Michael Zuckermanf6684002017-06-28 11:23:31 +0000379// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000381def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382 let NumMicroOps = 10;
383}
Craig Topper02daec02018-04-02 01:12:32 +0000384def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000387// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000388def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000389 let NumMicroOps = 11;
390}
Craig Topper02daec02018-04-02 01:12:32 +0000391def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393//-- Control transfer instructions --//
394
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000396// i.
Craig Topper02daec02018-04-02 01:12:32 +0000397def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398 let NumMicroOps = 4;
399 let ResourceCycles = [1, 2, 1];
400}
Craig Topper02daec02018-04-02 01:12:32 +0000401def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402
403// BOUND.
404// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000405def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406 let NumMicroOps = 15;
407}
Craig Topper02daec02018-04-02 01:12:32 +0000408def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409
410// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 4;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416//-- String instructions --//
417
418// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000419def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420
421// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000422def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000423
Michael Zuckermanf6684002017-06-28 11:23:31 +0000424// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000425def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426 let Latency = 4;
427 let NumMicroOps = 5;
428 let ResourceCycles = [2, 1, 2];
429}
Craig Topper02daec02018-04-02 01:12:32 +0000430def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000433def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000434 let Latency = 4;
435 let NumMicroOps = 5;
436 let ResourceCycles = [2, 3];
437}
Craig Topper02daec02018-04-02 01:12:32 +0000438def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000439
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440//-- Other --//
441
Gadi Haberd76f7b82017-08-28 10:04:16 +0000442// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000443def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000444 let NumMicroOps = 34;
445}
Craig Topper02daec02018-04-02 01:12:32 +0000446def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000447
448// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 17;
451 let ResourceCycles = [1, 16];
452}
Craig Topper02daec02018-04-02 01:12:32 +0000453def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000454
455//=== Floating Point x87 Instructions ===//
456//-- Move instructions --//
457
458// FLD.
459// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000460def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000461
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462// FBLD.
463// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000464def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000465 let Latency = 47;
466 let NumMicroOps = 43;
467}
Craig Topper02daec02018-04-02 01:12:32 +0000468def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000469
470// FST(P).
471// r.
Craig Topper02daec02018-04-02 01:12:32 +0000472def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473
Michael Zuckermanf6684002017-06-28 11:23:31 +0000474// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000475def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
483// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000484def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485 let NumMicroOps = 147;
486}
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 90;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495//-- Arithmetic instructions --//
496
497// FABS.
Craig Topper02daec02018-04-02 01:12:32 +0000498def : InstRW<[HWWriteP0], (instregex "ABS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000499
500// FCHS.
Craig Topper02daec02018-04-02 01:12:32 +0000501def : InstRW<[HWWriteP0], (instregex "CHS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Craig Topper02daec02018-04-02 01:12:32 +0000537def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Craig Topper02daec02018-04-02 01:12:32 +0000546def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Craig Topper02daec02018-04-02 01:12:32 +0000553def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
560defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
621 "MMX_MOVD64to64rm",
622 "MMX_MOVQ64rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000623 "MOVSX(16|32|64)rm16",
624 "MOVSX(16|32|64)rm32",
625 "MOVSX(16|32|64)rm8",
626 "MOVZX(16|32|64)rm16",
627 "MOVZX(16|32|64)rm8",
628 "PREFETCHNTA",
629 "PREFETCHT0",
630 "PREFETCHT1",
631 "PREFETCHT2",
632 "(V?)MOV64toPQIrm",
633 "(V?)MOVDDUPrm",
634 "(V?)MOVDI2PDIrm",
635 "(V?)MOVQI2PQIrm",
636 "(V?)MOVSDrm",
637 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000638
Gadi Haberd76f7b82017-08-28 10:04:16 +0000639def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
640 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000641 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000642 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000643}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000644def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
645 "MMX_MOVD64from64rm",
646 "MMX_MOVD64mr",
647 "MMX_MOVNTQmr",
648 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000649 "MOVNTI_64mr",
650 "MOVNTImr",
651 "ST_FP32m",
652 "ST_FP64m",
653 "ST_FP80m",
654 "VEXTRACTF128mr",
655 "VEXTRACTI128mr",
656 "(V?)MOVAPD(Y?)mr",
657 "(V?)MOVAPS(V?)mr",
658 "(V?)MOVDQA(Y?)mr",
659 "(V?)MOVDQU(Y?)mr",
660 "(V?)MOVHPDmr",
661 "(V?)MOVHPSmr",
662 "(V?)MOVLPDmr",
663 "(V?)MOVLPSmr",
664 "(V?)MOVNTDQ(Y?)mr",
665 "(V?)MOVNTPD(Y?)mr",
666 "(V?)MOVNTPS(Y?)mr",
667 "(V?)MOVPDI2DImr",
668 "(V?)MOVPQI2QImr",
669 "(V?)MOVPQIto64mr",
670 "(V?)MOVSDmr",
671 "(V?)MOVSSmr",
672 "(V?)MOVUPD(Y?)mr",
673 "(V?)MOVUPS(Y?)mr",
674 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000675
Gadi Haberd76f7b82017-08-28 10:04:16 +0000676def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
677 let Latency = 1;
678 let NumMicroOps = 1;
679 let ResourceCycles = [1];
680}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000681def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
682 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000683 "MMX_PSLLDri",
684 "MMX_PSLLDrr",
685 "MMX_PSLLQri",
686 "MMX_PSLLQrr",
687 "MMX_PSLLWri",
688 "MMX_PSLLWrr",
689 "MMX_PSRADri",
690 "MMX_PSRADrr",
691 "MMX_PSRAWri",
692 "MMX_PSRAWrr",
693 "MMX_PSRLDri",
694 "MMX_PSRLDrr",
695 "MMX_PSRLQri",
696 "MMX_PSRLQrr",
697 "MMX_PSRLWri",
698 "MMX_PSRLWrr",
699 "(V?)MOVPDI2DIrr",
700 "(V?)MOVPQIto64rr",
701 "(V?)PSLLD(Y?)ri",
702 "(V?)PSLLQ(Y?)ri",
703 "VPSLLVQ(Y?)rr",
704 "(V?)PSLLW(Y?)ri",
705 "(V?)PSRAD(Y?)ri",
706 "(V?)PSRAW(Y?)ri",
707 "(V?)PSRLD(Y?)ri",
708 "(V?)PSRLQ(Y?)ri",
709 "VPSRLVQ(Y?)rr",
710 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000711 "VTESTPD(Y?)rr",
712 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000713
714def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
715 let Latency = 1;
716 let NumMicroOps = 1;
717 let ResourceCycles = [1];
718}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000719def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
720 "COM_FST0r",
721 "UCOM_FPr",
722 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000723
724def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
725 let Latency = 1;
726 let NumMicroOps = 1;
727 let ResourceCycles = [1];
728}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000729def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730 "MMX_MOVD64to64rr",
731 "MMX_MOVQ2DQrr",
732 "MMX_PALIGNRrri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000733 "MMX_PSHUFWri",
734 "MMX_PUNPCKHBWirr",
735 "MMX_PUNPCKHDQirr",
736 "MMX_PUNPCKHWDirr",
737 "MMX_PUNPCKLBWirr",
738 "MMX_PUNPCKLDQirr",
739 "MMX_PUNPCKLWDirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000740 "(V?)ANDNPD(Y?)rr",
741 "(V?)ANDNPS(Y?)rr",
742 "(V?)ANDPD(Y?)rr",
743 "(V?)ANDPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000744 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000745 "(V?)INSERTPSrr",
746 "(V?)MOV64toPQIrr",
747 "(V?)MOVAPD(Y?)rr",
748 "(V?)MOVAPS(Y?)rr",
749 "(V?)MOVDDUP(Y?)rr",
750 "(V?)MOVDI2PDIrr",
751 "(V?)MOVHLPSrr",
752 "(V?)MOVLHPSrr",
753 "(V?)MOVSDrr",
754 "(V?)MOVSHDUP(Y?)rr",
755 "(V?)MOVSLDUP(Y?)rr",
756 "(V?)MOVSSrr",
757 "(V?)MOVUPD(Y?)rr",
758 "(V?)MOVUPS(Y?)rr",
759 "(V?)ORPD(Y?)rr",
760 "(V?)ORPS(Y?)rr",
761 "(V?)PACKSSDW(Y?)rr",
762 "(V?)PACKSSWB(Y?)rr",
763 "(V?)PACKUSDW(Y?)rr",
764 "(V?)PACKUSWB(Y?)rr",
765 "(V?)PALIGNR(Y?)rri",
766 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000767 "VPBROADCASTDrr",
768 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000769 "VPERMILPD(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000770 "VPERMILPS(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000771 "(V?)PMOVSXBDrr",
772 "(V?)PMOVSXBQrr",
773 "(V?)PMOVSXBWrr",
774 "(V?)PMOVSXDQrr",
775 "(V?)PMOVSXWDrr",
776 "(V?)PMOVSXWQrr",
777 "(V?)PMOVZXBDrr",
778 "(V?)PMOVZXBQrr",
779 "(V?)PMOVZXBWrr",
780 "(V?)PMOVZXDQrr",
781 "(V?)PMOVZXWDrr",
782 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000783 "(V?)PSHUFD(Y?)ri",
784 "(V?)PSHUFHW(Y?)ri",
785 "(V?)PSHUFLW(Y?)ri",
786 "(V?)PSLLDQ(Y?)ri",
787 "(V?)PSRLDQ(Y?)ri",
788 "(V?)PUNPCKHBW(Y?)rr",
789 "(V?)PUNPCKHDQ(Y?)rr",
790 "(V?)PUNPCKHQDQ(Y?)rr",
791 "(V?)PUNPCKHWD(Y?)rr",
792 "(V?)PUNPCKLBW(Y?)rr",
793 "(V?)PUNPCKLDQ(Y?)rr",
794 "(V?)PUNPCKLQDQ(Y?)rr",
795 "(V?)PUNPCKLWD(Y?)rr",
796 "(V?)SHUFPD(Y?)rri",
797 "(V?)SHUFPS(Y?)rri",
798 "(V?)UNPCKHPD(Y?)rr",
799 "(V?)UNPCKHPS(Y?)rr",
800 "(V?)UNPCKLPD(Y?)rr",
801 "(V?)UNPCKLPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000802 "(V?)XORPD(Y?)rr",
803 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000804
805def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
806 let Latency = 1;
807 let NumMicroOps = 1;
808 let ResourceCycles = [1];
809}
810def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
811
812def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
813 let Latency = 1;
814 let NumMicroOps = 1;
815 let ResourceCycles = [1];
816}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000817def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
818 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000819
820def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
821 let Latency = 1;
822 let NumMicroOps = 1;
823 let ResourceCycles = [1];
824}
Craig Topperfbe31322018-04-05 21:56:19 +0000825def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000826def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
827 "BT(16|32|64)rr",
828 "BTC(16|32|64)ri8",
829 "BTC(16|32|64)rr",
830 "BTR(16|32|64)ri8",
831 "BTR(16|32|64)rr",
832 "BTS(16|32|64)ri8",
833 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000834 "RORX(32|64)ri",
835 "SAR(8|16|32|64)r1",
836 "SAR(8|16|32|64)ri",
837 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000838 "SHL(8|16|32|64)r1",
839 "SHL(8|16|32|64)ri",
840 "SHLX(32|64)rr",
841 "SHR(8|16|32|64)r1",
842 "SHR(8|16|32|64)ri",
843 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000844
845def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
846 let Latency = 1;
847 let NumMicroOps = 1;
848 let ResourceCycles = [1];
849}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
851 "BLSI(32|64)rr",
852 "BLSMSK(32|64)rr",
853 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854 "LEA(16|32|64)(_32)?r",
855 "MMX_PABSBrr",
856 "MMX_PABSDrr",
857 "MMX_PABSWrr",
858 "MMX_PADDBirr",
859 "MMX_PADDDirr",
860 "MMX_PADDQirr",
861 "MMX_PADDSBirr",
862 "MMX_PADDSWirr",
863 "MMX_PADDUSBirr",
864 "MMX_PADDUSWirr",
865 "MMX_PADDWirr",
866 "MMX_PAVGBirr",
867 "MMX_PAVGWirr",
868 "MMX_PCMPEQBirr",
869 "MMX_PCMPEQDirr",
870 "MMX_PCMPEQWirr",
871 "MMX_PCMPGTBirr",
872 "MMX_PCMPGTDirr",
873 "MMX_PCMPGTWirr",
874 "MMX_PMAXSWirr",
875 "MMX_PMAXUBirr",
876 "MMX_PMINSWirr",
877 "MMX_PMINUBirr",
878 "MMX_PSIGNBrr",
879 "MMX_PSIGNDrr",
880 "MMX_PSIGNWrr",
881 "MMX_PSUBBirr",
882 "MMX_PSUBDirr",
883 "MMX_PSUBQirr",
884 "MMX_PSUBSBirr",
885 "MMX_PSUBSWirr",
886 "MMX_PSUBUSBirr",
887 "MMX_PSUBUSWirr",
888 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000889 "(V?)PABSB(Y?)rr",
890 "(V?)PABSD(Y?)rr",
891 "(V?)PABSW(Y?)rr",
892 "(V?)PADDB(Y?)rr",
893 "(V?)PADDD(Y?)rr",
894 "(V?)PADDQ(Y?)rr",
895 "(V?)PADDSB(Y?)rr",
896 "(V?)PADDSW(Y?)rr",
897 "(V?)PADDUSB(Y?)rr",
898 "(V?)PADDUSW(Y?)rr",
899 "(V?)PADDW(Y?)rr",
900 "(V?)PAVGB(Y?)rr",
901 "(V?)PAVGW(Y?)rr",
902 "(V?)PCMPEQB(Y?)rr",
903 "(V?)PCMPEQD(Y?)rr",
904 "(V?)PCMPEQQ(Y?)rr",
905 "(V?)PCMPEQW(Y?)rr",
906 "(V?)PCMPGTB(Y?)rr",
907 "(V?)PCMPGTD(Y?)rr",
908 "(V?)PCMPGTW(Y?)rr",
909 "(V?)PMAXSB(Y?)rr",
910 "(V?)PMAXSD(Y?)rr",
911 "(V?)PMAXSW(Y?)rr",
912 "(V?)PMAXUB(Y?)rr",
913 "(V?)PMAXUD(Y?)rr",
914 "(V?)PMAXUW(Y?)rr",
915 "(V?)PMINSB(Y?)rr",
916 "(V?)PMINSD(Y?)rr",
917 "(V?)PMINSW(Y?)rr",
918 "(V?)PMINUB(Y?)rr",
919 "(V?)PMINUD(Y?)rr",
920 "(V?)PMINUW(Y?)rr",
921 "(V?)PSIGNB(Y?)rr",
922 "(V?)PSIGND(Y?)rr",
923 "(V?)PSIGNW(Y?)rr",
924 "(V?)PSUBB(Y?)rr",
925 "(V?)PSUBD(Y?)rr",
926 "(V?)PSUBQ(Y?)rr",
927 "(V?)PSUBSB(Y?)rr",
928 "(V?)PSUBSW(Y?)rr",
929 "(V?)PSUBUSB(Y?)rr",
930 "(V?)PSUBUSW(Y?)rr",
931 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000932
933def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
934 let Latency = 1;
935 let NumMicroOps = 1;
936 let ResourceCycles = [1];
937}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000938def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
939 "MMX_PANDNirr",
940 "MMX_PANDirr",
941 "MMX_PORirr",
942 "MMX_PXORirr",
943 "(V?)BLENDPD(Y?)rri",
944 "(V?)BLENDPS(Y?)rri",
945 "(V?)MOVDQA(Y?)rr",
946 "(V?)MOVDQU(Y?)rr",
947 "(V?)MOVPQI2QIrr",
948 "VMOVZPQILo2PQIrr",
949 "(V?)PANDN(Y?)rr",
950 "(V?)PAND(Y?)rr",
951 "VPBLENDD(Y?)rri",
952 "(V?)POR(Y?)rr",
953 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000954
955def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
956 let Latency = 1;
957 let NumMicroOps = 1;
958 let ResourceCycles = [1];
959}
Craig Topperfbe31322018-04-05 21:56:19 +0000960def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000961def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000962 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000963 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000964 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000965 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000966 "SGDT64m",
967 "SIDT64m",
968 "SLDT64m",
969 "SMSW16m",
970 "STC",
971 "STRm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000972 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000973 "XCHG(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000974
975def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000976 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000977 let NumMicroOps = 2;
978 let ResourceCycles = [1,1];
979}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000980def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
981 "MMX_PSLLQrm",
982 "MMX_PSLLWrm",
983 "MMX_PSRADrm",
984 "MMX_PSRAWrm",
985 "MMX_PSRLDrm",
986 "MMX_PSRLQrm",
987 "MMX_PSRLWrm",
988 "VCVTPH2PSrm",
989 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000990
Gadi Haber2cf601f2017-12-08 09:48:44 +0000991def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
992 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000993 let NumMicroOps = 2;
994 let ResourceCycles = [1,1];
995}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000996def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
997 "(V?)CVTSS2SDrm",
998 "VPSLLVQrm",
999 "VPSRLVQrm",
1000 "VTESTPDrm",
1001 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001002
1003def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1004 let Latency = 8;
1005 let NumMicroOps = 2;
1006 let ResourceCycles = [1,1];
1007}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001008def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1009 "VPSLLQYrm",
1010 "VPSLLVQYrm",
1011 "VPSLLWYrm",
1012 "VPSRADYrm",
1013 "VPSRAWYrm",
1014 "VPSRLDYrm",
1015 "VPSRLQYrm",
1016 "VPSRLVQYrm",
1017 "VPSRLWYrm",
1018 "VTESTPDYrm",
1019 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001020
1021def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1022 let Latency = 8;
1023 let NumMicroOps = 2;
1024 let ResourceCycles = [1,1];
1025}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001026def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001027 "FCOM64m",
1028 "FCOMP32m",
1029 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001030 "MMX_CVTPI2PSirm",
1031 "MMX_CVTPS2PIirm",
1032 "MMX_CVTTPS2PIirm",
1033 "PDEP(32|64)rm",
1034 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001035 "(V?)ADDSDrm",
1036 "(V?)ADDSSrm",
1037 "(V?)CMPSDrm",
1038 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001039 "(V?)MAX(C?)SDrm",
1040 "(V?)MAX(C?)SSrm",
1041 "(V?)MIN(C?)SDrm",
1042 "(V?)MIN(C?)SSrm",
1043 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001044 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001045
Craig Topperf846e2d2018-04-19 05:34:05 +00001046def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
1047 let Latency = 8;
1048 let NumMicroOps = 3;
1049 let ResourceCycles = [1,1,1];
1050}
1051def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
1052
1053def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
1054 let Latency = 9;
1055 let NumMicroOps = 5;
1056 let ResourceCycles = [1,1,2,1];
1057}
1058def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
1059
Gadi Haberd76f7b82017-08-28 10:04:16 +00001060def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001061 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001062 let NumMicroOps = 2;
1063 let ResourceCycles = [1,1];
1064}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001065def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1066 "(V?)ANDNPDrm",
1067 "(V?)ANDNPSrm",
1068 "(V?)ANDPDrm",
1069 "(V?)ANDPSrm",
1070 "(V?)INSERTPSrm",
1071 "(V?)ORPDrm",
1072 "(V?)ORPSrm",
1073 "(V?)PACKSSDWrm",
1074 "(V?)PACKSSWBrm",
1075 "(V?)PACKUSDWrm",
1076 "(V?)PACKUSWBrm",
1077 "(V?)PALIGNRrmi",
1078 "(V?)PBLENDWrmi",
1079 "VPERMILPDmi",
1080 "VPERMILPDrm",
1081 "VPERMILPSmi",
1082 "VPERMILPSrm",
1083 "(V?)PSHUFBrm",
1084 "(V?)PSHUFDmi",
1085 "(V?)PSHUFHWmi",
1086 "(V?)PSHUFLWmi",
1087 "(V?)PUNPCKHBWrm",
1088 "(V?)PUNPCKHDQrm",
1089 "(V?)PUNPCKHQDQrm",
1090 "(V?)PUNPCKHWDrm",
1091 "(V?)PUNPCKLBWrm",
1092 "(V?)PUNPCKLDQrm",
1093 "(V?)PUNPCKLQDQrm",
1094 "(V?)PUNPCKLWDrm",
1095 "(V?)SHUFPDrmi",
1096 "(V?)SHUFPSrmi",
1097 "(V?)UNPCKHPDrm",
1098 "(V?)UNPCKHPSrm",
1099 "(V?)UNPCKLPDrm",
1100 "(V?)UNPCKLPSrm",
1101 "(V?)XORPDrm",
1102 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001103
Gadi Haber2cf601f2017-12-08 09:48:44 +00001104def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1105 let Latency = 8;
1106 let NumMicroOps = 2;
1107 let ResourceCycles = [1,1];
1108}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001109def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1110 "VANDNPSYrm",
1111 "VANDPDYrm",
1112 "VANDPSYrm",
1113 "VORPDYrm",
1114 "VORPSYrm",
1115 "VPACKSSDWYrm",
1116 "VPACKSSWBYrm",
1117 "VPACKUSDWYrm",
1118 "VPACKUSWBYrm",
1119 "VPALIGNRYrmi",
1120 "VPBLENDWYrmi",
1121 "VPERMILPDYmi",
1122 "VPERMILPDYrm",
1123 "VPERMILPSYmi",
1124 "VPERMILPSYrm",
1125 "VPMOVSXBDYrm",
1126 "VPMOVSXBQYrm",
1127 "VPMOVSXWQYrm",
1128 "VPSHUFBYrm",
1129 "VPSHUFDYmi",
1130 "VPSHUFHWYmi",
1131 "VPSHUFLWYmi",
1132 "VPUNPCKHBWYrm",
1133 "VPUNPCKHDQYrm",
1134 "VPUNPCKHQDQYrm",
1135 "VPUNPCKHWDYrm",
1136 "VPUNPCKLBWYrm",
1137 "VPUNPCKLDQYrm",
1138 "VPUNPCKLQDQYrm",
1139 "VPUNPCKLWDYrm",
1140 "VSHUFPDYrmi",
1141 "VSHUFPSYrmi",
1142 "VUNPCKHPDYrm",
1143 "VUNPCKHPSYrm",
1144 "VUNPCKLPDYrm",
1145 "VUNPCKLPSYrm",
1146 "VXORPDYrm",
1147 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001148
1149def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1150 let Latency = 6;
1151 let NumMicroOps = 2;
1152 let ResourceCycles = [1,1];
1153}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001154def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1155 "MMX_PINSRWrm",
1156 "MMX_PSHUFBrm",
1157 "MMX_PSHUFWmi",
1158 "MMX_PUNPCKHBWirm",
1159 "MMX_PUNPCKHDQirm",
1160 "MMX_PUNPCKHWDirm",
1161 "MMX_PUNPCKLBWirm",
1162 "MMX_PUNPCKLDQirm",
1163 "MMX_PUNPCKLWDirm",
1164 "(V?)MOVHPDrm",
1165 "(V?)MOVHPSrm",
1166 "(V?)MOVLPDrm",
1167 "(V?)MOVLPSrm",
1168 "(V?)PINSRBrm",
1169 "(V?)PINSRDrm",
1170 "(V?)PINSRQrm",
1171 "(V?)PINSRWrm",
1172 "(V?)PMOVSXBDrm",
1173 "(V?)PMOVSXBQrm",
1174 "(V?)PMOVSXBWrm",
1175 "(V?)PMOVSXDQrm",
1176 "(V?)PMOVSXWDrm",
1177 "(V?)PMOVSXWQrm",
1178 "(V?)PMOVZXBDrm",
1179 "(V?)PMOVZXBQrm",
1180 "(V?)PMOVZXBWrm",
1181 "(V?)PMOVZXDQrm",
1182 "(V?)PMOVZXWDrm",
1183 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001184
Gadi Haberd76f7b82017-08-28 10:04:16 +00001185def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001186 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001187 let NumMicroOps = 2;
1188 let ResourceCycles = [1,1];
1189}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001190def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1191 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001192
1193def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001194 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001195 let NumMicroOps = 2;
1196 let ResourceCycles = [1,1];
1197}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001198def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1199 "RORX(32|64)mi",
1200 "SARX(32|64)rm",
1201 "SHLX(32|64)rm",
1202 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001203
1204def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001205 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001206 let NumMicroOps = 2;
1207 let ResourceCycles = [1,1];
1208}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001209def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1210 "BLSI(32|64)rm",
1211 "BLSMSK(32|64)rm",
1212 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001213 "MMX_PABSBrm",
1214 "MMX_PABSDrm",
1215 "MMX_PABSWrm",
1216 "MMX_PADDBirm",
1217 "MMX_PADDDirm",
1218 "MMX_PADDQirm",
1219 "MMX_PADDSBirm",
1220 "MMX_PADDSWirm",
1221 "MMX_PADDUSBirm",
1222 "MMX_PADDUSWirm",
1223 "MMX_PADDWirm",
1224 "MMX_PAVGBirm",
1225 "MMX_PAVGWirm",
1226 "MMX_PCMPEQBirm",
1227 "MMX_PCMPEQDirm",
1228 "MMX_PCMPEQWirm",
1229 "MMX_PCMPGTBirm",
1230 "MMX_PCMPGTDirm",
1231 "MMX_PCMPGTWirm",
1232 "MMX_PMAXSWirm",
1233 "MMX_PMAXUBirm",
1234 "MMX_PMINSWirm",
1235 "MMX_PMINUBirm",
1236 "MMX_PSIGNBrm",
1237 "MMX_PSIGNDrm",
1238 "MMX_PSIGNWrm",
1239 "MMX_PSUBBirm",
1240 "MMX_PSUBDirm",
1241 "MMX_PSUBQirm",
1242 "MMX_PSUBSBirm",
1243 "MMX_PSUBSWirm",
1244 "MMX_PSUBUSBirm",
1245 "MMX_PSUBUSWirm",
1246 "MMX_PSUBWirm",
1247 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001248
1249def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1250 let Latency = 7;
1251 let NumMicroOps = 2;
1252 let ResourceCycles = [1,1];
1253}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001254def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1255 "(V?)PABSDrm",
1256 "(V?)PABSWrm",
1257 "(V?)PADDBrm",
1258 "(V?)PADDDrm",
1259 "(V?)PADDQrm",
1260 "(V?)PADDSBrm",
1261 "(V?)PADDSWrm",
1262 "(V?)PADDUSBrm",
1263 "(V?)PADDUSWrm",
1264 "(V?)PADDWrm",
1265 "(V?)PAVGBrm",
1266 "(V?)PAVGWrm",
1267 "(V?)PCMPEQBrm",
1268 "(V?)PCMPEQDrm",
1269 "(V?)PCMPEQQrm",
1270 "(V?)PCMPEQWrm",
1271 "(V?)PCMPGTBrm",
1272 "(V?)PCMPGTDrm",
1273 "(V?)PCMPGTWrm",
1274 "(V?)PMAXSBrm",
1275 "(V?)PMAXSDrm",
1276 "(V?)PMAXSWrm",
1277 "(V?)PMAXUBrm",
1278 "(V?)PMAXUDrm",
1279 "(V?)PMAXUWrm",
1280 "(V?)PMINSBrm",
1281 "(V?)PMINSDrm",
1282 "(V?)PMINSWrm",
1283 "(V?)PMINUBrm",
1284 "(V?)PMINUDrm",
1285 "(V?)PMINUWrm",
1286 "(V?)PSIGNBrm",
1287 "(V?)PSIGNDrm",
1288 "(V?)PSIGNWrm",
1289 "(V?)PSUBBrm",
1290 "(V?)PSUBDrm",
1291 "(V?)PSUBQrm",
1292 "(V?)PSUBSBrm",
1293 "(V?)PSUBSWrm",
1294 "(V?)PSUBUSBrm",
1295 "(V?)PSUBUSWrm",
1296 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001297
1298def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1299 let Latency = 8;
1300 let NumMicroOps = 2;
1301 let ResourceCycles = [1,1];
1302}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001303def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1304 "VPABSDYrm",
1305 "VPABSWYrm",
1306 "VPADDBYrm",
1307 "VPADDDYrm",
1308 "VPADDQYrm",
1309 "VPADDSBYrm",
1310 "VPADDSWYrm",
1311 "VPADDUSBYrm",
1312 "VPADDUSWYrm",
1313 "VPADDWYrm",
1314 "VPAVGBYrm",
1315 "VPAVGWYrm",
1316 "VPCMPEQBYrm",
1317 "VPCMPEQDYrm",
1318 "VPCMPEQQYrm",
1319 "VPCMPEQWYrm",
1320 "VPCMPGTBYrm",
1321 "VPCMPGTDYrm",
1322 "VPCMPGTWYrm",
1323 "VPMAXSBYrm",
1324 "VPMAXSDYrm",
1325 "VPMAXSWYrm",
1326 "VPMAXUBYrm",
1327 "VPMAXUDYrm",
1328 "VPMAXUWYrm",
1329 "VPMINSBYrm",
1330 "VPMINSDYrm",
1331 "VPMINSWYrm",
1332 "VPMINUBYrm",
1333 "VPMINUDYrm",
1334 "VPMINUWYrm",
1335 "VPSIGNBYrm",
1336 "VPSIGNDYrm",
1337 "VPSIGNWYrm",
1338 "VPSUBBYrm",
1339 "VPSUBDYrm",
1340 "VPSUBQYrm",
1341 "VPSUBSBYrm",
1342 "VPSUBSWYrm",
1343 "VPSUBUSBYrm",
1344 "VPSUBUSWYrm",
1345 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001346
1347def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001348 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001349 let NumMicroOps = 2;
1350 let ResourceCycles = [1,1];
1351}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001352def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1353 "(V?)BLENDPSrmi",
1354 "VINSERTF128rm",
1355 "VINSERTI128rm",
1356 "(V?)PANDNrm",
1357 "(V?)PANDrm",
1358 "VPBLENDDrmi",
1359 "(V?)PORrm",
1360 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001361
Gadi Haber2cf601f2017-12-08 09:48:44 +00001362def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1363 let Latency = 6;
1364 let NumMicroOps = 2;
1365 let ResourceCycles = [1,1];
1366}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001367def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1368 "MMX_PANDirm",
1369 "MMX_PORirm",
1370 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001371
1372def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1373 let Latency = 8;
1374 let NumMicroOps = 2;
1375 let ResourceCycles = [1,1];
1376}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001377def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1378 "VBLENDPSYrmi",
1379 "VPANDNYrm",
1380 "VPANDYrm",
1381 "VPBLENDDYrmi",
1382 "VPORYrm",
1383 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001384
Gadi Haberd76f7b82017-08-28 10:04:16 +00001385def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001386 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387 let NumMicroOps = 2;
1388 let ResourceCycles = [1,1];
1389}
Craig Topper2d451e72018-03-18 08:38:06 +00001390def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001391def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392
1393def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001394 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001395 let NumMicroOps = 2;
1396 let ResourceCycles = [1,1];
1397}
1398def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1399
1400def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001401 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001402 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001404}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001405def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1406 "(V?)PEXTRBmr",
1407 "(V?)PEXTRDmr",
1408 "(V?)PEXTRQmr",
1409 "(V?)PEXTRWmr",
1410 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001411
Gadi Haberd76f7b82017-08-28 10:04:16 +00001412def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001413 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001414 let NumMicroOps = 3;
1415 let ResourceCycles = [1,1,1];
1416}
1417def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001418
Gadi Haberd76f7b82017-08-28 10:04:16 +00001419def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001420 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001421 let NumMicroOps = 3;
1422 let ResourceCycles = [1,1,1];
1423}
1424def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1425
1426def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001427 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001428 let NumMicroOps = 3;
1429 let ResourceCycles = [1,1,1];
1430}
1431def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1432
1433def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001434 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001435 let NumMicroOps = 3;
1436 let ResourceCycles = [1,1,1];
1437}
Craig Topper2d451e72018-03-18 08:38:06 +00001438def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001439def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1440 "PUSH64i8",
1441 "STOSB",
1442 "STOSL",
1443 "STOSQ",
1444 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001445
1446def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001447 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001448 let NumMicroOps = 4;
1449 let ResourceCycles = [1,1,1,1];
1450}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001451def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1452 "BTR(16|32|64)mi8",
1453 "BTS(16|32|64)mi8",
1454 "SAR(8|16|32|64)m1",
1455 "SAR(8|16|32|64)mi",
1456 "SHL(8|16|32|64)m1",
1457 "SHL(8|16|32|64)mi",
1458 "SHR(8|16|32|64)m1",
1459 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001460
1461def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001462 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001463 let NumMicroOps = 4;
1464 let ResourceCycles = [1,1,1,1];
1465}
Craig Topperf0d04262018-04-06 16:16:48 +00001466def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1467 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001468
1469def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001470 let Latency = 2;
1471 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001472 let ResourceCycles = [2];
1473}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001474def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1475 "BLENDVPSrr0",
1476 "MMX_PINSRWrr",
1477 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001478 "VBLENDVPD(Y?)rr",
1479 "VBLENDVPS(Y?)rr",
1480 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001481 "(V?)PINSRBrr",
1482 "(V?)PINSRDrr",
1483 "(V?)PINSRQrr",
1484 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001485
Gadi Haberd76f7b82017-08-28 10:04:16 +00001486def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1487 let Latency = 2;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [2];
1490}
1491def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1492
1493def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1494 let Latency = 2;
1495 let NumMicroOps = 2;
1496 let ResourceCycles = [2];
1497}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001498def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1499 "ROL(8|16|32|64)ri",
1500 "ROR(8|16|32|64)r1",
1501 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001502
1503def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1504 let Latency = 2;
1505 let NumMicroOps = 2;
1506 let ResourceCycles = [2];
1507}
1508def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1509def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1510def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1511def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1512
1513def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1514 let Latency = 2;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001518def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1519 "VCVTPH2PSYrr",
1520 "VCVTPH2PSrr",
1521 "(V?)CVTPS2PDrr",
1522 "(V?)CVTSS2SDrr",
1523 "(V?)EXTRACTPSrr",
1524 "(V?)PEXTRBrr",
1525 "(V?)PEXTRDrr",
1526 "(V?)PEXTRQrr",
1527 "(V?)PEXTRWrr",
1528 "(V?)PSLLDrr",
1529 "(V?)PSLLQrr",
1530 "(V?)PSLLWrr",
1531 "(V?)PSRADrr",
1532 "(V?)PSRAWrr",
1533 "(V?)PSRLDrr",
1534 "(V?)PSRLQrr",
1535 "(V?)PSRLWrr",
1536 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001537
1538def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1539 let Latency = 2;
1540 let NumMicroOps = 2;
1541 let ResourceCycles = [1,1];
1542}
1543def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1544
1545def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1546 let Latency = 2;
1547 let NumMicroOps = 2;
1548 let ResourceCycles = [1,1];
1549}
1550def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1551
1552def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1553 let Latency = 2;
1554 let NumMicroOps = 2;
1555 let ResourceCycles = [1,1];
1556}
Craig Topper498875f2018-04-04 17:54:19 +00001557def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1558
1559def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1560 let Latency = 1;
1561 let NumMicroOps = 1;
1562 let ResourceCycles = [1];
1563}
1564def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001565
1566def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1567 let Latency = 2;
1568 let NumMicroOps = 2;
1569 let ResourceCycles = [1,1];
1570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001571def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1572def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1573 "ADC(8|16|32|64)rr",
1574 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001575 "SBB(8|16|32|64)ri",
1576 "SBB(8|16|32|64)rr",
1577 "SBB(8|16|32|64)i",
1578 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001579
1580def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001581 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001582 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001583 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001584}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001585def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1586 "BLENDVPSrm0",
1587 "PBLENDVBrm0",
1588 "VBLENDVPDrm",
1589 "VBLENDVPSrm",
1590 "VMASKMOVPDrm",
1591 "VMASKMOVPSrm",
1592 "VPBLENDVBrm",
1593 "VPMASKMOVDrm",
1594 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001595
Gadi Haber2cf601f2017-12-08 09:48:44 +00001596def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1597 let Latency = 9;
1598 let NumMicroOps = 3;
1599 let ResourceCycles = [2,1];
1600}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001601def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1602 "VBLENDVPSYrm",
1603 "VMASKMOVPDYrm",
1604 "VMASKMOVPSYrm",
1605 "VPBLENDVBYrm",
1606 "VPMASKMOVDYrm",
1607 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001608
1609def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1610 let Latency = 7;
1611 let NumMicroOps = 3;
1612 let ResourceCycles = [2,1];
1613}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001614def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1615 "MMX_PACKSSWBirm",
1616 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001617
Gadi Haberd76f7b82017-08-28 10:04:16 +00001618def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001619 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620 let NumMicroOps = 3;
1621 let ResourceCycles = [1,2];
1622}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001623def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1624 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001625
1626def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001627 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001628 let NumMicroOps = 3;
1629 let ResourceCycles = [1,1,1];
1630}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001631def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1632 "(V?)PSLLQrm",
1633 "(V?)PSLLWrm",
1634 "(V?)PSRADrm",
1635 "(V?)PSRAWrm",
1636 "(V?)PSRLDrm",
1637 "(V?)PSRLQrm",
1638 "(V?)PSRLWrm",
1639 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001640
1641def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001642 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001643 let NumMicroOps = 3;
1644 let ResourceCycles = [1,1,1];
1645}
1646def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1647
1648def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001649 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001650 let NumMicroOps = 3;
1651 let ResourceCycles = [1,1,1];
1652}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001653def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001654
1655def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001656 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657 let NumMicroOps = 3;
1658 let ResourceCycles = [1,1,1];
1659}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001660def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1661 "RETL",
1662 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001663
Gadi Haberd76f7b82017-08-28 10:04:16 +00001664def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001665 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001666 let NumMicroOps = 3;
1667 let ResourceCycles = [1,1,1];
1668}
Craig Topperc50570f2018-04-06 17:12:18 +00001669def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1670 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001671
1672def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001673 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001674 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001675 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001676}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001677def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001678
Gadi Haberd76f7b82017-08-28 10:04:16 +00001679def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001680 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001681 let NumMicroOps = 4;
1682 let ResourceCycles = [1,1,1,1];
1683}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001684def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1685 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001686
1687def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001688 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001689 let NumMicroOps = 5;
1690 let ResourceCycles = [1,1,1,2];
1691}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001692def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1693 "ROL(8|16|32|64)mi",
1694 "ROR(8|16|32|64)m1",
1695 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001696
1697def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001698 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001699 let NumMicroOps = 5;
1700 let ResourceCycles = [1,1,1,2];
1701}
Craig Topper13a16502018-03-19 00:56:09 +00001702def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001703
1704def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001705 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001706 let NumMicroOps = 5;
1707 let ResourceCycles = [1,1,1,1,1];
1708}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001709def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1710 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001711
Gadi Haberd76f7b82017-08-28 10:04:16 +00001712def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1713 let Latency = 3;
1714 let NumMicroOps = 1;
1715 let ResourceCycles = [1];
1716}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001717def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1718 "ADD_FST0r",
1719 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001720 "MMX_CVTPI2PSirr",
1721 "PDEP(32|64)rr",
1722 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001723 "SHLD(16|32|64)rri8",
1724 "SHRD(16|32|64)rri8",
1725 "SUBR_FPrST0",
1726 "SUBR_FST0r",
1727 "SUBR_FrST0",
1728 "SUB_FPrST0",
1729 "SUB_FST0r",
1730 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001731 "(V?)ADDPD(Y?)rr",
1732 "(V?)ADDPS(Y?)rr",
1733 "(V?)ADDSDrr",
1734 "(V?)ADDSSrr",
1735 "(V?)ADDSUBPD(Y?)rr",
1736 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001737 "(V?)CVTDQ2PS(Y?)rr",
1738 "(V?)CVTPS2DQ(Y?)rr",
1739 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001740 "(V?)SUBPD(Y?)rr",
1741 "(V?)SUBPS(Y?)rr",
1742 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001743 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001744
Clement Courbet327fac42018-03-07 08:14:02 +00001745def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001746 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001747 let NumMicroOps = 2;
1748 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001749}
Clement Courbet327fac42018-03-07 08:14:02 +00001750def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001751
1752def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1753 let Latency = 3;
1754 let NumMicroOps = 1;
1755 let ResourceCycles = [1];
1756}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001757def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1758 "VBROADCASTSSYrr",
1759 "VEXTRACTF128rr",
1760 "VEXTRACTI128rr",
1761 "VINSERTF128rr",
1762 "VINSERTI128rr",
1763 "VPBROADCASTBYrr",
1764 "VPBROADCASTBrr",
1765 "VPBROADCASTDYrr",
1766 "VPBROADCASTQYrr",
1767 "VPBROADCASTWYrr",
1768 "VPBROADCASTWrr",
1769 "VPERM2F128rr",
1770 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001771 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001772 "VPERMQYri",
1773 "VPMOVSXBDYrr",
1774 "VPMOVSXBQYrr",
1775 "VPMOVSXBWYrr",
1776 "VPMOVSXDQYrr",
1777 "VPMOVSXWDYrr",
1778 "VPMOVSXWQYrr",
1779 "VPMOVZXBDYrr",
1780 "VPMOVZXBQYrr",
1781 "VPMOVZXBWYrr",
1782 "VPMOVZXDQYrr",
1783 "VPMOVZXWDYrr",
1784 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001785
1786def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001787 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001788 let NumMicroOps = 2;
1789 let ResourceCycles = [1,1];
1790}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001791def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1792 "(V?)ADDPSrm",
1793 "(V?)ADDSUBPDrm",
1794 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001795 "(V?)CVTDQ2PSrm",
1796 "(V?)CVTPS2DQrm",
1797 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001798 "(V?)SUBPDrm",
1799 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001800
Gadi Haber2cf601f2017-12-08 09:48:44 +00001801def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1802 let Latency = 10;
1803 let NumMicroOps = 2;
1804 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001806def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1807 "ADD_F64m",
1808 "ILD_F16m",
1809 "ILD_F32m",
1810 "ILD_F64m",
1811 "SUBR_F32m",
1812 "SUBR_F64m",
1813 "SUB_F32m",
1814 "SUB_F64m",
1815 "VADDPDYrm",
1816 "VADDPSYrm",
1817 "VADDSUBPDYrm",
1818 "VADDSUBPSYrm",
1819 "VCMPPDYrmi",
1820 "VCMPPSYrmi",
1821 "VCVTDQ2PSYrm",
1822 "VCVTPS2DQYrm",
1823 "VCVTTPS2DQYrm",
1824 "VMAX(C?)PDYrm",
1825 "VMAX(C?)PSYrm",
1826 "VMIN(C?)PDYrm",
1827 "VMIN(C?)PSYrm",
1828 "VSUBPDYrm",
1829 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001830
1831def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001832 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001833 let NumMicroOps = 2;
1834 let ResourceCycles = [1,1];
1835}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001836def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1837 "VPERM2I128rm",
1838 "VPERMDYrm",
1839 "VPERMPDYmi",
1840 "VPERMPSYrm",
1841 "VPERMQYmi",
1842 "VPMOVZXBDYrm",
1843 "VPMOVZXBQYrm",
1844 "VPMOVZXBWYrm",
1845 "VPMOVZXDQYrm",
1846 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001847
Gadi Haber2cf601f2017-12-08 09:48:44 +00001848def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1849 let Latency = 9;
1850 let NumMicroOps = 2;
1851 let ResourceCycles = [1,1];
1852}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001853def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1854 "VPMOVSXDQYrm",
1855 "VPMOVSXWDYrm",
1856 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001857
Gadi Haberd76f7b82017-08-28 10:04:16 +00001858def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1859 let Latency = 3;
1860 let NumMicroOps = 3;
1861 let ResourceCycles = [3];
1862}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001863def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1864 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001865
1866def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1867 let Latency = 3;
1868 let NumMicroOps = 3;
1869 let ResourceCycles = [2,1];
1870}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001871def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1872 "VPSRAVD(Y?)rr",
1873 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001874
1875def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1876 let Latency = 3;
1877 let NumMicroOps = 3;
1878 let ResourceCycles = [2,1];
1879}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001880def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1881 "MMX_PHADDSWrr",
1882 "MMX_PHADDWrr",
1883 "MMX_PHSUBDrr",
1884 "MMX_PHSUBSWrr",
1885 "MMX_PHSUBWrr",
1886 "(V?)PHADDD(Y?)rr",
1887 "(V?)PHADDSW(Y?)rr",
1888 "(V?)PHADDW(Y?)rr",
1889 "(V?)PHSUBD(Y?)rr",
1890 "(V?)PHSUBSW(Y?)rr",
1891 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001892
1893def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1894 let Latency = 3;
1895 let NumMicroOps = 3;
1896 let ResourceCycles = [2,1];
1897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001898def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1899 "MMX_PACKSSWBirr",
1900 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001901
1902def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1903 let Latency = 3;
1904 let NumMicroOps = 3;
1905 let ResourceCycles = [1,2];
1906}
1907def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1908
1909def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1910 let Latency = 3;
1911 let NumMicroOps = 3;
1912 let ResourceCycles = [1,2];
1913}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001914def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1915 "RCL(8|16|32|64)r1",
1916 "RCL(8|16|32|64)ri",
1917 "RCR(8|16|32|64)r1",
1918 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001919
1920def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1921 let Latency = 3;
1922 let NumMicroOps = 3;
1923 let ResourceCycles = [2,1];
1924}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001925def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1926 "ROR(8|16|32|64)rCL",
1927 "SAR(8|16|32|64)rCL",
1928 "SHL(8|16|32|64)rCL",
1929 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001930
1931def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001932 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001933 let NumMicroOps = 3;
1934 let ResourceCycles = [1,1,1];
1935}
1936def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1937
1938def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001939 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001940 let NumMicroOps = 3;
1941 let ResourceCycles = [1,1,1];
1942}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001943def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1944 "ISTT_FP32m",
1945 "ISTT_FP64m",
1946 "IST_F16m",
1947 "IST_F32m",
1948 "IST_FP16m",
1949 "IST_FP32m",
1950 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001951
1952def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001953 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001954 let NumMicroOps = 4;
1955 let ResourceCycles = [2,1,1];
1956}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001957def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1958 "VPSRAVDYrm",
1959 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001960
1961def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1962 let Latency = 9;
1963 let NumMicroOps = 4;
1964 let ResourceCycles = [2,1,1];
1965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001966def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1967 "VPSRAVDrm",
1968 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001969
1970def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001971 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001972 let NumMicroOps = 4;
1973 let ResourceCycles = [2,1,1];
1974}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001975def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
1976 "MMX_PHADDSWrm",
1977 "MMX_PHADDWrm",
1978 "MMX_PHSUBDrm",
1979 "MMX_PHSUBSWrm",
1980 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001981
1982def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1983 let Latency = 10;
1984 let NumMicroOps = 4;
1985 let ResourceCycles = [2,1,1];
1986}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001987def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1988 "VPHADDSWYrm",
1989 "VPHADDWYrm",
1990 "VPHSUBDYrm",
1991 "VPHSUBSWYrm",
1992 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001993
1994def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1995 let Latency = 9;
1996 let NumMicroOps = 4;
1997 let ResourceCycles = [2,1,1];
1998}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001999def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
2000 "(V?)PHADDSWrm",
2001 "(V?)PHADDWrm",
2002 "(V?)PHSUBDrm",
2003 "(V?)PHSUBSWrm",
2004 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002005
2006def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002007 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002008 let NumMicroOps = 4;
2009 let ResourceCycles = [1,1,2];
2010}
Craig Topperf4cd9082018-01-19 05:47:32 +00002011def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002012
2013def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002014 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002015 let NumMicroOps = 5;
2016 let ResourceCycles = [1,1,1,2];
2017}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002018def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2019 "RCL(8|16|32|64)mi",
2020 "RCR(8|16|32|64)m1",
2021 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002022
2023def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002024 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002025 let NumMicroOps = 5;
2026 let ResourceCycles = [1,1,2,1];
2027}
Craig Topper13a16502018-03-19 00:56:09 +00002028def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002029
2030def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002031 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002032 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002033 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002034}
Craig Topper9f834812018-04-01 21:54:24 +00002035def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002036
Gadi Haberd76f7b82017-08-28 10:04:16 +00002037def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002038 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002039 let NumMicroOps = 6;
2040 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002041}
Craig Topper9f834812018-04-01 21:54:24 +00002042def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002043 "CMPXCHG(8|16|32|64)rm",
2044 "ROL(8|16|32|64)mCL",
2045 "SAR(8|16|32|64)mCL",
2046 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002047 "SHL(8|16|32|64)mCL",
2048 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00002049def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2050 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002051
Gadi Haberd76f7b82017-08-28 10:04:16 +00002052def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2053 let Latency = 4;
2054 let NumMicroOps = 2;
2055 let ResourceCycles = [1,1];
2056}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002057def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2058 "(V?)CVTSD2SIrr",
2059 "(V?)CVTSS2SI64rr",
2060 "(V?)CVTSS2SIrr",
2061 "(V?)CVTTSD2SI64rr",
2062 "(V?)CVTTSD2SIrr",
2063 "(V?)CVTTSS2SI64rr",
2064 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002065
2066def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2067 let Latency = 4;
2068 let NumMicroOps = 2;
2069 let ResourceCycles = [1,1];
2070}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002071def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2072 "VPSLLDYrr",
2073 "VPSLLQYrr",
2074 "VPSLLWYrr",
2075 "VPSRADYrr",
2076 "VPSRAWYrr",
2077 "VPSRLDYrr",
2078 "VPSRLQYrr",
2079 "VPSRLWYrr",
2080 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002081
2082def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2083 let Latency = 4;
2084 let NumMicroOps = 2;
2085 let ResourceCycles = [1,1];
2086}
2087def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2088
2089def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2090 let Latency = 4;
2091 let NumMicroOps = 2;
2092 let ResourceCycles = [1,1];
2093}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002094def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2095 "MMX_CVTPI2PDirr",
2096 "MMX_CVTPS2PIirr",
2097 "MMX_CVTTPD2PIirr",
2098 "MMX_CVTTPS2PIirr",
2099 "(V?)CVTDQ2PDrr",
2100 "(V?)CVTPD2DQrr",
2101 "(V?)CVTPD2PSrr",
2102 "VCVTPS2PHrr",
2103 "(V?)CVTSD2SSrr",
2104 "(V?)CVTSI642SDrr",
2105 "(V?)CVTSI2SDrr",
2106 "(V?)CVTSI2SSrr",
2107 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002108
2109def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2110 let Latency = 4;
2111 let NumMicroOps = 2;
2112 let ResourceCycles = [1,1];
2113}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002114def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002115
Craig Topperf846e2d2018-04-19 05:34:05 +00002116def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002117 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002118 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00002119 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002120}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002121def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002122
Gadi Haberd76f7b82017-08-28 10:04:16 +00002123def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002124 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002125 let NumMicroOps = 3;
2126 let ResourceCycles = [2,1];
2127}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002128def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2129 "FICOM32m",
2130 "FICOMP16m",
2131 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002132
2133def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002134 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002135 let NumMicroOps = 3;
2136 let ResourceCycles = [1,1,1];
2137}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002138def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2139 "(V?)CVTSD2SIrm",
2140 "(V?)CVTSS2SI64rm",
2141 "(V?)CVTSS2SIrm",
2142 "(V?)CVTTSD2SI64rm",
2143 "(V?)CVTTSD2SIrm",
2144 "VCVTTSS2SI64rm",
2145 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002146
2147def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002148 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002149 let NumMicroOps = 3;
2150 let ResourceCycles = [1,1,1];
2151}
2152def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002153
2154def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2155 let Latency = 11;
2156 let NumMicroOps = 3;
2157 let ResourceCycles = [1,1,1];
2158}
2159def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002160
2161def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002162 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002163 let NumMicroOps = 3;
2164 let ResourceCycles = [1,1,1];
2165}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002166def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2167 "CVTPD2PSrm",
2168 "CVTTPD2DQrm",
2169 "MMX_CVTPD2PIirm",
2170 "MMX_CVTTPD2PIirm",
2171 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002172
2173def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2174 let Latency = 9;
2175 let NumMicroOps = 3;
2176 let ResourceCycles = [1,1,1];
2177}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002178def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2179 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002180
2181def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002182 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002183 let NumMicroOps = 3;
2184 let ResourceCycles = [1,1,1];
2185}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002186def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002187
2188def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002189 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002190 let NumMicroOps = 3;
2191 let ResourceCycles = [1,1,1];
2192}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002193def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2194 "VPBROADCASTBrm",
2195 "VPBROADCASTWYrm",
2196 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002197
2198def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2199 let Latency = 4;
2200 let NumMicroOps = 4;
2201 let ResourceCycles = [4];
2202}
2203def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2204
2205def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2206 let Latency = 4;
2207 let NumMicroOps = 4;
2208 let ResourceCycles = [1,3];
2209}
2210def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2211
2212def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2213 let Latency = 4;
2214 let NumMicroOps = 4;
2215 let ResourceCycles = [1,1,2];
2216}
2217def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2218
2219def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002220 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002221 let NumMicroOps = 4;
2222 let ResourceCycles = [1,1,1,1];
2223}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002224def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2225 "VMASKMOVPS(Y?)mr",
2226 "VPMASKMOVD(Y?)mr",
2227 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002228
2229def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002230 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002231 let NumMicroOps = 4;
2232 let ResourceCycles = [1,1,1,1];
2233}
2234def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2235
2236def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002237 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002238 let NumMicroOps = 4;
2239 let ResourceCycles = [1,1,1,1];
2240}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002241def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2242 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243
2244def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002245 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246 let NumMicroOps = 5;
2247 let ResourceCycles = [1,2,1,1];
2248}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002249def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2250 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002251
2252def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002253 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002254 let NumMicroOps = 6;
2255 let ResourceCycles = [1,1,4];
2256}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002257def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2258 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002259
2260def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002261 let Latency = 5;
2262 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002263 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002264}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002265def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2266 "MMX_PMADDWDirr",
2267 "MMX_PMULHRSWrr",
2268 "MMX_PMULHUWirr",
2269 "MMX_PMULHWirr",
2270 "MMX_PMULLWirr",
2271 "MMX_PMULUDQirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002272 "MUL_FPrST0",
2273 "MUL_FST0r",
2274 "MUL_FrST0",
2275 "(V?)PCMPGTQ(Y?)rr",
2276 "(V?)PHMINPOSUWrr",
2277 "(V?)PMADDUBSW(Y?)rr",
2278 "(V?)PMADDWD(Y?)rr",
2279 "(V?)PMULDQ(Y?)rr",
2280 "(V?)PMULHRSW(Y?)rr",
2281 "(V?)PMULHUW(Y?)rr",
2282 "(V?)PMULHW(Y?)rr",
2283 "(V?)PMULLW(Y?)rr",
2284 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002285 "(V?)RCPPSr",
2286 "(V?)RCPSSr",
2287 "(V?)RSQRTPSr",
2288 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002289
Gadi Haberd76f7b82017-08-28 10:04:16 +00002290def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002291 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002292 let NumMicroOps = 1;
2293 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002294}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002295def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2296 "(V?)MULPS(Y?)rr",
2297 "(V?)MULSDrr",
2298 "(V?)MULSSrr",
2299 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2300 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002301
Gadi Haberd76f7b82017-08-28 10:04:16 +00002302def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002303 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002304 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002305 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002306}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002307def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2308 "MMX_PMADDWDirm",
2309 "MMX_PMULHRSWrm",
2310 "MMX_PMULHUWirm",
2311 "MMX_PMULHWirm",
2312 "MMX_PMULLWirm",
2313 "MMX_PMULUDQirm",
2314 "MMX_PSADBWirm",
2315 "(V?)RCPSSm",
2316 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002317
Craig Topper8104f262018-04-02 05:33:28 +00002318def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002319 let Latency = 16;
2320 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002321 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002322}
2323def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2324
Craig Topper8104f262018-04-02 05:33:28 +00002325def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002326 let Latency = 18;
2327 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002328 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002329}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002330def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002331
2332def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2333 let Latency = 11;
2334 let NumMicroOps = 2;
2335 let ResourceCycles = [1,1];
2336}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002337def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2338 "(V?)PHMINPOSUWrm",
2339 "(V?)PMADDUBSWrm",
2340 "(V?)PMADDWDrm",
2341 "(V?)PMULDQrm",
2342 "(V?)PMULHRSWrm",
2343 "(V?)PMULHUWrm",
2344 "(V?)PMULHWrm",
2345 "(V?)PMULLWrm",
2346 "(V?)PMULUDQrm",
2347 "(V?)PSADBWrm",
2348 "(V?)RCPPSm",
2349 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002350
2351def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2352 let Latency = 12;
2353 let NumMicroOps = 2;
2354 let ResourceCycles = [1,1];
2355}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002356def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2357 "MUL_F64m",
2358 "VPCMPGTQYrm",
2359 "VPMADDUBSWYrm",
2360 "VPMADDWDYrm",
2361 "VPMULDQYrm",
2362 "VPMULHRSWYrm",
2363 "VPMULHUWYrm",
2364 "VPMULHWYrm",
2365 "VPMULLWYrm",
2366 "VPMULUDQYrm",
2367 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002368
Gadi Haberd76f7b82017-08-28 10:04:16 +00002369def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002370 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002371 let NumMicroOps = 2;
2372 let ResourceCycles = [1,1];
2373}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002374def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2375 "(V?)MULPSrm",
2376 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002377
2378def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2379 let Latency = 12;
2380 let NumMicroOps = 2;
2381 let ResourceCycles = [1,1];
2382}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002383def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2384 "VMULPSYrm",
2385 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002386
2387def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2388 let Latency = 10;
2389 let NumMicroOps = 2;
2390 let ResourceCycles = [1,1];
2391}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002392def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2393 "(V?)MULSSrm",
2394 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002395
2396def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2397 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002398 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002399 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002400}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002401def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2402 "(V?)HADDPD(Y?)rr",
2403 "(V?)HADDPS(Y?)rr",
2404 "(V?)HSUBPD(Y?)rr",
2405 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002406
Gadi Haberd76f7b82017-08-28 10:04:16 +00002407def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2408 let Latency = 5;
2409 let NumMicroOps = 3;
2410 let ResourceCycles = [1,1,1];
2411}
2412def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2413
2414def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002415 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002416 let NumMicroOps = 3;
2417 let ResourceCycles = [1,1,1];
2418}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002419def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002420
2421def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002422 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002423 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002424 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002425}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002426def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2427 "(V?)HADDPSrm",
2428 "(V?)HSUBPDrm",
2429 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002430
Gadi Haber2cf601f2017-12-08 09:48:44 +00002431def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2432 let Latency = 12;
2433 let NumMicroOps = 4;
2434 let ResourceCycles = [1,2,1];
2435}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002436def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2437 "VHADDPSYrm",
2438 "VHSUBPDYrm",
2439 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002440
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002442 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002443 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002444 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002445}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002446def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002447
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002449 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002450 let NumMicroOps = 4;
2451 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002452}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002453def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002454
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2456 let Latency = 5;
2457 let NumMicroOps = 5;
2458 let ResourceCycles = [1,4];
2459}
2460def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2461
2462def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2463 let Latency = 5;
2464 let NumMicroOps = 5;
2465 let ResourceCycles = [1,4];
2466}
2467def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2468
2469def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2470 let Latency = 5;
2471 let NumMicroOps = 5;
2472 let ResourceCycles = [2,3];
2473}
Craig Topper13a16502018-03-19 00:56:09 +00002474def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002475
2476def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2477 let Latency = 6;
2478 let NumMicroOps = 2;
2479 let ResourceCycles = [1,1];
2480}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002481def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2482 "VCVTPD2DQYrr",
2483 "VCVTPD2PSYrr",
2484 "VCVTPS2PHYrr",
2485 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002486
2487def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002488 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002489 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002490 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002491}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002492def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2493 "ADD_FI32m",
2494 "SUBR_FI16m",
2495 "SUBR_FI32m",
2496 "SUB_FI16m",
2497 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002498 "VROUNDPDYm",
2499 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002500
Gadi Haber2cf601f2017-12-08 09:48:44 +00002501def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2502 let Latency = 12;
2503 let NumMicroOps = 3;
2504 let ResourceCycles = [2,1];
2505}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002506def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2507 "(V?)ROUNDPSm",
2508 "(V?)ROUNDSDm",
2509 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002510
Gadi Haberd76f7b82017-08-28 10:04:16 +00002511def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002512 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002513 let NumMicroOps = 3;
2514 let ResourceCycles = [1,1,1];
2515}
2516def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2517
2518def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2519 let Latency = 6;
2520 let NumMicroOps = 4;
2521 let ResourceCycles = [1,1,2];
2522}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002523def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2524 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002525
2526def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002527 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002528 let NumMicroOps = 4;
2529 let ResourceCycles = [1,1,1,1];
2530}
2531def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2532
2533def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2534 let Latency = 6;
2535 let NumMicroOps = 4;
2536 let ResourceCycles = [1,1,1,1];
2537}
2538def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2539
2540def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2541 let Latency = 6;
2542 let NumMicroOps = 6;
2543 let ResourceCycles = [1,5];
2544}
2545def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2546
2547def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002548 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549 let NumMicroOps = 6;
2550 let ResourceCycles = [1,1,1,1,2];
2551}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002552def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2553 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002554
Gadi Haberd76f7b82017-08-28 10:04:16 +00002555def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2556 let Latency = 7;
2557 let NumMicroOps = 3;
2558 let ResourceCycles = [1,2];
2559}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002560def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002561
2562def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002563 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002564 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002565 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002566}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002567def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002568
Gadi Haber2cf601f2017-12-08 09:48:44 +00002569def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2570 let Latency = 14;
2571 let NumMicroOps = 4;
2572 let ResourceCycles = [1,2,1];
2573}
2574def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2575
Gadi Haberd76f7b82017-08-28 10:04:16 +00002576def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2577 let Latency = 7;
2578 let NumMicroOps = 7;
2579 let ResourceCycles = [2,2,1,2];
2580}
Craig Topper2d451e72018-03-18 08:38:06 +00002581def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002582
2583def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002584 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002585 let NumMicroOps = 3;
2586 let ResourceCycles = [1,1,1];
2587}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002588def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2589 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002590
2591def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2592 let Latency = 9;
2593 let NumMicroOps = 3;
2594 let ResourceCycles = [1,1,1];
2595}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002596def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002597
2598def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002599 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002600 let NumMicroOps = 4;
2601 let ResourceCycles = [1,1,1,1];
2602}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002603def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002604
Gadi Haber2cf601f2017-12-08 09:48:44 +00002605def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2606 let Latency = 17;
2607 let NumMicroOps = 3;
2608 let ResourceCycles = [2,1];
2609}
2610def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2611
Gadi Haberd76f7b82017-08-28 10:04:16 +00002612def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002613 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002614 let NumMicroOps = 10;
2615 let ResourceCycles = [1,1,1,4,1,2];
2616}
Craig Topper13a16502018-03-19 00:56:09 +00002617def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002618
Craig Topper8104f262018-04-02 05:33:28 +00002619def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002620 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002621 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002622 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002623}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002624def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2625 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002626
Gadi Haberd76f7b82017-08-28 10:04:16 +00002627def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2628 let Latency = 11;
2629 let NumMicroOps = 3;
2630 let ResourceCycles = [2,1];
2631}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002632def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2633 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002634
Gadi Haberd76f7b82017-08-28 10:04:16 +00002635def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002636 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002637 let NumMicroOps = 4;
2638 let ResourceCycles = [2,1,1];
2639}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002640def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2641 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002642
2643def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2644 let Latency = 11;
2645 let NumMicroOps = 7;
2646 let ResourceCycles = [2,2,3];
2647}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002648def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2649 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002650
2651def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2652 let Latency = 11;
2653 let NumMicroOps = 9;
2654 let ResourceCycles = [1,4,1,3];
2655}
2656def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2657
2658def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2659 let Latency = 11;
2660 let NumMicroOps = 11;
2661 let ResourceCycles = [2,9];
2662}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002663def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002664
2665def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002666 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002667 let NumMicroOps = 14;
2668 let ResourceCycles = [1,1,1,4,2,5];
2669}
2670def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2671
Craig Topper8104f262018-04-02 05:33:28 +00002672def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002673 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002674 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002675 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002676}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002677def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2678 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002679
Craig Topper8104f262018-04-02 05:33:28 +00002680def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002681 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002682 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002683 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002684}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002685def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002686
2687def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002688 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002689 let NumMicroOps = 11;
2690 let ResourceCycles = [2,1,1,3,1,3];
2691}
Craig Topper13a16502018-03-19 00:56:09 +00002692def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002693
Craig Topper8104f262018-04-02 05:33:28 +00002694def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002695 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002696 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002697 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002698}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002699def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002700
Gadi Haberd76f7b82017-08-28 10:04:16 +00002701def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2702 let Latency = 14;
2703 let NumMicroOps = 4;
2704 let ResourceCycles = [2,1,1];
2705}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002706def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002707
2708def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002709 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002710 let NumMicroOps = 5;
2711 let ResourceCycles = [2,1,1,1];
2712}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002713def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002714
Gadi Haber2cf601f2017-12-08 09:48:44 +00002715def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2716 let Latency = 21;
2717 let NumMicroOps = 5;
2718 let ResourceCycles = [2,1,1,1];
2719}
2720def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2721
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2723 let Latency = 14;
2724 let NumMicroOps = 10;
2725 let ResourceCycles = [2,3,1,4];
2726}
2727def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2728
2729def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002730 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002731 let NumMicroOps = 15;
2732 let ResourceCycles = [1,14];
2733}
2734def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2735
2736def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002737 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002738 let NumMicroOps = 8;
2739 let ResourceCycles = [1,1,1,1,1,1,2];
2740}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002741def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2742 "INSL",
2743 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002744
2745def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2746 let Latency = 16;
2747 let NumMicroOps = 16;
2748 let ResourceCycles = [16];
2749}
2750def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2751
2752def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002753 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002754 let NumMicroOps = 19;
2755 let ResourceCycles = [2,1,4,1,1,4,6];
2756}
2757def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2758
2759def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2760 let Latency = 17;
2761 let NumMicroOps = 15;
2762 let ResourceCycles = [2,1,2,4,2,4];
2763}
2764def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2765
Gadi Haberd76f7b82017-08-28 10:04:16 +00002766def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2767 let Latency = 18;
2768 let NumMicroOps = 8;
2769 let ResourceCycles = [1,1,1,5];
2770}
2771def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002772def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002773
Gadi Haberd76f7b82017-08-28 10:04:16 +00002774def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002775 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002776 let NumMicroOps = 19;
2777 let ResourceCycles = [3,1,15];
2778}
Craig Topper391c6f92017-12-10 01:24:08 +00002779def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002780
Gadi Haberd76f7b82017-08-28 10:04:16 +00002781def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2782 let Latency = 20;
2783 let NumMicroOps = 1;
2784 let ResourceCycles = [1];
2785}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002786def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2787 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002788 "DIV_FrST0")>;
2789
2790def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2791 let Latency = 20;
2792 let NumMicroOps = 1;
2793 let ResourceCycles = [1,14];
2794}
2795def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2796 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002797
2798def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002799 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002800 let NumMicroOps = 2;
2801 let ResourceCycles = [1,1];
2802}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002803def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002804 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002805
Craig Topper8104f262018-04-02 05:33:28 +00002806def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002807 let Latency = 26;
2808 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002809 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002810}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002811def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002812
Craig Topper8104f262018-04-02 05:33:28 +00002813def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002814 let Latency = 21;
2815 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002816 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002817}
2818def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2819
Craig Topper8104f262018-04-02 05:33:28 +00002820def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002821 let Latency = 22;
2822 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002823 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002824}
2825def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2826
Craig Topper8104f262018-04-02 05:33:28 +00002827def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002828 let Latency = 25;
2829 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002830 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002831}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002832def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002833
2834def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2835 let Latency = 20;
2836 let NumMicroOps = 10;
2837 let ResourceCycles = [1,2,7];
2838}
2839def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2840
Craig Topper8104f262018-04-02 05:33:28 +00002841def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002842 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002843 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002844 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002845}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002846def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2847 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002848
Craig Topper8104f262018-04-02 05:33:28 +00002849def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002850 let Latency = 21;
2851 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002852 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002854def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2855 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002856
Craig Topper8104f262018-04-02 05:33:28 +00002857def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002858 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002859 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002860 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002861}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002862def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2863 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002864
2865def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002866 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002867 let NumMicroOps = 3;
2868 let ResourceCycles = [1,1,1];
2869}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002870def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2871 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002872
2873def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2874 let Latency = 24;
2875 let NumMicroOps = 1;
2876 let ResourceCycles = [1];
2877}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002878def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2879 "DIVR_FST0r",
2880 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002881
2882def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002883 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002884 let NumMicroOps = 2;
2885 let ResourceCycles = [1,1];
2886}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002887def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2888 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002889
2890def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002891 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002892 let NumMicroOps = 27;
2893 let ResourceCycles = [1,5,1,1,19];
2894}
2895def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2896
2897def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002898 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002899 let NumMicroOps = 28;
2900 let ResourceCycles = [1,6,1,1,19];
2901}
Craig Topper2d451e72018-03-18 08:38:06 +00002902def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002903
2904def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002905 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002906 let NumMicroOps = 3;
2907 let ResourceCycles = [1,1,1];
2908}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002909def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2910 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002911
Gadi Haberd76f7b82017-08-28 10:04:16 +00002912def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002913 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002914 let NumMicroOps = 23;
2915 let ResourceCycles = [1,5,3,4,10];
2916}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002917def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2918 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002919
2920def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002921 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002922 let NumMicroOps = 23;
2923 let ResourceCycles = [1,5,2,1,4,10];
2924}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002925def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2926 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002927
2928def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2929 let Latency = 31;
2930 let NumMicroOps = 31;
2931 let ResourceCycles = [8,1,21,1];
2932}
2933def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2934
Craig Topper8104f262018-04-02 05:33:28 +00002935def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002936 let Latency = 35;
2937 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002938 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002939}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002940def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2941 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002942
Craig Topper8104f262018-04-02 05:33:28 +00002943def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002944 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002945 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002946 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002947}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002948def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2949 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002950
2951def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002952 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002953 let NumMicroOps = 18;
2954 let ResourceCycles = [1,1,2,3,1,1,1,8];
2955}
2956def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2957
2958def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2959 let Latency = 42;
2960 let NumMicroOps = 22;
2961 let ResourceCycles = [2,20];
2962}
Craig Topper2d451e72018-03-18 08:38:06 +00002963def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002964
2965def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002966 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002967 let NumMicroOps = 64;
2968 let ResourceCycles = [2,2,8,1,10,2,39];
2969}
2970def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002971
2972def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002973 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002974 let NumMicroOps = 88;
2975 let ResourceCycles = [4,4,31,1,2,1,45];
2976}
Craig Topper2d451e72018-03-18 08:38:06 +00002977def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002978
2979def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002980 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002981 let NumMicroOps = 90;
2982 let ResourceCycles = [4,2,33,1,2,1,47];
2983}
Craig Topper2d451e72018-03-18 08:38:06 +00002984def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002985
2986def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2987 let Latency = 75;
2988 let NumMicroOps = 15;
2989 let ResourceCycles = [6,3,6];
2990}
2991def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2992
2993def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2994 let Latency = 98;
2995 let NumMicroOps = 32;
2996 let ResourceCycles = [7,7,3,3,1,11];
2997}
2998def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2999
3000def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3001 let Latency = 112;
3002 let NumMicroOps = 66;
3003 let ResourceCycles = [4,2,4,8,14,34];
3004}
3005def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3006
3007def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003008 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003009 let NumMicroOps = 100;
3010 let ResourceCycles = [9,9,11,8,1,11,21,30];
3011}
3012def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003013
Gadi Haber2cf601f2017-12-08 09:48:44 +00003014def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3015 let Latency = 26;
3016 let NumMicroOps = 12;
3017 let ResourceCycles = [2,2,1,3,2,2];
3018}
Craig Topper17a31182017-12-16 18:35:29 +00003019def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3020 VPGATHERDQrm,
3021 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003022
3023def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3024 let Latency = 24;
3025 let NumMicroOps = 22;
3026 let ResourceCycles = [5,3,4,1,5,4];
3027}
Craig Topper17a31182017-12-16 18:35:29 +00003028def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3029 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003030
3031def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3032 let Latency = 28;
3033 let NumMicroOps = 22;
3034 let ResourceCycles = [5,3,4,1,5,4];
3035}
Craig Topper17a31182017-12-16 18:35:29 +00003036def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003037
3038def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3039 let Latency = 25;
3040 let NumMicroOps = 22;
3041 let ResourceCycles = [5,3,4,1,5,4];
3042}
Craig Topper17a31182017-12-16 18:35:29 +00003043def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003044
3045def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3046 let Latency = 27;
3047 let NumMicroOps = 20;
3048 let ResourceCycles = [3,3,4,1,5,4];
3049}
Craig Topper17a31182017-12-16 18:35:29 +00003050def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3051 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003052
3053def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3054 let Latency = 27;
3055 let NumMicroOps = 34;
3056 let ResourceCycles = [5,3,8,1,9,8];
3057}
Craig Topper17a31182017-12-16 18:35:29 +00003058def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3059 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003060
3061def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3062 let Latency = 23;
3063 let NumMicroOps = 14;
3064 let ResourceCycles = [3,3,2,1,3,2];
3065}
Craig Topper17a31182017-12-16 18:35:29 +00003066def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3067 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003068
3069def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3070 let Latency = 28;
3071 let NumMicroOps = 15;
3072 let ResourceCycles = [3,3,2,1,4,2];
3073}
Craig Topper17a31182017-12-16 18:35:29 +00003074def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003075
3076def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3077 let Latency = 25;
3078 let NumMicroOps = 15;
3079 let ResourceCycles = [3,3,2,1,4,2];
3080}
Craig Topper17a31182017-12-16 18:35:29 +00003081def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3082 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003083
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003084} // SchedModel