blob: d25420c420d609be9f714f54812f25933f35c928 [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]>;
Quentin Colombetca498512014-02-24 19:33:51 +0000188
189// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000190
Quentin Colombetca498512014-02-24 19:33:51 +0000191// Packed Compare Implicit Length Strings, Return Mask
192def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193 let Latency = 11;
194 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000195 let ResourceCycles = [3];
196}
197def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000198 let Latency = 17;
199 let NumMicroOps = 4;
200 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000201}
202
203// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
205 let Latency = 19;
206 let NumMicroOps = 9;
207 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000208}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000209def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
210 let Latency = 25;
211 let NumMicroOps = 10;
212 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000213}
214
215// Packed Compare Implicit Length Strings, Return Index
216def : WriteRes<WritePCmpIStrI, [HWPort0]> {
217 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000218 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000219 let ResourceCycles = [3];
220}
221def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000222 let Latency = 17;
223 let NumMicroOps = 4;
224 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000225}
226
227// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
229 let Latency = 18;
230 let NumMicroOps = 8;
231 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000232}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
234 let Latency = 24;
235 let NumMicroOps = 9;
236 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000237}
238
Simon Pilgrima2f26782018-03-27 20:38:54 +0000239// MOVMSK Instructions.
240def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
241def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
242def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
243
Quentin Colombetca498512014-02-24 19:33:51 +0000244// AES Instructions.
245def : WriteRes<WriteAESDecEnc, [HWPort5]> {
246 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000247 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000248 let ResourceCycles = [1];
249}
250def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251 let Latency = 13;
252 let NumMicroOps = 2;
253 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000254}
255
256def : WriteRes<WriteAESIMC, [HWPort5]> {
257 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000258 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000259 let ResourceCycles = [2];
260}
261def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000262 let Latency = 20;
263 let NumMicroOps = 3;
264 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000265}
266
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
268 let Latency = 29;
269 let NumMicroOps = 11;
270 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
273 let Latency = 34;
274 let NumMicroOps = 11;
275 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000276}
277
278// Carry-less multiplication instructions.
279def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000280 let Latency = 11;
281 let NumMicroOps = 3;
282 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000283}
284def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285 let Latency = 17;
286 let NumMicroOps = 4;
287 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000288}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000289
290def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
291def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000292def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
293def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000294
Michael Zuckermanf6684002017-06-28 11:23:31 +0000295//================ Exceptions ================//
296
297//-- Specific Scheduling Models --//
298
299// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000300def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000301
Craig Topper02daec02018-04-02 01:12:32 +0000302def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000303
Craig Topper02daec02018-04-02 01:12:32 +0000304def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000305 let NumMicroOps = 2;
306}
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308 let NumMicroOps = 3;
309}
310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313}
314
Craig Topper02daec02018-04-02 01:12:32 +0000315def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000316 let NumMicroOps = 3;
317 let ResourceCycles = [2, 1];
318}
319
Michael Zuckermanf6684002017-06-28 11:23:31 +0000320// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000321def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000322
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323
Craig Topper02daec02018-04-02 01:12:32 +0000324def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000325 let NumMicroOps = 2;
326 let ResourceCycles = [2];
327}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000328
329// Notation:
330// - r: register.
331// - mm: 64 bit mmx register.
332// - x = 128 bit xmm register.
333// - (x)mm = mmx or xmm register.
334// - y = 256 bit ymm register.
335// - v = any vector register.
336// - m = memory.
337
338//=== Integer Instructions ===//
339//-- Move instructions --//
340
Michael Zuckermanf6684002017-06-28 11:23:31 +0000341// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000342def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000343 let Latency = 7;
344 let NumMicroOps = 3;
345}
Craig Topper02daec02018-04-02 01:12:32 +0000346def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000347
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350 let NumMicroOps = 19;
351}
Craig Topper02daec02018-04-02 01:12:32 +0000352def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000353
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000355def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000356 let NumMicroOps = 18;
357}
Craig Topper02daec02018-04-02 01:12:32 +0000358def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000359
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360//-- Arithmetic instructions --//
361
Michael Zuckermanf6684002017-06-28 11:23:31 +0000362// DIV.
363// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000364def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000365 let Latency = 22;
366 let NumMicroOps = 9;
367}
Craig Topper02daec02018-04-02 01:12:32 +0000368def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369
Michael Zuckermanf6684002017-06-28 11:23:31 +0000370// IDIV.
371// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000372def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000373 let Latency = 23;
374 let NumMicroOps = 9;
375}
Craig Topper02daec02018-04-02 01:12:32 +0000376def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377
Michael Zuckermanf6684002017-06-28 11:23:31 +0000378// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000379// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000380def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381 let NumMicroOps = 10;
382}
Craig Topper02daec02018-04-02 01:12:32 +0000383def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000387def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388 let NumMicroOps = 11;
389}
Craig Topper02daec02018-04-02 01:12:32 +0000390def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392//-- Control transfer instructions --//
393
Michael Zuckermanf6684002017-06-28 11:23:31 +0000394// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395// i.
Craig Topper02daec02018-04-02 01:12:32 +0000396def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000397 let NumMicroOps = 4;
398 let ResourceCycles = [1, 2, 1];
399}
Craig Topper02daec02018-04-02 01:12:32 +0000400def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401
402// BOUND.
403// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000404def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000405 let NumMicroOps = 15;
406}
Craig Topper02daec02018-04-02 01:12:32 +0000407def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408
409// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000410def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000411 let NumMicroOps = 4;
412}
Craig Topper02daec02018-04-02 01:12:32 +0000413def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000414
415//-- String instructions --//
416
417// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000418def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000419
420// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000421def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000422
Michael Zuckermanf6684002017-06-28 11:23:31 +0000423// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000424def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425 let Latency = 4;
426 let NumMicroOps = 5;
427 let ResourceCycles = [2, 1, 2];
428}
Craig Topper02daec02018-04-02 01:12:32 +0000429def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000432def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000433 let Latency = 4;
434 let NumMicroOps = 5;
435 let ResourceCycles = [2, 3];
436}
Craig Topper02daec02018-04-02 01:12:32 +0000437def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438
Michael Zuckermanf6684002017-06-28 11:23:31 +0000439//-- Other --//
440
Gadi Haberd76f7b82017-08-28 10:04:16 +0000441// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000442def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000443 let NumMicroOps = 34;
444}
Craig Topper02daec02018-04-02 01:12:32 +0000445def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446
447// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000448def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000449 let NumMicroOps = 17;
450 let ResourceCycles = [1, 16];
451}
Craig Topper02daec02018-04-02 01:12:32 +0000452def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
454//=== Floating Point x87 Instructions ===//
455//-- Move instructions --//
456
457// FLD.
458// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000459def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460
Michael Zuckermanf6684002017-06-28 11:23:31 +0000461// FBLD.
462// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000463def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000464 let Latency = 47;
465 let NumMicroOps = 43;
466}
Craig Topper02daec02018-04-02 01:12:32 +0000467def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468
469// FST(P).
470// r.
Craig Topper02daec02018-04-02 01:12:32 +0000471def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000472
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000477def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000478
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000480def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000481
482// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000483def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000484 let NumMicroOps = 147;
485}
Craig Topper02daec02018-04-02 01:12:32 +0000486def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000487
488// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000489def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000490 let NumMicroOps = 90;
491}
Craig Topper02daec02018-04-02 01:12:32 +0000492def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000493
494//-- Arithmetic instructions --//
495
496// FABS.
Craig Topper02daec02018-04-02 01:12:32 +0000497def : InstRW<[HWWriteP0], (instregex "ABS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000498
499// FCHS.
Craig Topper02daec02018-04-02 01:12:32 +0000500def : InstRW<[HWWriteP0], (instregex "CHS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000501
Michael Zuckermanf6684002017-06-28 11:23:31 +0000502// FCOMPP FUCOMPP.
503// r.
Craig Topper02daec02018-04-02 01:12:32 +0000504def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000505
506// FCOMI(P) FUCOMI(P).
507// m.
Craig Topper02daec02018-04-02 01:12:32 +0000508def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
509 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000510
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000512def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000513
514// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000515def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000516
517// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000518def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000519 let Latency = 19;
520 let NumMicroOps = 28;
521}
Craig Topper02daec02018-04-02 01:12:32 +0000522def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000523
524// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000525def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000526 let Latency = 27;
527 let NumMicroOps = 41;
528}
Craig Topper02daec02018-04-02 01:12:32 +0000529def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000530
531// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000532def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000533 let Latency = 11;
534 let NumMicroOps = 17;
535}
Craig Topper02daec02018-04-02 01:12:32 +0000536def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000537
538//-- Math instructions --//
539
540// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000541def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000542 let Latency = 75; // 49-125
543 let NumMicroOps = 50; // 25-75
544}
Craig Topper02daec02018-04-02 01:12:32 +0000545def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000546
547// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000548def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000549 let Latency = 15;
550 let NumMicroOps = 17;
551}
Craig Topper02daec02018-04-02 01:12:32 +0000552def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000553
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000554////////////////////////////////////////////////////////////////////////////////
555// Horizontal add/sub instructions.
556////////////////////////////////////////////////////////////////////////////////
557
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000558defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
559defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000560
Michael Zuckermanf6684002017-06-28 11:23:31 +0000561//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000562
Gadi Haberd76f7b82017-08-28 10:04:16 +0000563// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000564
Gadi Haberd76f7b82017-08-28 10:04:16 +0000565def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000566 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000567 let NumMicroOps = 1;
568 let ResourceCycles = [1];
569}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000570def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
571 "(V?)LDDQUrm",
572 "(V?)MOVAPDrm",
573 "(V?)MOVAPSrm",
574 "(V?)MOVDQArm",
575 "(V?)MOVDQUrm",
576 "(V?)MOVNTDQArm",
577 "(V?)MOVSHDUPrm",
578 "(V?)MOVSLDUPrm",
579 "(V?)MOVUPDrm",
580 "(V?)MOVUPSrm",
581 "VPBROADCASTDrm",
582 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000583 "(V?)ROUNDPD(Y?)r",
584 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000585 "(V?)ROUNDSDr",
586 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000587
588def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
589 let Latency = 7;
590 let NumMicroOps = 1;
591 let ResourceCycles = [1];
592}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000593def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
594 "LD_F64m",
595 "LD_F80m",
596 "VBROADCASTF128",
597 "VBROADCASTI128",
598 "VBROADCASTSDYrm",
599 "VBROADCASTSSYrm",
600 "VLDDQUYrm",
601 "VMOVAPDYrm",
602 "VMOVAPSYrm",
603 "VMOVDDUPYrm",
604 "VMOVDQAYrm",
605 "VMOVDQUYrm",
606 "VMOVNTDQAYrm",
607 "VMOVSHDUPYrm",
608 "VMOVSLDUPYrm",
609 "VMOVUPDYrm",
610 "VMOVUPSYrm",
611 "VPBROADCASTDYrm",
612 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000613
614def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
615 let Latency = 5;
616 let NumMicroOps = 1;
617 let ResourceCycles = [1];
618}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000619def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
620 "MMX_MOVD64to64rm",
621 "MMX_MOVQ64rm",
622 "MOV(8|16|32|64)rm",
623 "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 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
835 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
836 "JMP_1",
837 "JMP_4",
838 "RORX(32|64)ri",
839 "SAR(8|16|32|64)r1",
840 "SAR(8|16|32|64)ri",
841 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000842 "SHL(8|16|32|64)r1",
843 "SHL(8|16|32|64)ri",
844 "SHLX(32|64)rr",
845 "SHR(8|16|32|64)r1",
846 "SHR(8|16|32|64)ri",
847 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000848
849def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
850 let Latency = 1;
851 let NumMicroOps = 1;
852 let ResourceCycles = [1];
853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
855 "BLSI(32|64)rr",
856 "BLSMSK(32|64)rr",
857 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000858 "LEA(16|32|64)(_32)?r",
859 "MMX_PABSBrr",
860 "MMX_PABSDrr",
861 "MMX_PABSWrr",
862 "MMX_PADDBirr",
863 "MMX_PADDDirr",
864 "MMX_PADDQirr",
865 "MMX_PADDSBirr",
866 "MMX_PADDSWirr",
867 "MMX_PADDUSBirr",
868 "MMX_PADDUSWirr",
869 "MMX_PADDWirr",
870 "MMX_PAVGBirr",
871 "MMX_PAVGWirr",
872 "MMX_PCMPEQBirr",
873 "MMX_PCMPEQDirr",
874 "MMX_PCMPEQWirr",
875 "MMX_PCMPGTBirr",
876 "MMX_PCMPGTDirr",
877 "MMX_PCMPGTWirr",
878 "MMX_PMAXSWirr",
879 "MMX_PMAXUBirr",
880 "MMX_PMINSWirr",
881 "MMX_PMINUBirr",
882 "MMX_PSIGNBrr",
883 "MMX_PSIGNDrr",
884 "MMX_PSIGNWrr",
885 "MMX_PSUBBirr",
886 "MMX_PSUBDirr",
887 "MMX_PSUBQirr",
888 "MMX_PSUBSBirr",
889 "MMX_PSUBSWirr",
890 "MMX_PSUBUSBirr",
891 "MMX_PSUBUSWirr",
892 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000893 "(V?)PABSB(Y?)rr",
894 "(V?)PABSD(Y?)rr",
895 "(V?)PABSW(Y?)rr",
896 "(V?)PADDB(Y?)rr",
897 "(V?)PADDD(Y?)rr",
898 "(V?)PADDQ(Y?)rr",
899 "(V?)PADDSB(Y?)rr",
900 "(V?)PADDSW(Y?)rr",
901 "(V?)PADDUSB(Y?)rr",
902 "(V?)PADDUSW(Y?)rr",
903 "(V?)PADDW(Y?)rr",
904 "(V?)PAVGB(Y?)rr",
905 "(V?)PAVGW(Y?)rr",
906 "(V?)PCMPEQB(Y?)rr",
907 "(V?)PCMPEQD(Y?)rr",
908 "(V?)PCMPEQQ(Y?)rr",
909 "(V?)PCMPEQW(Y?)rr",
910 "(V?)PCMPGTB(Y?)rr",
911 "(V?)PCMPGTD(Y?)rr",
912 "(V?)PCMPGTW(Y?)rr",
913 "(V?)PMAXSB(Y?)rr",
914 "(V?)PMAXSD(Y?)rr",
915 "(V?)PMAXSW(Y?)rr",
916 "(V?)PMAXUB(Y?)rr",
917 "(V?)PMAXUD(Y?)rr",
918 "(V?)PMAXUW(Y?)rr",
919 "(V?)PMINSB(Y?)rr",
920 "(V?)PMINSD(Y?)rr",
921 "(V?)PMINSW(Y?)rr",
922 "(V?)PMINUB(Y?)rr",
923 "(V?)PMINUD(Y?)rr",
924 "(V?)PMINUW(Y?)rr",
925 "(V?)PSIGNB(Y?)rr",
926 "(V?)PSIGND(Y?)rr",
927 "(V?)PSIGNW(Y?)rr",
928 "(V?)PSUBB(Y?)rr",
929 "(V?)PSUBD(Y?)rr",
930 "(V?)PSUBQ(Y?)rr",
931 "(V?)PSUBSB(Y?)rr",
932 "(V?)PSUBSW(Y?)rr",
933 "(V?)PSUBUSB(Y?)rr",
934 "(V?)PSUBUSW(Y?)rr",
935 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000936
937def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
938 let Latency = 1;
939 let NumMicroOps = 1;
940 let ResourceCycles = [1];
941}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000942def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
943 "MMX_PANDNirr",
944 "MMX_PANDirr",
945 "MMX_PORirr",
946 "MMX_PXORirr",
947 "(V?)BLENDPD(Y?)rri",
948 "(V?)BLENDPS(Y?)rri",
949 "(V?)MOVDQA(Y?)rr",
950 "(V?)MOVDQU(Y?)rr",
951 "(V?)MOVPQI2QIrr",
952 "VMOVZPQILo2PQIrr",
953 "(V?)PANDN(Y?)rr",
954 "(V?)PAND(Y?)rr",
955 "VPBLENDD(Y?)rri",
956 "(V?)POR(Y?)rr",
957 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000958
959def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
960 let Latency = 1;
961 let NumMicroOps = 1;
962 let ResourceCycles = [1];
963}
Craig Topperfbe31322018-04-05 21:56:19 +0000964def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000965def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000966 "CMC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000967 "LAHF",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000968 "NOOP",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000969 "SAHF",
970 "SGDT64m",
971 "SIDT64m",
972 "SLDT64m",
973 "SMSW16m",
974 "STC",
975 "STRm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000976 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000977 "XCHG(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000978
979def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000980 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000981 let NumMicroOps = 2;
982 let ResourceCycles = [1,1];
983}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000984def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
985 "MMX_PSLLQrm",
986 "MMX_PSLLWrm",
987 "MMX_PSRADrm",
988 "MMX_PSRAWrm",
989 "MMX_PSRLDrm",
990 "MMX_PSRLQrm",
991 "MMX_PSRLWrm",
992 "VCVTPH2PSrm",
993 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000994
Gadi Haber2cf601f2017-12-08 09:48:44 +0000995def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
996 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000997 let NumMicroOps = 2;
998 let ResourceCycles = [1,1];
999}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001000def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
1001 "(V?)CVTSS2SDrm",
1002 "VPSLLVQrm",
1003 "VPSRLVQrm",
1004 "VTESTPDrm",
1005 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001006
1007def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1008 let Latency = 8;
1009 let NumMicroOps = 2;
1010 let ResourceCycles = [1,1];
1011}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001012def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1013 "VPSLLQYrm",
1014 "VPSLLVQYrm",
1015 "VPSLLWYrm",
1016 "VPSRADYrm",
1017 "VPSRAWYrm",
1018 "VPSRLDYrm",
1019 "VPSRLQYrm",
1020 "VPSRLVQYrm",
1021 "VPSRLWYrm",
1022 "VTESTPDYrm",
1023 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001024
1025def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1026 let Latency = 8;
1027 let NumMicroOps = 2;
1028 let ResourceCycles = [1,1];
1029}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001030def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1031 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001032 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001033def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001034 "FCOM64m",
1035 "FCOMP32m",
1036 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001037 "MMX_CVTPI2PSirm",
1038 "MMX_CVTPS2PIirm",
1039 "MMX_CVTTPS2PIirm",
1040 "PDEP(32|64)rm",
1041 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001042 "(V?)ADDSDrm",
1043 "(V?)ADDSSrm",
1044 "(V?)CMPSDrm",
1045 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001046 "(V?)MAX(C?)SDrm",
1047 "(V?)MAX(C?)SSrm",
1048 "(V?)MIN(C?)SDrm",
1049 "(V?)MIN(C?)SSrm",
1050 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001051 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001052
1053def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001054 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001055 let NumMicroOps = 2;
1056 let ResourceCycles = [1,1];
1057}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001058def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1059 "(V?)ANDNPDrm",
1060 "(V?)ANDNPSrm",
1061 "(V?)ANDPDrm",
1062 "(V?)ANDPSrm",
1063 "(V?)INSERTPSrm",
1064 "(V?)ORPDrm",
1065 "(V?)ORPSrm",
1066 "(V?)PACKSSDWrm",
1067 "(V?)PACKSSWBrm",
1068 "(V?)PACKUSDWrm",
1069 "(V?)PACKUSWBrm",
1070 "(V?)PALIGNRrmi",
1071 "(V?)PBLENDWrmi",
1072 "VPERMILPDmi",
1073 "VPERMILPDrm",
1074 "VPERMILPSmi",
1075 "VPERMILPSrm",
1076 "(V?)PSHUFBrm",
1077 "(V?)PSHUFDmi",
1078 "(V?)PSHUFHWmi",
1079 "(V?)PSHUFLWmi",
1080 "(V?)PUNPCKHBWrm",
1081 "(V?)PUNPCKHDQrm",
1082 "(V?)PUNPCKHQDQrm",
1083 "(V?)PUNPCKHWDrm",
1084 "(V?)PUNPCKLBWrm",
1085 "(V?)PUNPCKLDQrm",
1086 "(V?)PUNPCKLQDQrm",
1087 "(V?)PUNPCKLWDrm",
1088 "(V?)SHUFPDrmi",
1089 "(V?)SHUFPSrmi",
1090 "(V?)UNPCKHPDrm",
1091 "(V?)UNPCKHPSrm",
1092 "(V?)UNPCKLPDrm",
1093 "(V?)UNPCKLPSrm",
1094 "(V?)XORPDrm",
1095 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001096
Gadi Haber2cf601f2017-12-08 09:48:44 +00001097def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1098 let Latency = 8;
1099 let NumMicroOps = 2;
1100 let ResourceCycles = [1,1];
1101}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001102def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1103 "VANDNPSYrm",
1104 "VANDPDYrm",
1105 "VANDPSYrm",
1106 "VORPDYrm",
1107 "VORPSYrm",
1108 "VPACKSSDWYrm",
1109 "VPACKSSWBYrm",
1110 "VPACKUSDWYrm",
1111 "VPACKUSWBYrm",
1112 "VPALIGNRYrmi",
1113 "VPBLENDWYrmi",
1114 "VPERMILPDYmi",
1115 "VPERMILPDYrm",
1116 "VPERMILPSYmi",
1117 "VPERMILPSYrm",
1118 "VPMOVSXBDYrm",
1119 "VPMOVSXBQYrm",
1120 "VPMOVSXWQYrm",
1121 "VPSHUFBYrm",
1122 "VPSHUFDYmi",
1123 "VPSHUFHWYmi",
1124 "VPSHUFLWYmi",
1125 "VPUNPCKHBWYrm",
1126 "VPUNPCKHDQYrm",
1127 "VPUNPCKHQDQYrm",
1128 "VPUNPCKHWDYrm",
1129 "VPUNPCKLBWYrm",
1130 "VPUNPCKLDQYrm",
1131 "VPUNPCKLQDQYrm",
1132 "VPUNPCKLWDYrm",
1133 "VSHUFPDYrmi",
1134 "VSHUFPSYrmi",
1135 "VUNPCKHPDYrm",
1136 "VUNPCKHPSYrm",
1137 "VUNPCKLPDYrm",
1138 "VUNPCKLPSYrm",
1139 "VXORPDYrm",
1140 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001141
1142def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1143 let Latency = 6;
1144 let NumMicroOps = 2;
1145 let ResourceCycles = [1,1];
1146}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001147def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1148 "MMX_PINSRWrm",
1149 "MMX_PSHUFBrm",
1150 "MMX_PSHUFWmi",
1151 "MMX_PUNPCKHBWirm",
1152 "MMX_PUNPCKHDQirm",
1153 "MMX_PUNPCKHWDirm",
1154 "MMX_PUNPCKLBWirm",
1155 "MMX_PUNPCKLDQirm",
1156 "MMX_PUNPCKLWDirm",
1157 "(V?)MOVHPDrm",
1158 "(V?)MOVHPSrm",
1159 "(V?)MOVLPDrm",
1160 "(V?)MOVLPSrm",
1161 "(V?)PINSRBrm",
1162 "(V?)PINSRDrm",
1163 "(V?)PINSRQrm",
1164 "(V?)PINSRWrm",
1165 "(V?)PMOVSXBDrm",
1166 "(V?)PMOVSXBQrm",
1167 "(V?)PMOVSXBWrm",
1168 "(V?)PMOVSXDQrm",
1169 "(V?)PMOVSXWDrm",
1170 "(V?)PMOVSXWQrm",
1171 "(V?)PMOVZXBDrm",
1172 "(V?)PMOVZXBQrm",
1173 "(V?)PMOVZXBWrm",
1174 "(V?)PMOVZXDQrm",
1175 "(V?)PMOVZXWDrm",
1176 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001177
Gadi Haberd76f7b82017-08-28 10:04:16 +00001178def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001179 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001180 let NumMicroOps = 2;
1181 let ResourceCycles = [1,1];
1182}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001183def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1184 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001185
1186def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001187 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001188 let NumMicroOps = 2;
1189 let ResourceCycles = [1,1];
1190}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001191def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1192 "RORX(32|64)mi",
1193 "SARX(32|64)rm",
1194 "SHLX(32|64)rm",
1195 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001196
1197def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001198 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001199 let NumMicroOps = 2;
1200 let ResourceCycles = [1,1];
1201}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001202def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1203 "BLSI(32|64)rm",
1204 "BLSMSK(32|64)rm",
1205 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001206 "MMX_PABSBrm",
1207 "MMX_PABSDrm",
1208 "MMX_PABSWrm",
1209 "MMX_PADDBirm",
1210 "MMX_PADDDirm",
1211 "MMX_PADDQirm",
1212 "MMX_PADDSBirm",
1213 "MMX_PADDSWirm",
1214 "MMX_PADDUSBirm",
1215 "MMX_PADDUSWirm",
1216 "MMX_PADDWirm",
1217 "MMX_PAVGBirm",
1218 "MMX_PAVGWirm",
1219 "MMX_PCMPEQBirm",
1220 "MMX_PCMPEQDirm",
1221 "MMX_PCMPEQWirm",
1222 "MMX_PCMPGTBirm",
1223 "MMX_PCMPGTDirm",
1224 "MMX_PCMPGTWirm",
1225 "MMX_PMAXSWirm",
1226 "MMX_PMAXUBirm",
1227 "MMX_PMINSWirm",
1228 "MMX_PMINUBirm",
1229 "MMX_PSIGNBrm",
1230 "MMX_PSIGNDrm",
1231 "MMX_PSIGNWrm",
1232 "MMX_PSUBBirm",
1233 "MMX_PSUBDirm",
1234 "MMX_PSUBQirm",
1235 "MMX_PSUBSBirm",
1236 "MMX_PSUBSWirm",
1237 "MMX_PSUBUSBirm",
1238 "MMX_PSUBUSWirm",
1239 "MMX_PSUBWirm",
1240 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001241
1242def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1243 let Latency = 7;
1244 let NumMicroOps = 2;
1245 let ResourceCycles = [1,1];
1246}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001247def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1248 "(V?)PABSDrm",
1249 "(V?)PABSWrm",
1250 "(V?)PADDBrm",
1251 "(V?)PADDDrm",
1252 "(V?)PADDQrm",
1253 "(V?)PADDSBrm",
1254 "(V?)PADDSWrm",
1255 "(V?)PADDUSBrm",
1256 "(V?)PADDUSWrm",
1257 "(V?)PADDWrm",
1258 "(V?)PAVGBrm",
1259 "(V?)PAVGWrm",
1260 "(V?)PCMPEQBrm",
1261 "(V?)PCMPEQDrm",
1262 "(V?)PCMPEQQrm",
1263 "(V?)PCMPEQWrm",
1264 "(V?)PCMPGTBrm",
1265 "(V?)PCMPGTDrm",
1266 "(V?)PCMPGTWrm",
1267 "(V?)PMAXSBrm",
1268 "(V?)PMAXSDrm",
1269 "(V?)PMAXSWrm",
1270 "(V?)PMAXUBrm",
1271 "(V?)PMAXUDrm",
1272 "(V?)PMAXUWrm",
1273 "(V?)PMINSBrm",
1274 "(V?)PMINSDrm",
1275 "(V?)PMINSWrm",
1276 "(V?)PMINUBrm",
1277 "(V?)PMINUDrm",
1278 "(V?)PMINUWrm",
1279 "(V?)PSIGNBrm",
1280 "(V?)PSIGNDrm",
1281 "(V?)PSIGNWrm",
1282 "(V?)PSUBBrm",
1283 "(V?)PSUBDrm",
1284 "(V?)PSUBQrm",
1285 "(V?)PSUBSBrm",
1286 "(V?)PSUBSWrm",
1287 "(V?)PSUBUSBrm",
1288 "(V?)PSUBUSWrm",
1289 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001290
1291def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1292 let Latency = 8;
1293 let NumMicroOps = 2;
1294 let ResourceCycles = [1,1];
1295}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001296def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1297 "VPABSDYrm",
1298 "VPABSWYrm",
1299 "VPADDBYrm",
1300 "VPADDDYrm",
1301 "VPADDQYrm",
1302 "VPADDSBYrm",
1303 "VPADDSWYrm",
1304 "VPADDUSBYrm",
1305 "VPADDUSWYrm",
1306 "VPADDWYrm",
1307 "VPAVGBYrm",
1308 "VPAVGWYrm",
1309 "VPCMPEQBYrm",
1310 "VPCMPEQDYrm",
1311 "VPCMPEQQYrm",
1312 "VPCMPEQWYrm",
1313 "VPCMPGTBYrm",
1314 "VPCMPGTDYrm",
1315 "VPCMPGTWYrm",
1316 "VPMAXSBYrm",
1317 "VPMAXSDYrm",
1318 "VPMAXSWYrm",
1319 "VPMAXUBYrm",
1320 "VPMAXUDYrm",
1321 "VPMAXUWYrm",
1322 "VPMINSBYrm",
1323 "VPMINSDYrm",
1324 "VPMINSWYrm",
1325 "VPMINUBYrm",
1326 "VPMINUDYrm",
1327 "VPMINUWYrm",
1328 "VPSIGNBYrm",
1329 "VPSIGNDYrm",
1330 "VPSIGNWYrm",
1331 "VPSUBBYrm",
1332 "VPSUBDYrm",
1333 "VPSUBQYrm",
1334 "VPSUBSBYrm",
1335 "VPSUBSWYrm",
1336 "VPSUBUSBYrm",
1337 "VPSUBUSWYrm",
1338 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001339
1340def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001341 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001342 let NumMicroOps = 2;
1343 let ResourceCycles = [1,1];
1344}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001345def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1346 "(V?)BLENDPSrmi",
1347 "VINSERTF128rm",
1348 "VINSERTI128rm",
1349 "(V?)PANDNrm",
1350 "(V?)PANDrm",
1351 "VPBLENDDrmi",
1352 "(V?)PORrm",
1353 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001354
Gadi Haber2cf601f2017-12-08 09:48:44 +00001355def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1356 let Latency = 6;
1357 let NumMicroOps = 2;
1358 let ResourceCycles = [1,1];
1359}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001360def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1361 "MMX_PANDirm",
1362 "MMX_PORirm",
1363 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001364
1365def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1366 let Latency = 8;
1367 let NumMicroOps = 2;
1368 let ResourceCycles = [1,1];
1369}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001370def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1371 "VBLENDPSYrmi",
1372 "VPANDNYrm",
1373 "VPANDYrm",
1374 "VPBLENDDYrmi",
1375 "VPORYrm",
1376 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001377
Gadi Haberd76f7b82017-08-28 10:04:16 +00001378def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001379 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380 let NumMicroOps = 2;
1381 let ResourceCycles = [1,1];
1382}
Craig Topper2d451e72018-03-18 08:38:06 +00001383def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001384def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001385
1386def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001387 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001388 let NumMicroOps = 2;
1389 let ResourceCycles = [1,1];
1390}
1391def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1392
1393def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001394 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001395 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001396 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001397}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001398def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1399 "(V?)PEXTRBmr",
1400 "(V?)PEXTRDmr",
1401 "(V?)PEXTRQmr",
1402 "(V?)PEXTRWmr",
1403 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001404
Gadi Haberd76f7b82017-08-28 10:04:16 +00001405def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001406 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001407 let NumMicroOps = 3;
1408 let ResourceCycles = [1,1,1];
1409}
1410def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001411
Gadi Haberd76f7b82017-08-28 10:04:16 +00001412def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
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<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1418
1419def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
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_16], (instregex "MOVBE16mr")>;
1425
1426def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
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}
Craig Topper2d451e72018-03-18 08:38:06 +00001431def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001432def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1433 "PUSH64i8",
1434 "STOSB",
1435 "STOSL",
1436 "STOSQ",
1437 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001438
1439def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001440 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001441 let NumMicroOps = 4;
1442 let ResourceCycles = [1,1,1,1];
1443}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001444def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1445 "BTR(16|32|64)mi8",
1446 "BTS(16|32|64)mi8",
1447 "SAR(8|16|32|64)m1",
1448 "SAR(8|16|32|64)mi",
1449 "SHL(8|16|32|64)m1",
1450 "SHL(8|16|32|64)mi",
1451 "SHR(8|16|32|64)m1",
1452 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001453
1454def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001455 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001456 let NumMicroOps = 4;
1457 let ResourceCycles = [1,1,1,1];
1458}
Craig Topperf0d04262018-04-06 16:16:48 +00001459def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1460 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001461
1462def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001463 let Latency = 2;
1464 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001465 let ResourceCycles = [2];
1466}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001467def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1468 "BLENDVPSrr0",
1469 "MMX_PINSRWrr",
1470 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001471 "VBLENDVPD(Y?)rr",
1472 "VBLENDVPS(Y?)rr",
1473 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001474 "(V?)PINSRBrr",
1475 "(V?)PINSRDrr",
1476 "(V?)PINSRQrr",
1477 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001478
Gadi Haberd76f7b82017-08-28 10:04:16 +00001479def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1480 let Latency = 2;
1481 let NumMicroOps = 2;
1482 let ResourceCycles = [2];
1483}
1484def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1485
1486def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1487 let Latency = 2;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [2];
1490}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001491def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1492 "ROL(8|16|32|64)ri",
1493 "ROR(8|16|32|64)r1",
1494 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001495
1496def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1497 let Latency = 2;
1498 let NumMicroOps = 2;
1499 let ResourceCycles = [2];
1500}
1501def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1502def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1503def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1504def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1505
1506def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1507 let Latency = 2;
1508 let NumMicroOps = 2;
1509 let ResourceCycles = [1,1];
1510}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001511def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1512 "VCVTPH2PSYrr",
1513 "VCVTPH2PSrr",
1514 "(V?)CVTPS2PDrr",
1515 "(V?)CVTSS2SDrr",
1516 "(V?)EXTRACTPSrr",
1517 "(V?)PEXTRBrr",
1518 "(V?)PEXTRDrr",
1519 "(V?)PEXTRQrr",
1520 "(V?)PEXTRWrr",
1521 "(V?)PSLLDrr",
1522 "(V?)PSLLQrr",
1523 "(V?)PSLLWrr",
1524 "(V?)PSRADrr",
1525 "(V?)PSRAWrr",
1526 "(V?)PSRLDrr",
1527 "(V?)PSRLQrr",
1528 "(V?)PSRLWrr",
1529 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001530
1531def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1532 let Latency = 2;
1533 let NumMicroOps = 2;
1534 let ResourceCycles = [1,1];
1535}
1536def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1537
1538def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1539 let Latency = 2;
1540 let NumMicroOps = 2;
1541 let ResourceCycles = [1,1];
1542}
1543def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1544
1545def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1546 let Latency = 2;
1547 let NumMicroOps = 2;
1548 let ResourceCycles = [1,1];
1549}
Craig Topper498875f2018-04-04 17:54:19 +00001550def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1551
1552def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1553 let Latency = 1;
1554 let NumMicroOps = 1;
1555 let ResourceCycles = [1];
1556}
1557def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001558
1559def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1560 let Latency = 2;
1561 let NumMicroOps = 2;
1562 let ResourceCycles = [1,1];
1563}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001564def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1565def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1566 "ADC(8|16|32|64)rr",
1567 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001568 "SBB(8|16|32|64)ri",
1569 "SBB(8|16|32|64)rr",
1570 "SBB(8|16|32|64)i",
1571 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001572
1573def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001574 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001575 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001576 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001577}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001578def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1579 "BLENDVPSrm0",
1580 "PBLENDVBrm0",
1581 "VBLENDVPDrm",
1582 "VBLENDVPSrm",
1583 "VMASKMOVPDrm",
1584 "VMASKMOVPSrm",
1585 "VPBLENDVBrm",
1586 "VPMASKMOVDrm",
1587 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001588
Gadi Haber2cf601f2017-12-08 09:48:44 +00001589def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1590 let Latency = 9;
1591 let NumMicroOps = 3;
1592 let ResourceCycles = [2,1];
1593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001594def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1595 "VBLENDVPSYrm",
1596 "VMASKMOVPDYrm",
1597 "VMASKMOVPSYrm",
1598 "VPBLENDVBYrm",
1599 "VPMASKMOVDYrm",
1600 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001601
1602def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1603 let Latency = 7;
1604 let NumMicroOps = 3;
1605 let ResourceCycles = [2,1];
1606}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001607def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1608 "MMX_PACKSSWBirm",
1609 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001610
Gadi Haberd76f7b82017-08-28 10:04:16 +00001611def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001612 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001613 let NumMicroOps = 3;
1614 let ResourceCycles = [1,2];
1615}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001616def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1617 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001618
1619def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001620 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001621 let NumMicroOps = 3;
1622 let ResourceCycles = [1,1,1];
1623}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001624def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1625 "(V?)PSLLQrm",
1626 "(V?)PSLLWrm",
1627 "(V?)PSRADrm",
1628 "(V?)PSRAWrm",
1629 "(V?)PSRLDrm",
1630 "(V?)PSRLQrm",
1631 "(V?)PSRLWrm",
1632 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001633
1634def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001635 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001636 let NumMicroOps = 3;
1637 let ResourceCycles = [1,1,1];
1638}
1639def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1640
1641def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
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}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001646def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001647
1648def HWWriteResGroup41 : SchedWriteRes<[HWPort6,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<[HWWriteResGroup41], (instregex "LRETQ",
1654 "RETL",
1655 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001656
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001658 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001659 let NumMicroOps = 3;
1660 let ResourceCycles = [1,1,1];
1661}
Craig Topperc50570f2018-04-06 17:12:18 +00001662def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1663 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001664
1665def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001666 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001667 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001668 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001669}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001671
Gadi Haberd76f7b82017-08-28 10:04:16 +00001672def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001673 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001674 let NumMicroOps = 4;
1675 let ResourceCycles = [1,1,1,1];
1676}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001677def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1678 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001679
1680def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001681 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001682 let NumMicroOps = 5;
1683 let ResourceCycles = [1,1,1,2];
1684}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001685def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1686 "ROL(8|16|32|64)mi",
1687 "ROR(8|16|32|64)m1",
1688 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001689
1690def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001691 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001692 let NumMicroOps = 5;
1693 let ResourceCycles = [1,1,1,2];
1694}
Craig Topper13a16502018-03-19 00:56:09 +00001695def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001696
1697def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,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,1,1];
1701}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001702def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1703 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001704
Gadi Haberd76f7b82017-08-28 10:04:16 +00001705def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1706 let Latency = 3;
1707 let NumMicroOps = 1;
1708 let ResourceCycles = [1];
1709}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001710def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1711def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1712 "ADD_FST0r",
1713 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001714 "MMX_CVTPI2PSirr",
1715 "PDEP(32|64)rr",
1716 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001717 "SHLD(16|32|64)rri8",
1718 "SHRD(16|32|64)rri8",
1719 "SUBR_FPrST0",
1720 "SUBR_FST0r",
1721 "SUBR_FrST0",
1722 "SUB_FPrST0",
1723 "SUB_FST0r",
1724 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001725 "(V?)ADDPD(Y?)rr",
1726 "(V?)ADDPS(Y?)rr",
1727 "(V?)ADDSDrr",
1728 "(V?)ADDSSrr",
1729 "(V?)ADDSUBPD(Y?)rr",
1730 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001731 "(V?)CVTDQ2PS(Y?)rr",
1732 "(V?)CVTPS2DQ(Y?)rr",
1733 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001734 "(V?)SUBPD(Y?)rr",
1735 "(V?)SUBPS(Y?)rr",
1736 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001737 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001738
Clement Courbet327fac42018-03-07 08:14:02 +00001739def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001740 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00001741 let NumMicroOps = 2;
1742 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001743}
Clement Courbet327fac42018-03-07 08:14:02 +00001744def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001745
1746def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1747 let Latency = 3;
1748 let NumMicroOps = 1;
1749 let ResourceCycles = [1];
1750}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001751def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1752 "VBROADCASTSSYrr",
1753 "VEXTRACTF128rr",
1754 "VEXTRACTI128rr",
1755 "VINSERTF128rr",
1756 "VINSERTI128rr",
1757 "VPBROADCASTBYrr",
1758 "VPBROADCASTBrr",
1759 "VPBROADCASTDYrr",
1760 "VPBROADCASTQYrr",
1761 "VPBROADCASTWYrr",
1762 "VPBROADCASTWrr",
1763 "VPERM2F128rr",
1764 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001765 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001766 "VPERMQYri",
1767 "VPMOVSXBDYrr",
1768 "VPMOVSXBQYrr",
1769 "VPMOVSXBWYrr",
1770 "VPMOVSXDQYrr",
1771 "VPMOVSXWDYrr",
1772 "VPMOVSXWQYrr",
1773 "VPMOVZXBDYrr",
1774 "VPMOVZXBQYrr",
1775 "VPMOVZXBWYrr",
1776 "VPMOVZXDQYrr",
1777 "VPMOVZXWDYrr",
1778 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001779
1780def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001781 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001782 let NumMicroOps = 2;
1783 let ResourceCycles = [1,1];
1784}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001785def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1786 "(V?)ADDPSrm",
1787 "(V?)ADDSUBPDrm",
1788 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001789 "(V?)CVTDQ2PSrm",
1790 "(V?)CVTPS2DQrm",
1791 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001792 "(V?)SUBPDrm",
1793 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001794
Gadi Haber2cf601f2017-12-08 09:48:44 +00001795def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1796 let Latency = 10;
1797 let NumMicroOps = 2;
1798 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001799}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001800def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1801 "ADD_F64m",
1802 "ILD_F16m",
1803 "ILD_F32m",
1804 "ILD_F64m",
1805 "SUBR_F32m",
1806 "SUBR_F64m",
1807 "SUB_F32m",
1808 "SUB_F64m",
1809 "VADDPDYrm",
1810 "VADDPSYrm",
1811 "VADDSUBPDYrm",
1812 "VADDSUBPSYrm",
1813 "VCMPPDYrmi",
1814 "VCMPPSYrmi",
1815 "VCVTDQ2PSYrm",
1816 "VCVTPS2DQYrm",
1817 "VCVTTPS2DQYrm",
1818 "VMAX(C?)PDYrm",
1819 "VMAX(C?)PSYrm",
1820 "VMIN(C?)PDYrm",
1821 "VMIN(C?)PSYrm",
1822 "VSUBPDYrm",
1823 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001824
1825def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001826 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001827 let NumMicroOps = 2;
1828 let ResourceCycles = [1,1];
1829}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001830def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1831 "VPERM2I128rm",
1832 "VPERMDYrm",
1833 "VPERMPDYmi",
1834 "VPERMPSYrm",
1835 "VPERMQYmi",
1836 "VPMOVZXBDYrm",
1837 "VPMOVZXBQYrm",
1838 "VPMOVZXBWYrm",
1839 "VPMOVZXDQYrm",
1840 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001841
Gadi Haber2cf601f2017-12-08 09:48:44 +00001842def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1843 let Latency = 9;
1844 let NumMicroOps = 2;
1845 let ResourceCycles = [1,1];
1846}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001847def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1848 "VPMOVSXDQYrm",
1849 "VPMOVSXWDYrm",
1850 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001851
Gadi Haberd76f7b82017-08-28 10:04:16 +00001852def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1853 let Latency = 3;
1854 let NumMicroOps = 3;
1855 let ResourceCycles = [3];
1856}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001857def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1858 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001859
1860def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1861 let Latency = 3;
1862 let NumMicroOps = 3;
1863 let ResourceCycles = [2,1];
1864}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001865def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1866 "VPSRAVD(Y?)rr",
1867 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868
1869def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1870 let Latency = 3;
1871 let NumMicroOps = 3;
1872 let ResourceCycles = [2,1];
1873}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001874def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1875 "MMX_PHADDSWrr",
1876 "MMX_PHADDWrr",
1877 "MMX_PHSUBDrr",
1878 "MMX_PHSUBSWrr",
1879 "MMX_PHSUBWrr",
1880 "(V?)PHADDD(Y?)rr",
1881 "(V?)PHADDSW(Y?)rr",
1882 "(V?)PHADDW(Y?)rr",
1883 "(V?)PHSUBD(Y?)rr",
1884 "(V?)PHSUBSW(Y?)rr",
1885 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001886
1887def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1888 let Latency = 3;
1889 let NumMicroOps = 3;
1890 let ResourceCycles = [2,1];
1891}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001892def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1893 "MMX_PACKSSWBirr",
1894 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001895
1896def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1897 let Latency = 3;
1898 let NumMicroOps = 3;
1899 let ResourceCycles = [1,2];
1900}
1901def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1902
1903def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1904 let Latency = 3;
1905 let NumMicroOps = 3;
1906 let ResourceCycles = [1,2];
1907}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001908def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1909 "RCL(8|16|32|64)r1",
1910 "RCL(8|16|32|64)ri",
1911 "RCR(8|16|32|64)r1",
1912 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001913
1914def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1915 let Latency = 3;
1916 let NumMicroOps = 3;
1917 let ResourceCycles = [2,1];
1918}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001919def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1920 "ROR(8|16|32|64)rCL",
1921 "SAR(8|16|32|64)rCL",
1922 "SHL(8|16|32|64)rCL",
1923 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001924
1925def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001926 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001927 let NumMicroOps = 3;
1928 let ResourceCycles = [1,1,1];
1929}
1930def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1931
1932def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001933 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001934 let NumMicroOps = 3;
1935 let ResourceCycles = [1,1,1];
1936}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001937def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1938 "ISTT_FP32m",
1939 "ISTT_FP64m",
1940 "IST_F16m",
1941 "IST_F32m",
1942 "IST_FP16m",
1943 "IST_FP32m",
1944 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001945
1946def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001947 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001948 let NumMicroOps = 4;
1949 let ResourceCycles = [2,1,1];
1950}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001951def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1952 "VPSRAVDYrm",
1953 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001954
1955def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1956 let Latency = 9;
1957 let NumMicroOps = 4;
1958 let ResourceCycles = [2,1,1];
1959}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001960def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1961 "VPSRAVDrm",
1962 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963
1964def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001965 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001966 let NumMicroOps = 4;
1967 let ResourceCycles = [2,1,1];
1968}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001969def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
1970 "MMX_PHADDSWrm",
1971 "MMX_PHADDWrm",
1972 "MMX_PHSUBDrm",
1973 "MMX_PHSUBSWrm",
1974 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001975
1976def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1977 let Latency = 10;
1978 let NumMicroOps = 4;
1979 let ResourceCycles = [2,1,1];
1980}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001981def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1982 "VPHADDSWYrm",
1983 "VPHADDWYrm",
1984 "VPHSUBDYrm",
1985 "VPHSUBSWYrm",
1986 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987
1988def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1989 let Latency = 9;
1990 let NumMicroOps = 4;
1991 let ResourceCycles = [2,1,1];
1992}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001993def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1994 "(V?)PHADDSWrm",
1995 "(V?)PHADDWrm",
1996 "(V?)PHSUBDrm",
1997 "(V?)PHSUBSWrm",
1998 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001999
2000def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002001 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002002 let NumMicroOps = 4;
2003 let ResourceCycles = [1,1,2];
2004}
Craig Topperf4cd9082018-01-19 05:47:32 +00002005def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002006
2007def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002008 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002009 let NumMicroOps = 5;
2010 let ResourceCycles = [1,1,1,2];
2011}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002012def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2013 "RCL(8|16|32|64)mi",
2014 "RCR(8|16|32|64)m1",
2015 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002016
2017def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002018 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002019 let NumMicroOps = 5;
2020 let ResourceCycles = [1,1,2,1];
2021}
Craig Topper13a16502018-03-19 00:56:09 +00002022def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002023
2024def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002025 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002026 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002027 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002028}
Craig Topper9f834812018-04-01 21:54:24 +00002029def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002030
Gadi Haberd76f7b82017-08-28 10:04:16 +00002031def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002032 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002033 let NumMicroOps = 6;
2034 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002035}
Craig Topper9f834812018-04-01 21:54:24 +00002036def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002037 "CMPXCHG(8|16|32|64)rm",
2038 "ROL(8|16|32|64)mCL",
2039 "SAR(8|16|32|64)mCL",
2040 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002041 "SHL(8|16|32|64)mCL",
2042 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00002043def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2044 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002045
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2047 let Latency = 4;
2048 let NumMicroOps = 2;
2049 let ResourceCycles = [1,1];
2050}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002051def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2052 "(V?)CVTSD2SIrr",
2053 "(V?)CVTSS2SI64rr",
2054 "(V?)CVTSS2SIrr",
2055 "(V?)CVTTSD2SI64rr",
2056 "(V?)CVTTSD2SIrr",
2057 "(V?)CVTTSS2SI64rr",
2058 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002059
2060def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2061 let Latency = 4;
2062 let NumMicroOps = 2;
2063 let ResourceCycles = [1,1];
2064}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002065def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2066 "VPSLLDYrr",
2067 "VPSLLQYrr",
2068 "VPSLLWYrr",
2069 "VPSRADYrr",
2070 "VPSRAWYrr",
2071 "VPSRLDYrr",
2072 "VPSRLQYrr",
2073 "VPSRLWYrr",
2074 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002075
2076def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2077 let Latency = 4;
2078 let NumMicroOps = 2;
2079 let ResourceCycles = [1,1];
2080}
2081def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2082
2083def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2084 let Latency = 4;
2085 let NumMicroOps = 2;
2086 let ResourceCycles = [1,1];
2087}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002088def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2089 "MMX_CVTPI2PDirr",
2090 "MMX_CVTPS2PIirr",
2091 "MMX_CVTTPD2PIirr",
2092 "MMX_CVTTPS2PIirr",
2093 "(V?)CVTDQ2PDrr",
2094 "(V?)CVTPD2DQrr",
2095 "(V?)CVTPD2PSrr",
2096 "VCVTPS2PHrr",
2097 "(V?)CVTSD2SSrr",
2098 "(V?)CVTSI642SDrr",
2099 "(V?)CVTSI2SDrr",
2100 "(V?)CVTSI2SSrr",
2101 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002102
2103def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2104 let Latency = 4;
2105 let NumMicroOps = 2;
2106 let ResourceCycles = [1,1];
2107}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002108def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109
2110def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2111 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002112 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002113}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002114def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002115
Gadi Haberd76f7b82017-08-28 10:04:16 +00002116def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002117 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002118 let NumMicroOps = 3;
2119 let ResourceCycles = [2,1];
2120}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002121def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2122 "FICOM32m",
2123 "FICOMP16m",
2124 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002125
2126def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002127 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002128 let NumMicroOps = 3;
2129 let ResourceCycles = [1,1,1];
2130}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002131def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2132 "(V?)CVTSD2SIrm",
2133 "(V?)CVTSS2SI64rm",
2134 "(V?)CVTSS2SIrm",
2135 "(V?)CVTTSD2SI64rm",
2136 "(V?)CVTTSD2SIrm",
2137 "VCVTTSS2SI64rm",
2138 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002139
2140def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002142 let NumMicroOps = 3;
2143 let ResourceCycles = [1,1,1];
2144}
2145def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002146
2147def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2148 let Latency = 11;
2149 let NumMicroOps = 3;
2150 let ResourceCycles = [1,1,1];
2151}
2152def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002153
2154def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002155 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002156 let NumMicroOps = 3;
2157 let ResourceCycles = [1,1,1];
2158}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002159def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2160 "CVTPD2PSrm",
2161 "CVTTPD2DQrm",
2162 "MMX_CVTPD2PIirm",
2163 "MMX_CVTTPD2PIirm",
2164 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002165
2166def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2167 let Latency = 9;
2168 let NumMicroOps = 3;
2169 let ResourceCycles = [1,1,1];
2170}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002171def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2172 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002173
2174def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002175 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002176 let NumMicroOps = 3;
2177 let ResourceCycles = [1,1,1];
2178}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002179def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002180
2181def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
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}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002186def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2187 "VPBROADCASTBrm",
2188 "VPBROADCASTWYrm",
2189 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002190
2191def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2192 let Latency = 4;
2193 let NumMicroOps = 4;
2194 let ResourceCycles = [4];
2195}
2196def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2197
2198def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2199 let Latency = 4;
2200 let NumMicroOps = 4;
2201 let ResourceCycles = [1,3];
2202}
2203def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2204
2205def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2206 let Latency = 4;
2207 let NumMicroOps = 4;
2208 let ResourceCycles = [1,1,2];
2209}
2210def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2211
2212def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002213 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002214 let NumMicroOps = 4;
2215 let ResourceCycles = [1,1,1,1];
2216}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002217def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2218 "VMASKMOVPS(Y?)mr",
2219 "VPMASKMOVD(Y?)mr",
2220 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002221
2222def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002223 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002224 let NumMicroOps = 4;
2225 let ResourceCycles = [1,1,1,1];
2226}
2227def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2228
2229def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002230 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002231 let NumMicroOps = 4;
2232 let ResourceCycles = [1,1,1,1];
2233}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002234def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2235 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002236
2237def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002238 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002239 let NumMicroOps = 5;
2240 let ResourceCycles = [1,2,1,1];
2241}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002242def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2243 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002244
2245def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002246 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002247 let NumMicroOps = 6;
2248 let ResourceCycles = [1,1,4];
2249}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002250def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2251 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002252
2253def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002254 let Latency = 5;
2255 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002256 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002257}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002258def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2259 "MMX_PMADDWDirr",
2260 "MMX_PMULHRSWrr",
2261 "MMX_PMULHUWirr",
2262 "MMX_PMULHWirr",
2263 "MMX_PMULLWirr",
2264 "MMX_PMULUDQirr",
2265 "MMX_PSADBWirr",
2266 "MUL_FPrST0",
2267 "MUL_FST0r",
2268 "MUL_FrST0",
2269 "(V?)PCMPGTQ(Y?)rr",
2270 "(V?)PHMINPOSUWrr",
2271 "(V?)PMADDUBSW(Y?)rr",
2272 "(V?)PMADDWD(Y?)rr",
2273 "(V?)PMULDQ(Y?)rr",
2274 "(V?)PMULHRSW(Y?)rr",
2275 "(V?)PMULHUW(Y?)rr",
2276 "(V?)PMULHW(Y?)rr",
2277 "(V?)PMULLW(Y?)rr",
2278 "(V?)PMULUDQ(Y?)rr",
2279 "(V?)PSADBW(Y?)rr",
2280 "(V?)RCPPSr",
2281 "(V?)RCPSSr",
2282 "(V?)RSQRTPSr",
2283 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002284
Gadi Haberd76f7b82017-08-28 10:04:16 +00002285def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002286 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002287 let NumMicroOps = 1;
2288 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002289}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002290def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2291 "(V?)MULPS(Y?)rr",
2292 "(V?)MULSDrr",
2293 "(V?)MULSSrr",
2294 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2295 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002296
Gadi Haberd76f7b82017-08-28 10:04:16 +00002297def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002298 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002299 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002300 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002301}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002302def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2303 "MMX_PMADDWDirm",
2304 "MMX_PMULHRSWrm",
2305 "MMX_PMULHUWirm",
2306 "MMX_PMULHWirm",
2307 "MMX_PMULLWirm",
2308 "MMX_PMULUDQirm",
2309 "MMX_PSADBWirm",
2310 "(V?)RCPSSm",
2311 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002312
Craig Topper8104f262018-04-02 05:33:28 +00002313def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002314 let Latency = 16;
2315 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002316 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002317}
2318def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2319
Craig Topper8104f262018-04-02 05:33:28 +00002320def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002321 let Latency = 18;
2322 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002323 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002324}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002325def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002326
2327def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2328 let Latency = 11;
2329 let NumMicroOps = 2;
2330 let ResourceCycles = [1,1];
2331}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002332def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2333 "(V?)PHMINPOSUWrm",
2334 "(V?)PMADDUBSWrm",
2335 "(V?)PMADDWDrm",
2336 "(V?)PMULDQrm",
2337 "(V?)PMULHRSWrm",
2338 "(V?)PMULHUWrm",
2339 "(V?)PMULHWrm",
2340 "(V?)PMULLWrm",
2341 "(V?)PMULUDQrm",
2342 "(V?)PSADBWrm",
2343 "(V?)RCPPSm",
2344 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002345
2346def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2347 let Latency = 12;
2348 let NumMicroOps = 2;
2349 let ResourceCycles = [1,1];
2350}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002351def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2352 "MUL_F64m",
2353 "VPCMPGTQYrm",
2354 "VPMADDUBSWYrm",
2355 "VPMADDWDYrm",
2356 "VPMULDQYrm",
2357 "VPMULHRSWYrm",
2358 "VPMULHUWYrm",
2359 "VPMULHWYrm",
2360 "VPMULLWYrm",
2361 "VPMULUDQYrm",
2362 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002363
Gadi Haberd76f7b82017-08-28 10:04:16 +00002364def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002365 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002366 let NumMicroOps = 2;
2367 let ResourceCycles = [1,1];
2368}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002369def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2370 "(V?)MULPSrm",
2371 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002372
2373def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2374 let Latency = 12;
2375 let NumMicroOps = 2;
2376 let ResourceCycles = [1,1];
2377}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002378def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2379 "VMULPSYrm",
2380 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002381
2382def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2383 let Latency = 10;
2384 let NumMicroOps = 2;
2385 let ResourceCycles = [1,1];
2386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002387def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2388 "(V?)MULSSrm",
2389 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390
2391def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2392 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002393 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002394 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002395}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002396def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2397 "(V?)HADDPD(Y?)rr",
2398 "(V?)HADDPS(Y?)rr",
2399 "(V?)HSUBPD(Y?)rr",
2400 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002401
Gadi Haberd76f7b82017-08-28 10:04:16 +00002402def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2403 let Latency = 5;
2404 let NumMicroOps = 3;
2405 let ResourceCycles = [1,1,1];
2406}
2407def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2408
2409def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002410 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002411 let NumMicroOps = 3;
2412 let ResourceCycles = [1,1,1];
2413}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002414def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002415
2416def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002417 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002418 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002419 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002420}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002421def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2422 "(V?)HADDPSrm",
2423 "(V?)HSUBPDrm",
2424 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002425
Gadi Haber2cf601f2017-12-08 09:48:44 +00002426def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2427 let Latency = 12;
2428 let NumMicroOps = 4;
2429 let ResourceCycles = [1,2,1];
2430}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002431def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2432 "VHADDPSYrm",
2433 "VHSUBPDYrm",
2434 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002435
Gadi Haberd76f7b82017-08-28 10:04:16 +00002436def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002437 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002438 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002440}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002442
Gadi Haberd76f7b82017-08-28 10:04:16 +00002443def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002444 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002445 let NumMicroOps = 4;
2446 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002447}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002448def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002449
Gadi Haberd76f7b82017-08-28 10:04:16 +00002450def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2451 let Latency = 5;
2452 let NumMicroOps = 5;
2453 let ResourceCycles = [1,4];
2454}
2455def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2456
2457def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2458 let Latency = 5;
2459 let NumMicroOps = 5;
2460 let ResourceCycles = [1,4];
2461}
2462def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2463
2464def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2465 let Latency = 5;
2466 let NumMicroOps = 5;
2467 let ResourceCycles = [2,3];
2468}
Craig Topper13a16502018-03-19 00:56:09 +00002469def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002470
2471def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2472 let Latency = 6;
2473 let NumMicroOps = 2;
2474 let ResourceCycles = [1,1];
2475}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002476def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2477 "VCVTPD2DQYrr",
2478 "VCVTPD2PSYrr",
2479 "VCVTPS2PHYrr",
2480 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002481
2482def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002483 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002484 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002485 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002486}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002487def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2488 "ADD_FI32m",
2489 "SUBR_FI16m",
2490 "SUBR_FI32m",
2491 "SUB_FI16m",
2492 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002493 "VROUNDPDYm",
2494 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002495
Gadi Haber2cf601f2017-12-08 09:48:44 +00002496def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2497 let Latency = 12;
2498 let NumMicroOps = 3;
2499 let ResourceCycles = [2,1];
2500}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002501def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2502 "(V?)ROUNDPSm",
2503 "(V?)ROUNDSDm",
2504 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002505
Gadi Haberd76f7b82017-08-28 10:04:16 +00002506def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002507 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002508 let NumMicroOps = 3;
2509 let ResourceCycles = [1,1,1];
2510}
2511def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2512
2513def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2514 let Latency = 6;
2515 let NumMicroOps = 4;
2516 let ResourceCycles = [1,1,2];
2517}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002518def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2519 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002520
2521def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002522 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002523 let NumMicroOps = 4;
2524 let ResourceCycles = [1,1,1,1];
2525}
2526def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2527
2528def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2529 let Latency = 6;
2530 let NumMicroOps = 4;
2531 let ResourceCycles = [1,1,1,1];
2532}
2533def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2534
2535def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2536 let Latency = 6;
2537 let NumMicroOps = 6;
2538 let ResourceCycles = [1,5];
2539}
2540def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2541
2542def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002543 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002544 let NumMicroOps = 6;
2545 let ResourceCycles = [1,1,1,1,2];
2546}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002547def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2548 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549
Gadi Haberd76f7b82017-08-28 10:04:16 +00002550def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2551 let Latency = 7;
2552 let NumMicroOps = 3;
2553 let ResourceCycles = [1,2];
2554}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002555def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002556
2557def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002558 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002559 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002560 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002561}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002562def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002563
Gadi Haber2cf601f2017-12-08 09:48:44 +00002564def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2565 let Latency = 14;
2566 let NumMicroOps = 4;
2567 let ResourceCycles = [1,2,1];
2568}
2569def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2570
Gadi Haberd76f7b82017-08-28 10:04:16 +00002571def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2572 let Latency = 7;
2573 let NumMicroOps = 7;
2574 let ResourceCycles = [2,2,1,2];
2575}
Craig Topper2d451e72018-03-18 08:38:06 +00002576def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002577
2578def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002579 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002580 let NumMicroOps = 3;
2581 let ResourceCycles = [1,1,1];
2582}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002583def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2584 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002585
2586def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2587 let Latency = 9;
2588 let NumMicroOps = 3;
2589 let ResourceCycles = [1,1,1];
2590}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002591def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002592
2593def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002594 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002595 let NumMicroOps = 4;
2596 let ResourceCycles = [1,1,1,1];
2597}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002598def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002599
Gadi Haber2cf601f2017-12-08 09:48:44 +00002600def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2601 let Latency = 17;
2602 let NumMicroOps = 3;
2603 let ResourceCycles = [2,1];
2604}
2605def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2606
Gadi Haberd76f7b82017-08-28 10:04:16 +00002607def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002608 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002609 let NumMicroOps = 10;
2610 let ResourceCycles = [1,1,1,4,1,2];
2611}
Craig Topper13a16502018-03-19 00:56:09 +00002612def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002613
Craig Topper8104f262018-04-02 05:33:28 +00002614def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002615 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002616 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002617 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002618}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002619def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2620 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002621
Gadi Haberd76f7b82017-08-28 10:04:16 +00002622def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2623 let Latency = 11;
2624 let NumMicroOps = 3;
2625 let ResourceCycles = [2,1];
2626}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002627def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2628 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002629
Gadi Haberd76f7b82017-08-28 10:04:16 +00002630def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002631 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002632 let NumMicroOps = 4;
2633 let ResourceCycles = [2,1,1];
2634}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002635def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2636 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002637
2638def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2639 let Latency = 11;
2640 let NumMicroOps = 7;
2641 let ResourceCycles = [2,2,3];
2642}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002643def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2644 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002645
2646def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2647 let Latency = 11;
2648 let NumMicroOps = 9;
2649 let ResourceCycles = [1,4,1,3];
2650}
2651def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2652
2653def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2654 let Latency = 11;
2655 let NumMicroOps = 11;
2656 let ResourceCycles = [2,9];
2657}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002658def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002659
2660def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002661 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002662 let NumMicroOps = 14;
2663 let ResourceCycles = [1,1,1,4,2,5];
2664}
2665def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2666
Craig Topper8104f262018-04-02 05:33:28 +00002667def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002668 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002669 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002670 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002671}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002672def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2673 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002674
Craig Topper8104f262018-04-02 05:33:28 +00002675def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002676 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002677 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002678 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002679}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002680def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002681
2682def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002683 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002684 let NumMicroOps = 11;
2685 let ResourceCycles = [2,1,1,3,1,3];
2686}
Craig Topper13a16502018-03-19 00:56:09 +00002687def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002688
Craig Topper8104f262018-04-02 05:33:28 +00002689def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002690 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002691 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002692 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002693}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002694def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002695
Gadi Haberd76f7b82017-08-28 10:04:16 +00002696def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2697 let Latency = 14;
2698 let NumMicroOps = 4;
2699 let ResourceCycles = [2,1,1];
2700}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002701def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002702
2703def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002704 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002705 let NumMicroOps = 5;
2706 let ResourceCycles = [2,1,1,1];
2707}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002708def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002709
Gadi Haber2cf601f2017-12-08 09:48:44 +00002710def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2711 let Latency = 21;
2712 let NumMicroOps = 5;
2713 let ResourceCycles = [2,1,1,1];
2714}
2715def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2716
Gadi Haberd76f7b82017-08-28 10:04:16 +00002717def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2718 let Latency = 14;
2719 let NumMicroOps = 10;
2720 let ResourceCycles = [2,3,1,4];
2721}
2722def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2723
2724def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002725 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002726 let NumMicroOps = 15;
2727 let ResourceCycles = [1,14];
2728}
2729def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2730
2731def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002732 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002733 let NumMicroOps = 8;
2734 let ResourceCycles = [1,1,1,1,1,1,2];
2735}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002736def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2737 "INSL",
2738 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002739
2740def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2741 let Latency = 16;
2742 let NumMicroOps = 16;
2743 let ResourceCycles = [16];
2744}
2745def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2746
2747def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002748 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002749 let NumMicroOps = 19;
2750 let ResourceCycles = [2,1,4,1,1,4,6];
2751}
2752def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2753
2754def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2755 let Latency = 17;
2756 let NumMicroOps = 15;
2757 let ResourceCycles = [2,1,2,4,2,4];
2758}
2759def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2760
Gadi Haberd76f7b82017-08-28 10:04:16 +00002761def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2762 let Latency = 18;
2763 let NumMicroOps = 8;
2764 let ResourceCycles = [1,1,1,5];
2765}
2766def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002767def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002768
Gadi Haberd76f7b82017-08-28 10:04:16 +00002769def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002770 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002771 let NumMicroOps = 19;
2772 let ResourceCycles = [3,1,15];
2773}
Craig Topper391c6f92017-12-10 01:24:08 +00002774def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002775
Gadi Haberd76f7b82017-08-28 10:04:16 +00002776def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2777 let Latency = 20;
2778 let NumMicroOps = 1;
2779 let ResourceCycles = [1];
2780}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002781def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2782 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002783 "DIV_FrST0")>;
2784
2785def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2786 let Latency = 20;
2787 let NumMicroOps = 1;
2788 let ResourceCycles = [1,14];
2789}
2790def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2791 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002792
2793def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002794 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002795 let NumMicroOps = 2;
2796 let ResourceCycles = [1,1];
2797}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002798def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002799 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002800
Craig Topper8104f262018-04-02 05:33:28 +00002801def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002802 let Latency = 26;
2803 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002804 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002805}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002806def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002807
Craig Topper8104f262018-04-02 05:33:28 +00002808def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002809 let Latency = 21;
2810 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002811 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002812}
2813def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2814
Craig Topper8104f262018-04-02 05:33:28 +00002815def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002816 let Latency = 22;
2817 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002818 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002819}
2820def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2821
Craig Topper8104f262018-04-02 05:33:28 +00002822def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002823 let Latency = 25;
2824 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002825 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002826}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002827def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002828
2829def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2830 let Latency = 20;
2831 let NumMicroOps = 10;
2832 let ResourceCycles = [1,2,7];
2833}
2834def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2835
Craig Topper8104f262018-04-02 05:33:28 +00002836def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002837 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002838 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002839 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002840}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002841def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2842 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002843
Craig Topper8104f262018-04-02 05:33:28 +00002844def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002845 let Latency = 21;
2846 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002847 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002848}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002849def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2850 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002851
Craig Topper8104f262018-04-02 05:33:28 +00002852def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002853 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002854 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002855 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002856}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002857def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2858 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002859
2860def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002861 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002862 let NumMicroOps = 3;
2863 let ResourceCycles = [1,1,1];
2864}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002865def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2866 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002867
2868def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2869 let Latency = 24;
2870 let NumMicroOps = 1;
2871 let ResourceCycles = [1];
2872}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002873def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2874 "DIVR_FST0r",
2875 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002876
2877def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002878 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002879 let NumMicroOps = 2;
2880 let ResourceCycles = [1,1];
2881}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002882def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2883 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002884
2885def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002886 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002887 let NumMicroOps = 27;
2888 let ResourceCycles = [1,5,1,1,19];
2889}
2890def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2891
2892def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002893 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002894 let NumMicroOps = 28;
2895 let ResourceCycles = [1,6,1,1,19];
2896}
Craig Topper2d451e72018-03-18 08:38:06 +00002897def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002898
2899def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002900 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002901 let NumMicroOps = 3;
2902 let ResourceCycles = [1,1,1];
2903}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002904def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2905 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002906
Gadi Haberd76f7b82017-08-28 10:04:16 +00002907def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002908 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002909 let NumMicroOps = 23;
2910 let ResourceCycles = [1,5,3,4,10];
2911}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002912def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2913 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002914
2915def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002916 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002917 let NumMicroOps = 23;
2918 let ResourceCycles = [1,5,2,1,4,10];
2919}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002920def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2921 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002922
2923def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2924 let Latency = 31;
2925 let NumMicroOps = 31;
2926 let ResourceCycles = [8,1,21,1];
2927}
2928def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2929
Craig Topper8104f262018-04-02 05:33:28 +00002930def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002931 let Latency = 35;
2932 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002933 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002934}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002935def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2936 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002937
Craig Topper8104f262018-04-02 05:33:28 +00002938def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002939 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002940 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002941 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002942}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002943def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2944 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002945
2946def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002947 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002948 let NumMicroOps = 18;
2949 let ResourceCycles = [1,1,2,3,1,1,1,8];
2950}
2951def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2952
2953def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2954 let Latency = 42;
2955 let NumMicroOps = 22;
2956 let ResourceCycles = [2,20];
2957}
Craig Topper2d451e72018-03-18 08:38:06 +00002958def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002959
2960def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002961 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002962 let NumMicroOps = 64;
2963 let ResourceCycles = [2,2,8,1,10,2,39];
2964}
2965def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002966
2967def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002968 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002969 let NumMicroOps = 88;
2970 let ResourceCycles = [4,4,31,1,2,1,45];
2971}
Craig Topper2d451e72018-03-18 08:38:06 +00002972def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002973
2974def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002975 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002976 let NumMicroOps = 90;
2977 let ResourceCycles = [4,2,33,1,2,1,47];
2978}
Craig Topper2d451e72018-03-18 08:38:06 +00002979def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002980
2981def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2982 let Latency = 75;
2983 let NumMicroOps = 15;
2984 let ResourceCycles = [6,3,6];
2985}
2986def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2987
2988def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2989 let Latency = 98;
2990 let NumMicroOps = 32;
2991 let ResourceCycles = [7,7,3,3,1,11];
2992}
2993def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2994
2995def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2996 let Latency = 112;
2997 let NumMicroOps = 66;
2998 let ResourceCycles = [4,2,4,8,14,34];
2999}
3000def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3001
3002def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003003 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003004 let NumMicroOps = 100;
3005 let ResourceCycles = [9,9,11,8,1,11,21,30];
3006}
3007def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003008
Gadi Haber2cf601f2017-12-08 09:48:44 +00003009def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3010 let Latency = 26;
3011 let NumMicroOps = 12;
3012 let ResourceCycles = [2,2,1,3,2,2];
3013}
Craig Topper17a31182017-12-16 18:35:29 +00003014def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3015 VPGATHERDQrm,
3016 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003017
3018def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3019 let Latency = 24;
3020 let NumMicroOps = 22;
3021 let ResourceCycles = [5,3,4,1,5,4];
3022}
Craig Topper17a31182017-12-16 18:35:29 +00003023def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3024 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003025
3026def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3027 let Latency = 28;
3028 let NumMicroOps = 22;
3029 let ResourceCycles = [5,3,4,1,5,4];
3030}
Craig Topper17a31182017-12-16 18:35:29 +00003031def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003032
3033def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3034 let Latency = 25;
3035 let NumMicroOps = 22;
3036 let ResourceCycles = [5,3,4,1,5,4];
3037}
Craig Topper17a31182017-12-16 18:35:29 +00003038def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003039
3040def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3041 let Latency = 27;
3042 let NumMicroOps = 20;
3043 let ResourceCycles = [3,3,4,1,5,4];
3044}
Craig Topper17a31182017-12-16 18:35:29 +00003045def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3046 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003047
3048def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3049 let Latency = 27;
3050 let NumMicroOps = 34;
3051 let ResourceCycles = [5,3,8,1,9,8];
3052}
Craig Topper17a31182017-12-16 18:35:29 +00003053def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3054 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003055
3056def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3057 let Latency = 23;
3058 let NumMicroOps = 14;
3059 let ResourceCycles = [3,3,2,1,3,2];
3060}
Craig Topper17a31182017-12-16 18:35:29 +00003061def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3062 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003063
3064def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3065 let Latency = 28;
3066 let NumMicroOps = 15;
3067 let ResourceCycles = [3,3,2,1,4,2];
3068}
Craig Topper17a31182017-12-16 18:35:29 +00003069def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003070
3071def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3072 let Latency = 25;
3073 let NumMicroOps = 15;
3074 let ResourceCycles = [3,3,2,1,4,2];
3075}
Craig Topper17a31182017-12-16 18:35:29 +00003076def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3077 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003078
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003079} // SchedModel