blob: 8007f0c1e78da1995214ce1f1eaff727dfbdf2bb [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
104// A folded store needs a cycle on port 4 for the store data, but it does not
105// need an extra port 2/3 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort4]>;
107
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
122// This is for simple LEAs with one or two input operands.
123// The complex ones can only execute on port 1, and they require two cycles on
124// the port to read all inputs. We don't model that.
125def : WriteRes<WriteLEA, [HWPort15]>;
126
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000127// Bit counts.
128defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
129defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
130defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
131defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
132
Craig Topper89310f52018-03-29 20:41:39 +0000133// BMI1 BEXTR, BMI2 BZHI
134defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
135defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
136
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000137// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000138defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000139// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000140def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
141def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
142def : WriteRes<WriteFMove, [HWPort5]>;
143
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000144defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
145defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
146defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
147defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
148defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
149defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
150defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
151defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
152defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
153defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
154defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
155defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
156defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
157defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000158
159// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000160def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
161def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
162def : WriteRes<WriteVecMove, [HWPort015]>;
163
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000164defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
165defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1>;
166defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
167defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000168defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000169defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
170defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
171defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
172defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
173defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
174defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Quentin Colombetca498512014-02-24 19:33:51 +0000175
176// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000177
Quentin Colombetca498512014-02-24 19:33:51 +0000178// Packed Compare Implicit Length Strings, Return Mask
179def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000180 let Latency = 11;
181 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000182 let ResourceCycles = [3];
183}
184def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000185 let Latency = 17;
186 let NumMicroOps = 4;
187 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000188}
189
190// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000191def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
192 let Latency = 19;
193 let NumMicroOps = 9;
194 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000195}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
197 let Latency = 25;
198 let NumMicroOps = 10;
199 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000200}
201
202// Packed Compare Implicit Length Strings, Return Index
203def : WriteRes<WritePCmpIStrI, [HWPort0]> {
204 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000206 let ResourceCycles = [3];
207}
208def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000209 let Latency = 17;
210 let NumMicroOps = 4;
211 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000212}
213
214// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000215def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
216 let Latency = 18;
217 let NumMicroOps = 8;
218 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000219}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000220def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
221 let Latency = 24;
222 let NumMicroOps = 9;
223 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000224}
225
Simon Pilgrima2f26782018-03-27 20:38:54 +0000226// MOVMSK Instructions.
227def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
228def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
229def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
230
Quentin Colombetca498512014-02-24 19:33:51 +0000231// AES Instructions.
232def : WriteRes<WriteAESDecEnc, [HWPort5]> {
233 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000234 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000235 let ResourceCycles = [1];
236}
237def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000238 let Latency = 13;
239 let NumMicroOps = 2;
240 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000241}
242
243def : WriteRes<WriteAESIMC, [HWPort5]> {
244 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000245 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000246 let ResourceCycles = [2];
247}
248def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249 let Latency = 20;
250 let NumMicroOps = 3;
251 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000252}
253
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
255 let Latency = 29;
256 let NumMicroOps = 11;
257 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000258}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000259def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
260 let Latency = 34;
261 let NumMicroOps = 11;
262 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000263}
264
265// Carry-less multiplication instructions.
266def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000267 let Latency = 11;
268 let NumMicroOps = 3;
269 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000270}
271def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000272 let Latency = 17;
273 let NumMicroOps = 4;
274 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000275}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000276
277def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
278def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000279def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
280def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000281
Michael Zuckermanf6684002017-06-28 11:23:31 +0000282//================ Exceptions ================//
283
284//-- Specific Scheduling Models --//
285
286// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000287def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000288
Craig Topper02daec02018-04-02 01:12:32 +0000289def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000290
Craig Topper02daec02018-04-02 01:12:32 +0000291def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000292 let NumMicroOps = 2;
293}
Craig Topper02daec02018-04-02 01:12:32 +0000294def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000295 let NumMicroOps = 3;
296}
297
Craig Topper02daec02018-04-02 01:12:32 +0000298def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000299 let NumMicroOps = 2;
300}
301
Craig Topper02daec02018-04-02 01:12:32 +0000302def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000303 let NumMicroOps = 3;
304 let ResourceCycles = [2, 1];
305}
306
Michael Zuckermanf6684002017-06-28 11:23:31 +0000307// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000308def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000309
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313 let ResourceCycles = [2];
314}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315
316// Notation:
317// - r: register.
318// - mm: 64 bit mmx register.
319// - x = 128 bit xmm register.
320// - (x)mm = mmx or xmm register.
321// - y = 256 bit ymm register.
322// - v = any vector register.
323// - m = memory.
324
325//=== Integer Instructions ===//
326//-- Move instructions --//
327
Michael Zuckermanf6684002017-06-28 11:23:31 +0000328// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000329def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330 let Latency = 7;
331 let NumMicroOps = 3;
332}
Craig Topper02daec02018-04-02 01:12:32 +0000333def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000334
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000336def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000337 let NumMicroOps = 19;
338}
Craig Topper02daec02018-04-02 01:12:32 +0000339def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000340
Michael Zuckermanf6684002017-06-28 11:23:31 +0000341// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000342def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000343 let NumMicroOps = 18;
344}
Craig Topper02daec02018-04-02 01:12:32 +0000345def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000346
Michael Zuckermanf6684002017-06-28 11:23:31 +0000347//-- Arithmetic instructions --//
348
Michael Zuckermanf6684002017-06-28 11:23:31 +0000349// DIV.
350// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000351def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000352 let Latency = 22;
353 let NumMicroOps = 9;
354}
Craig Topper02daec02018-04-02 01:12:32 +0000355def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000356
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357// IDIV.
358// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000359def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360 let Latency = 23;
361 let NumMicroOps = 9;
362}
Craig Topper02daec02018-04-02 01:12:32 +0000363def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000364
Michael Zuckermanf6684002017-06-28 11:23:31 +0000365// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000367def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368 let NumMicroOps = 10;
369}
Craig Topper02daec02018-04-02 01:12:32 +0000370def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000371
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000373// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000374def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000375 let NumMicroOps = 11;
376}
Craig Topper02daec02018-04-02 01:12:32 +0000377def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000378
Michael Zuckermanf6684002017-06-28 11:23:31 +0000379//-- Control transfer instructions --//
380
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382// i.
Craig Topper02daec02018-04-02 01:12:32 +0000383def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384 let NumMicroOps = 4;
385 let ResourceCycles = [1, 2, 1];
386}
Craig Topper02daec02018-04-02 01:12:32 +0000387def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388
389// BOUND.
390// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000391def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392 let NumMicroOps = 15;
393}
Craig Topper02daec02018-04-02 01:12:32 +0000394def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395
396// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000397def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398 let NumMicroOps = 4;
399}
Craig Topper02daec02018-04-02 01:12:32 +0000400def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401
402//-- String instructions --//
403
404// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000405def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406
407// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000408def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409
Michael Zuckermanf6684002017-06-28 11:23:31 +0000410// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let Latency = 4;
413 let NumMicroOps = 5;
414 let ResourceCycles = [2, 1, 2];
415}
Craig Topper02daec02018-04-02 01:12:32 +0000416def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000419def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420 let Latency = 4;
421 let NumMicroOps = 5;
422 let ResourceCycles = [2, 3];
423}
Craig Topper02daec02018-04-02 01:12:32 +0000424def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426//-- Other --//
427
Gadi Haberd76f7b82017-08-28 10:04:16 +0000428// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000429def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430 let NumMicroOps = 34;
431}
Craig Topper02daec02018-04-02 01:12:32 +0000432def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000433
434// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000435def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000436 let NumMicroOps = 17;
437 let ResourceCycles = [1, 16];
438}
Craig Topper02daec02018-04-02 01:12:32 +0000439def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440
441//=== Floating Point x87 Instructions ===//
442//-- Move instructions --//
443
444// FLD.
445// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000446def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000447
Michael Zuckermanf6684002017-06-28 11:23:31 +0000448// FBLD.
449// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000450def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000451 let Latency = 47;
452 let NumMicroOps = 43;
453}
Craig Topper02daec02018-04-02 01:12:32 +0000454def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000455
456// FST(P).
457// r.
Craig Topper02daec02018-04-02 01:12:32 +0000458def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000459
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000461def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462
Michael Zuckermanf6684002017-06-28 11:23:31 +0000463// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000464def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000465
Michael Zuckermanf6684002017-06-28 11:23:31 +0000466// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000467def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468
469// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000470def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471 let NumMicroOps = 147;
472}
Craig Topper02daec02018-04-02 01:12:32 +0000473def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000474
475// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000476def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477 let NumMicroOps = 90;
478}
Craig Topper02daec02018-04-02 01:12:32 +0000479def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480
481//-- Arithmetic instructions --//
482
483// FABS.
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWriteP0], (instregex "ABS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
486// FCHS.
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteP0], (instregex "CHS_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
Michael Zuckermanf6684002017-06-28 11:23:31 +0000489// FCOMPP FUCOMPP.
490// r.
Craig Topper02daec02018-04-02 01:12:32 +0000491def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000492
493// FCOMI(P) FUCOMI(P).
494// m.
Craig Topper02daec02018-04-02 01:12:32 +0000495def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
496 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000497
Michael Zuckermanf6684002017-06-28 11:23:31 +0000498// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000502def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503
504// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000505def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506 let Latency = 19;
507 let NumMicroOps = 28;
508}
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000510
511// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000512def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000513 let Latency = 27;
514 let NumMicroOps = 41;
515}
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 11;
521 let NumMicroOps = 17;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525//-- Math instructions --//
526
527// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000528def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000529 let Latency = 75; // 49-125
530 let NumMicroOps = 50; // 25-75
531}
Craig Topper02daec02018-04-02 01:12:32 +0000532def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000533
534// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000535def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000536 let Latency = 15;
537 let NumMicroOps = 17;
538}
Craig Topper02daec02018-04-02 01:12:32 +0000539def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000540
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000541////////////////////////////////////////////////////////////////////////////////
542// Horizontal add/sub instructions.
543////////////////////////////////////////////////////////////////////////////////
544
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000545defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
546defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000547
Michael Zuckermanf6684002017-06-28 11:23:31 +0000548//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000549
Gadi Haberd76f7b82017-08-28 10:04:16 +0000550// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000551
Gadi Haberd76f7b82017-08-28 10:04:16 +0000552def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000553 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000554 let NumMicroOps = 1;
555 let ResourceCycles = [1];
556}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000557def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
558 "(V?)LDDQUrm",
559 "(V?)MOVAPDrm",
560 "(V?)MOVAPSrm",
561 "(V?)MOVDQArm",
562 "(V?)MOVDQUrm",
563 "(V?)MOVNTDQArm",
564 "(V?)MOVSHDUPrm",
565 "(V?)MOVSLDUPrm",
566 "(V?)MOVUPDrm",
567 "(V?)MOVUPSrm",
568 "VPBROADCASTDrm",
569 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000570 "(V?)ROUNDPD(Y?)r",
571 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000572 "(V?)ROUNDSDr",
573 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000574
575def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
576 let Latency = 7;
577 let NumMicroOps = 1;
578 let ResourceCycles = [1];
579}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000580def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
581 "LD_F64m",
582 "LD_F80m",
583 "VBROADCASTF128",
584 "VBROADCASTI128",
585 "VBROADCASTSDYrm",
586 "VBROADCASTSSYrm",
587 "VLDDQUYrm",
588 "VMOVAPDYrm",
589 "VMOVAPSYrm",
590 "VMOVDDUPYrm",
591 "VMOVDQAYrm",
592 "VMOVDQUYrm",
593 "VMOVNTDQAYrm",
594 "VMOVSHDUPYrm",
595 "VMOVSLDUPYrm",
596 "VMOVUPDYrm",
597 "VMOVUPSYrm",
598 "VPBROADCASTDYrm",
599 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000600
601def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
602 let Latency = 5;
603 let NumMicroOps = 1;
604 let ResourceCycles = [1];
605}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000606def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
607 "MMX_MOVD64to64rm",
608 "MMX_MOVQ64rm",
609 "MOV(8|16|32|64)rm",
610 "MOVSX(16|32|64)rm16",
611 "MOVSX(16|32|64)rm32",
612 "MOVSX(16|32|64)rm8",
613 "MOVZX(16|32|64)rm16",
614 "MOVZX(16|32|64)rm8",
615 "PREFETCHNTA",
616 "PREFETCHT0",
617 "PREFETCHT1",
618 "PREFETCHT2",
619 "(V?)MOV64toPQIrm",
620 "(V?)MOVDDUPrm",
621 "(V?)MOVDI2PDIrm",
622 "(V?)MOVQI2PQIrm",
623 "(V?)MOVSDrm",
624 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000625
Gadi Haberd76f7b82017-08-28 10:04:16 +0000626def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
627 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000628 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000629 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000630}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000631def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
632 "MMX_MOVD64from64rm",
633 "MMX_MOVD64mr",
634 "MMX_MOVNTQmr",
635 "MMX_MOVQ64mr",
636 "MOV(16|32|64)mr",
637 "MOV8mi",
638 "MOV8mr",
639 "MOVNTI_64mr",
640 "MOVNTImr",
641 "ST_FP32m",
642 "ST_FP64m",
643 "ST_FP80m",
644 "VEXTRACTF128mr",
645 "VEXTRACTI128mr",
646 "(V?)MOVAPD(Y?)mr",
647 "(V?)MOVAPS(V?)mr",
648 "(V?)MOVDQA(Y?)mr",
649 "(V?)MOVDQU(Y?)mr",
650 "(V?)MOVHPDmr",
651 "(V?)MOVHPSmr",
652 "(V?)MOVLPDmr",
653 "(V?)MOVLPSmr",
654 "(V?)MOVNTDQ(Y?)mr",
655 "(V?)MOVNTPD(Y?)mr",
656 "(V?)MOVNTPS(Y?)mr",
657 "(V?)MOVPDI2DImr",
658 "(V?)MOVPQI2QImr",
659 "(V?)MOVPQIto64mr",
660 "(V?)MOVSDmr",
661 "(V?)MOVSSmr",
662 "(V?)MOVUPD(Y?)mr",
663 "(V?)MOVUPS(Y?)mr",
664 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000665
Gadi Haberd76f7b82017-08-28 10:04:16 +0000666def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
667 let Latency = 1;
668 let NumMicroOps = 1;
669 let ResourceCycles = [1];
670}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000671def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
672 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000673 "MMX_PSLLDri",
674 "MMX_PSLLDrr",
675 "MMX_PSLLQri",
676 "MMX_PSLLQrr",
677 "MMX_PSLLWri",
678 "MMX_PSLLWrr",
679 "MMX_PSRADri",
680 "MMX_PSRADrr",
681 "MMX_PSRAWri",
682 "MMX_PSRAWrr",
683 "MMX_PSRLDri",
684 "MMX_PSRLDrr",
685 "MMX_PSRLQri",
686 "MMX_PSRLQrr",
687 "MMX_PSRLWri",
688 "MMX_PSRLWrr",
689 "(V?)MOVPDI2DIrr",
690 "(V?)MOVPQIto64rr",
691 "(V?)PSLLD(Y?)ri",
692 "(V?)PSLLQ(Y?)ri",
693 "VPSLLVQ(Y?)rr",
694 "(V?)PSLLW(Y?)ri",
695 "(V?)PSRAD(Y?)ri",
696 "(V?)PSRAW(Y?)ri",
697 "(V?)PSRLD(Y?)ri",
698 "(V?)PSRLQ(Y?)ri",
699 "VPSRLVQ(Y?)rr",
700 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000701 "VTESTPD(Y?)rr",
702 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000703
704def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
705 let Latency = 1;
706 let NumMicroOps = 1;
707 let ResourceCycles = [1];
708}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000709def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
710 "COM_FST0r",
711 "UCOM_FPr",
712 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000713
714def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
715 let Latency = 1;
716 let NumMicroOps = 1;
717 let ResourceCycles = [1];
718}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000719def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000720 "MMX_MOVD64to64rr",
721 "MMX_MOVQ2DQrr",
722 "MMX_PALIGNRrri",
723 "MMX_PSHUFBrr",
724 "MMX_PSHUFWri",
725 "MMX_PUNPCKHBWirr",
726 "MMX_PUNPCKHDQirr",
727 "MMX_PUNPCKHWDirr",
728 "MMX_PUNPCKLBWirr",
729 "MMX_PUNPCKLDQirr",
730 "MMX_PUNPCKLWDirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000731 "(V?)ANDNPD(Y?)rr",
732 "(V?)ANDNPS(Y?)rr",
733 "(V?)ANDPD(Y?)rr",
734 "(V?)ANDPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000735 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000736 "(V?)INSERTPSrr",
737 "(V?)MOV64toPQIrr",
738 "(V?)MOVAPD(Y?)rr",
739 "(V?)MOVAPS(Y?)rr",
740 "(V?)MOVDDUP(Y?)rr",
741 "(V?)MOVDI2PDIrr",
742 "(V?)MOVHLPSrr",
743 "(V?)MOVLHPSrr",
744 "(V?)MOVSDrr",
745 "(V?)MOVSHDUP(Y?)rr",
746 "(V?)MOVSLDUP(Y?)rr",
747 "(V?)MOVSSrr",
748 "(V?)MOVUPD(Y?)rr",
749 "(V?)MOVUPS(Y?)rr",
750 "(V?)ORPD(Y?)rr",
751 "(V?)ORPS(Y?)rr",
752 "(V?)PACKSSDW(Y?)rr",
753 "(V?)PACKSSWB(Y?)rr",
754 "(V?)PACKUSDW(Y?)rr",
755 "(V?)PACKUSWB(Y?)rr",
756 "(V?)PALIGNR(Y?)rri",
757 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000758 "VPBROADCASTDrr",
759 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000760 "VPERMILPD(Y?)ri",
761 "VPERMILPD(Y?)rr",
762 "VPERMILPS(Y?)ri",
763 "VPERMILPS(Y?)rr",
764 "(V?)PMOVSXBDrr",
765 "(V?)PMOVSXBQrr",
766 "(V?)PMOVSXBWrr",
767 "(V?)PMOVSXDQrr",
768 "(V?)PMOVSXWDrr",
769 "(V?)PMOVSXWQrr",
770 "(V?)PMOVZXBDrr",
771 "(V?)PMOVZXBQrr",
772 "(V?)PMOVZXBWrr",
773 "(V?)PMOVZXDQrr",
774 "(V?)PMOVZXWDrr",
775 "(V?)PMOVZXWQrr",
776 "(V?)PSHUFB(Y?)rr",
777 "(V?)PSHUFD(Y?)ri",
778 "(V?)PSHUFHW(Y?)ri",
779 "(V?)PSHUFLW(Y?)ri",
780 "(V?)PSLLDQ(Y?)ri",
781 "(V?)PSRLDQ(Y?)ri",
782 "(V?)PUNPCKHBW(Y?)rr",
783 "(V?)PUNPCKHDQ(Y?)rr",
784 "(V?)PUNPCKHQDQ(Y?)rr",
785 "(V?)PUNPCKHWD(Y?)rr",
786 "(V?)PUNPCKLBW(Y?)rr",
787 "(V?)PUNPCKLDQ(Y?)rr",
788 "(V?)PUNPCKLQDQ(Y?)rr",
789 "(V?)PUNPCKLWD(Y?)rr",
790 "(V?)SHUFPD(Y?)rri",
791 "(V?)SHUFPS(Y?)rri",
792 "(V?)UNPCKHPD(Y?)rr",
793 "(V?)UNPCKHPS(Y?)rr",
794 "(V?)UNPCKLPD(Y?)rr",
795 "(V?)UNPCKLPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000796 "(V?)XORPD(Y?)rr",
797 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000798
799def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
800 let Latency = 1;
801 let NumMicroOps = 1;
802 let ResourceCycles = [1];
803}
804def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
805
806def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
807 let Latency = 1;
808 let NumMicroOps = 1;
809 let ResourceCycles = [1];
810}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000811def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
812 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000813
814def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
815 let Latency = 1;
816 let NumMicroOps = 1;
817 let ResourceCycles = [1];
818}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000819def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
820 "BT(16|32|64)rr",
821 "BTC(16|32|64)ri8",
822 "BTC(16|32|64)rr",
823 "BTR(16|32|64)ri8",
824 "BTR(16|32|64)rr",
825 "BTS(16|32|64)ri8",
826 "BTS(16|32|64)rr",
827 "CDQ",
828 "CQO",
829 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
830 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
831 "JMP_1",
832 "JMP_4",
833 "RORX(32|64)ri",
834 "SAR(8|16|32|64)r1",
835 "SAR(8|16|32|64)ri",
836 "SARX(32|64)rr",
837 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
838 "SHL(8|16|32|64)r1",
839 "SHL(8|16|32|64)ri",
840 "SHLX(32|64)rr",
841 "SHR(8|16|32|64)r1",
842 "SHR(8|16|32|64)ri",
843 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000844
845def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
846 let Latency = 1;
847 let NumMicroOps = 1;
848 let ResourceCycles = [1];
849}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
851 "BLSI(32|64)rr",
852 "BLSMSK(32|64)rr",
853 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854 "LEA(16|32|64)(_32)?r",
855 "MMX_PABSBrr",
856 "MMX_PABSDrr",
857 "MMX_PABSWrr",
858 "MMX_PADDBirr",
859 "MMX_PADDDirr",
860 "MMX_PADDQirr",
861 "MMX_PADDSBirr",
862 "MMX_PADDSWirr",
863 "MMX_PADDUSBirr",
864 "MMX_PADDUSWirr",
865 "MMX_PADDWirr",
866 "MMX_PAVGBirr",
867 "MMX_PAVGWirr",
868 "MMX_PCMPEQBirr",
869 "MMX_PCMPEQDirr",
870 "MMX_PCMPEQWirr",
871 "MMX_PCMPGTBirr",
872 "MMX_PCMPGTDirr",
873 "MMX_PCMPGTWirr",
874 "MMX_PMAXSWirr",
875 "MMX_PMAXUBirr",
876 "MMX_PMINSWirr",
877 "MMX_PMINUBirr",
878 "MMX_PSIGNBrr",
879 "MMX_PSIGNDrr",
880 "MMX_PSIGNWrr",
881 "MMX_PSUBBirr",
882 "MMX_PSUBDirr",
883 "MMX_PSUBQirr",
884 "MMX_PSUBSBirr",
885 "MMX_PSUBSWirr",
886 "MMX_PSUBUSBirr",
887 "MMX_PSUBUSWirr",
888 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000889 "(V?)PABSB(Y?)rr",
890 "(V?)PABSD(Y?)rr",
891 "(V?)PABSW(Y?)rr",
892 "(V?)PADDB(Y?)rr",
893 "(V?)PADDD(Y?)rr",
894 "(V?)PADDQ(Y?)rr",
895 "(V?)PADDSB(Y?)rr",
896 "(V?)PADDSW(Y?)rr",
897 "(V?)PADDUSB(Y?)rr",
898 "(V?)PADDUSW(Y?)rr",
899 "(V?)PADDW(Y?)rr",
900 "(V?)PAVGB(Y?)rr",
901 "(V?)PAVGW(Y?)rr",
902 "(V?)PCMPEQB(Y?)rr",
903 "(V?)PCMPEQD(Y?)rr",
904 "(V?)PCMPEQQ(Y?)rr",
905 "(V?)PCMPEQW(Y?)rr",
906 "(V?)PCMPGTB(Y?)rr",
907 "(V?)PCMPGTD(Y?)rr",
908 "(V?)PCMPGTW(Y?)rr",
909 "(V?)PMAXSB(Y?)rr",
910 "(V?)PMAXSD(Y?)rr",
911 "(V?)PMAXSW(Y?)rr",
912 "(V?)PMAXUB(Y?)rr",
913 "(V?)PMAXUD(Y?)rr",
914 "(V?)PMAXUW(Y?)rr",
915 "(V?)PMINSB(Y?)rr",
916 "(V?)PMINSD(Y?)rr",
917 "(V?)PMINSW(Y?)rr",
918 "(V?)PMINUB(Y?)rr",
919 "(V?)PMINUD(Y?)rr",
920 "(V?)PMINUW(Y?)rr",
921 "(V?)PSIGNB(Y?)rr",
922 "(V?)PSIGND(Y?)rr",
923 "(V?)PSIGNW(Y?)rr",
924 "(V?)PSUBB(Y?)rr",
925 "(V?)PSUBD(Y?)rr",
926 "(V?)PSUBQ(Y?)rr",
927 "(V?)PSUBSB(Y?)rr",
928 "(V?)PSUBSW(Y?)rr",
929 "(V?)PSUBUSB(Y?)rr",
930 "(V?)PSUBUSW(Y?)rr",
931 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000932
933def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
934 let Latency = 1;
935 let NumMicroOps = 1;
936 let ResourceCycles = [1];
937}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000938def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
939 "MMX_PANDNirr",
940 "MMX_PANDirr",
941 "MMX_PORirr",
942 "MMX_PXORirr",
943 "(V?)BLENDPD(Y?)rri",
944 "(V?)BLENDPS(Y?)rri",
945 "(V?)MOVDQA(Y?)rr",
946 "(V?)MOVDQU(Y?)rr",
947 "(V?)MOVPQI2QIrr",
948 "VMOVZPQILo2PQIrr",
949 "(V?)PANDN(Y?)rr",
950 "(V?)PAND(Y?)rr",
951 "VPBLENDD(Y?)rri",
952 "(V?)POR(Y?)rr",
953 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000954
955def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
956 let Latency = 1;
957 let NumMicroOps = 1;
958 let ResourceCycles = [1];
959}
Craig Topper2d451e72018-03-18 08:38:06 +0000960def: InstRW<[HWWriteResGroup10], (instrs CWDE)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000961def: InstRW<[HWWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
962 "ADD(8|16|32|64)rr",
963 "ADD(8|16|32|64)i",
964 "AND(8|16|32|64)ri",
965 "AND(8|16|32|64)rr",
966 "AND(8|16|32|64)i",
967 "CBW",
968 "CLC",
969 "CMC",
970 "CMP(8|16|32|64)ri",
971 "CMP(8|16|32|64)rr",
972 "CMP(8|16|32|64)i",
973 "DEC(8|16|32|64)r",
974 "INC(8|16|32|64)r",
975 "LAHF",
976 "MOV(8|16|32|64)rr",
977 "MOV(8|16|32|64)ri",
978 "MOVSX(16|32|64)rr16",
979 "MOVSX(16|32|64)rr32",
980 "MOVSX(16|32|64)rr8",
981 "MOVZX(16|32|64)rr16",
982 "MOVZX(16|32|64)rr8",
983 "NEG(8|16|32|64)r",
984 "NOOP",
985 "NOT(8|16|32|64)r",
986 "OR(8|16|32|64)ri",
987 "OR(8|16|32|64)rr",
988 "OR(8|16|32|64)i",
989 "SAHF",
990 "SGDT64m",
991 "SIDT64m",
992 "SLDT64m",
993 "SMSW16m",
994 "STC",
995 "STRm",
996 "SUB(8|16|32|64)ri",
997 "SUB(8|16|32|64)rr",
998 "SUB(8|16|32|64)i",
999 "SYSCALL",
1000 "TEST(8|16|32|64)rr",
1001 "TEST(8|16|32|64)i",
1002 "TEST(8|16|32|64)ri",
1003 "XCHG(16|32|64)rr",
1004 "XOR(8|16|32|64)ri",
1005 "XOR(8|16|32|64)rr",
1006 "XOR(8|16|32|64)i")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001007
1008def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001009 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001010 let NumMicroOps = 2;
1011 let ResourceCycles = [1,1];
1012}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001013def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
1014 "MMX_PSLLQrm",
1015 "MMX_PSLLWrm",
1016 "MMX_PSRADrm",
1017 "MMX_PSRAWrm",
1018 "MMX_PSRLDrm",
1019 "MMX_PSRLQrm",
1020 "MMX_PSRLWrm",
1021 "VCVTPH2PSrm",
1022 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001023
Gadi Haber2cf601f2017-12-08 09:48:44 +00001024def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
1025 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001026 let NumMicroOps = 2;
1027 let ResourceCycles = [1,1];
1028}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001029def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
1030 "(V?)CVTSS2SDrm",
1031 "VPSLLVQrm",
1032 "VPSRLVQrm",
1033 "VTESTPDrm",
1034 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001035
1036def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1037 let Latency = 8;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [1,1];
1040}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001041def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1042 "VPSLLQYrm",
1043 "VPSLLVQYrm",
1044 "VPSLLWYrm",
1045 "VPSRADYrm",
1046 "VPSRAWYrm",
1047 "VPSRLDYrm",
1048 "VPSRLQYrm",
1049 "VPSRLVQYrm",
1050 "VPSRLWYrm",
1051 "VTESTPDYrm",
1052 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001053
1054def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1055 let Latency = 8;
1056 let NumMicroOps = 2;
1057 let ResourceCycles = [1,1];
1058}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001059def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1060 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001061 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001062def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001063 "FCOM64m",
1064 "FCOMP32m",
1065 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001066 "MMX_CVTPI2PSirm",
1067 "MMX_CVTPS2PIirm",
1068 "MMX_CVTTPS2PIirm",
1069 "PDEP(32|64)rm",
1070 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001071 "(V?)ADDSDrm",
1072 "(V?)ADDSSrm",
1073 "(V?)CMPSDrm",
1074 "(V?)CMPSSrm",
1075 "(V?)COMISDrm",
1076 "(V?)COMISSrm",
1077 "(V?)MAX(C?)SDrm",
1078 "(V?)MAX(C?)SSrm",
1079 "(V?)MIN(C?)SDrm",
1080 "(V?)MIN(C?)SSrm",
1081 "(V?)SUBSDrm",
1082 "(V?)SUBSSrm",
1083 "(V?)UCOMISDrm",
1084 "(V?)UCOMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001085
1086def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001087 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001088 let NumMicroOps = 2;
1089 let ResourceCycles = [1,1];
1090}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001091def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1092 "(V?)ANDNPDrm",
1093 "(V?)ANDNPSrm",
1094 "(V?)ANDPDrm",
1095 "(V?)ANDPSrm",
1096 "(V?)INSERTPSrm",
1097 "(V?)ORPDrm",
1098 "(V?)ORPSrm",
1099 "(V?)PACKSSDWrm",
1100 "(V?)PACKSSWBrm",
1101 "(V?)PACKUSDWrm",
1102 "(V?)PACKUSWBrm",
1103 "(V?)PALIGNRrmi",
1104 "(V?)PBLENDWrmi",
1105 "VPERMILPDmi",
1106 "VPERMILPDrm",
1107 "VPERMILPSmi",
1108 "VPERMILPSrm",
1109 "(V?)PSHUFBrm",
1110 "(V?)PSHUFDmi",
1111 "(V?)PSHUFHWmi",
1112 "(V?)PSHUFLWmi",
1113 "(V?)PUNPCKHBWrm",
1114 "(V?)PUNPCKHDQrm",
1115 "(V?)PUNPCKHQDQrm",
1116 "(V?)PUNPCKHWDrm",
1117 "(V?)PUNPCKLBWrm",
1118 "(V?)PUNPCKLDQrm",
1119 "(V?)PUNPCKLQDQrm",
1120 "(V?)PUNPCKLWDrm",
1121 "(V?)SHUFPDrmi",
1122 "(V?)SHUFPSrmi",
1123 "(V?)UNPCKHPDrm",
1124 "(V?)UNPCKHPSrm",
1125 "(V?)UNPCKLPDrm",
1126 "(V?)UNPCKLPSrm",
1127 "(V?)XORPDrm",
1128 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001129
Gadi Haber2cf601f2017-12-08 09:48:44 +00001130def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1131 let Latency = 8;
1132 let NumMicroOps = 2;
1133 let ResourceCycles = [1,1];
1134}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001135def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1136 "VANDNPSYrm",
1137 "VANDPDYrm",
1138 "VANDPSYrm",
1139 "VORPDYrm",
1140 "VORPSYrm",
1141 "VPACKSSDWYrm",
1142 "VPACKSSWBYrm",
1143 "VPACKUSDWYrm",
1144 "VPACKUSWBYrm",
1145 "VPALIGNRYrmi",
1146 "VPBLENDWYrmi",
1147 "VPERMILPDYmi",
1148 "VPERMILPDYrm",
1149 "VPERMILPSYmi",
1150 "VPERMILPSYrm",
1151 "VPMOVSXBDYrm",
1152 "VPMOVSXBQYrm",
1153 "VPMOVSXWQYrm",
1154 "VPSHUFBYrm",
1155 "VPSHUFDYmi",
1156 "VPSHUFHWYmi",
1157 "VPSHUFLWYmi",
1158 "VPUNPCKHBWYrm",
1159 "VPUNPCKHDQYrm",
1160 "VPUNPCKHQDQYrm",
1161 "VPUNPCKHWDYrm",
1162 "VPUNPCKLBWYrm",
1163 "VPUNPCKLDQYrm",
1164 "VPUNPCKLQDQYrm",
1165 "VPUNPCKLWDYrm",
1166 "VSHUFPDYrmi",
1167 "VSHUFPSYrmi",
1168 "VUNPCKHPDYrm",
1169 "VUNPCKHPSYrm",
1170 "VUNPCKLPDYrm",
1171 "VUNPCKLPSYrm",
1172 "VXORPDYrm",
1173 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001174
1175def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1176 let Latency = 6;
1177 let NumMicroOps = 2;
1178 let ResourceCycles = [1,1];
1179}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001180def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1181 "MMX_PINSRWrm",
1182 "MMX_PSHUFBrm",
1183 "MMX_PSHUFWmi",
1184 "MMX_PUNPCKHBWirm",
1185 "MMX_PUNPCKHDQirm",
1186 "MMX_PUNPCKHWDirm",
1187 "MMX_PUNPCKLBWirm",
1188 "MMX_PUNPCKLDQirm",
1189 "MMX_PUNPCKLWDirm",
1190 "(V?)MOVHPDrm",
1191 "(V?)MOVHPSrm",
1192 "(V?)MOVLPDrm",
1193 "(V?)MOVLPSrm",
1194 "(V?)PINSRBrm",
1195 "(V?)PINSRDrm",
1196 "(V?)PINSRQrm",
1197 "(V?)PINSRWrm",
1198 "(V?)PMOVSXBDrm",
1199 "(V?)PMOVSXBQrm",
1200 "(V?)PMOVSXBWrm",
1201 "(V?)PMOVSXDQrm",
1202 "(V?)PMOVSXWDrm",
1203 "(V?)PMOVSXWQrm",
1204 "(V?)PMOVZXBDrm",
1205 "(V?)PMOVZXBQrm",
1206 "(V?)PMOVZXBWrm",
1207 "(V?)PMOVZXDQrm",
1208 "(V?)PMOVZXWDrm",
1209 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001210
Gadi Haberd76f7b82017-08-28 10:04:16 +00001211def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001212 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001216def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1217 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001218
1219def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001220 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001221 let NumMicroOps = 2;
1222 let ResourceCycles = [1,1];
1223}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001224def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1225 "RORX(32|64)mi",
1226 "SARX(32|64)rm",
1227 "SHLX(32|64)rm",
1228 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001229
1230def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001231 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001232 let NumMicroOps = 2;
1233 let ResourceCycles = [1,1];
1234}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001235def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1236 "BLSI(32|64)rm",
1237 "BLSMSK(32|64)rm",
1238 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001239 "MMX_PABSBrm",
1240 "MMX_PABSDrm",
1241 "MMX_PABSWrm",
1242 "MMX_PADDBirm",
1243 "MMX_PADDDirm",
1244 "MMX_PADDQirm",
1245 "MMX_PADDSBirm",
1246 "MMX_PADDSWirm",
1247 "MMX_PADDUSBirm",
1248 "MMX_PADDUSWirm",
1249 "MMX_PADDWirm",
1250 "MMX_PAVGBirm",
1251 "MMX_PAVGWirm",
1252 "MMX_PCMPEQBirm",
1253 "MMX_PCMPEQDirm",
1254 "MMX_PCMPEQWirm",
1255 "MMX_PCMPGTBirm",
1256 "MMX_PCMPGTDirm",
1257 "MMX_PCMPGTWirm",
1258 "MMX_PMAXSWirm",
1259 "MMX_PMAXUBirm",
1260 "MMX_PMINSWirm",
1261 "MMX_PMINUBirm",
1262 "MMX_PSIGNBrm",
1263 "MMX_PSIGNDrm",
1264 "MMX_PSIGNWrm",
1265 "MMX_PSUBBirm",
1266 "MMX_PSUBDirm",
1267 "MMX_PSUBQirm",
1268 "MMX_PSUBSBirm",
1269 "MMX_PSUBSWirm",
1270 "MMX_PSUBUSBirm",
1271 "MMX_PSUBUSWirm",
1272 "MMX_PSUBWirm",
1273 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001274
1275def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1276 let Latency = 7;
1277 let NumMicroOps = 2;
1278 let ResourceCycles = [1,1];
1279}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001280def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1281 "(V?)PABSDrm",
1282 "(V?)PABSWrm",
1283 "(V?)PADDBrm",
1284 "(V?)PADDDrm",
1285 "(V?)PADDQrm",
1286 "(V?)PADDSBrm",
1287 "(V?)PADDSWrm",
1288 "(V?)PADDUSBrm",
1289 "(V?)PADDUSWrm",
1290 "(V?)PADDWrm",
1291 "(V?)PAVGBrm",
1292 "(V?)PAVGWrm",
1293 "(V?)PCMPEQBrm",
1294 "(V?)PCMPEQDrm",
1295 "(V?)PCMPEQQrm",
1296 "(V?)PCMPEQWrm",
1297 "(V?)PCMPGTBrm",
1298 "(V?)PCMPGTDrm",
1299 "(V?)PCMPGTWrm",
1300 "(V?)PMAXSBrm",
1301 "(V?)PMAXSDrm",
1302 "(V?)PMAXSWrm",
1303 "(V?)PMAXUBrm",
1304 "(V?)PMAXUDrm",
1305 "(V?)PMAXUWrm",
1306 "(V?)PMINSBrm",
1307 "(V?)PMINSDrm",
1308 "(V?)PMINSWrm",
1309 "(V?)PMINUBrm",
1310 "(V?)PMINUDrm",
1311 "(V?)PMINUWrm",
1312 "(V?)PSIGNBrm",
1313 "(V?)PSIGNDrm",
1314 "(V?)PSIGNWrm",
1315 "(V?)PSUBBrm",
1316 "(V?)PSUBDrm",
1317 "(V?)PSUBQrm",
1318 "(V?)PSUBSBrm",
1319 "(V?)PSUBSWrm",
1320 "(V?)PSUBUSBrm",
1321 "(V?)PSUBUSWrm",
1322 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001323
1324def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1325 let Latency = 8;
1326 let NumMicroOps = 2;
1327 let ResourceCycles = [1,1];
1328}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001329def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1330 "VPABSDYrm",
1331 "VPABSWYrm",
1332 "VPADDBYrm",
1333 "VPADDDYrm",
1334 "VPADDQYrm",
1335 "VPADDSBYrm",
1336 "VPADDSWYrm",
1337 "VPADDUSBYrm",
1338 "VPADDUSWYrm",
1339 "VPADDWYrm",
1340 "VPAVGBYrm",
1341 "VPAVGWYrm",
1342 "VPCMPEQBYrm",
1343 "VPCMPEQDYrm",
1344 "VPCMPEQQYrm",
1345 "VPCMPEQWYrm",
1346 "VPCMPGTBYrm",
1347 "VPCMPGTDYrm",
1348 "VPCMPGTWYrm",
1349 "VPMAXSBYrm",
1350 "VPMAXSDYrm",
1351 "VPMAXSWYrm",
1352 "VPMAXUBYrm",
1353 "VPMAXUDYrm",
1354 "VPMAXUWYrm",
1355 "VPMINSBYrm",
1356 "VPMINSDYrm",
1357 "VPMINSWYrm",
1358 "VPMINUBYrm",
1359 "VPMINUDYrm",
1360 "VPMINUWYrm",
1361 "VPSIGNBYrm",
1362 "VPSIGNDYrm",
1363 "VPSIGNWYrm",
1364 "VPSUBBYrm",
1365 "VPSUBDYrm",
1366 "VPSUBQYrm",
1367 "VPSUBSBYrm",
1368 "VPSUBSWYrm",
1369 "VPSUBUSBYrm",
1370 "VPSUBUSWYrm",
1371 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001372
1373def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001374 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001375 let NumMicroOps = 2;
1376 let ResourceCycles = [1,1];
1377}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001378def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1379 "(V?)BLENDPSrmi",
1380 "VINSERTF128rm",
1381 "VINSERTI128rm",
1382 "(V?)PANDNrm",
1383 "(V?)PANDrm",
1384 "VPBLENDDrmi",
1385 "(V?)PORrm",
1386 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387
Gadi Haber2cf601f2017-12-08 09:48:44 +00001388def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1389 let Latency = 6;
1390 let NumMicroOps = 2;
1391 let ResourceCycles = [1,1];
1392}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001393def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1394 "MMX_PANDirm",
1395 "MMX_PORirm",
1396 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001397
1398def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1399 let Latency = 8;
1400 let NumMicroOps = 2;
1401 let ResourceCycles = [1,1];
1402}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001403def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1404 "VBLENDPSYrmi",
1405 "VPANDNYrm",
1406 "VPANDYrm",
1407 "VPBLENDDYrmi",
1408 "VPORYrm",
1409 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001410
Gadi Haberd76f7b82017-08-28 10:04:16 +00001411def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001412 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001413 let NumMicroOps = 2;
1414 let ResourceCycles = [1,1];
1415}
Craig Topper2d451e72018-03-18 08:38:06 +00001416def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001417def: InstRW<[HWWriteResGroup18], (instregex "ADD(8|16|32|64)rm",
1418 "AND(8|16|32|64)rm",
1419 "CMP(8|16|32|64)mi",
1420 "CMP(8|16|32|64)mr",
1421 "CMP(8|16|32|64)rm",
1422 "OR(8|16|32|64)rm",
1423 "POP(16|32|64)rmr",
1424 "SUB(8|16|32|64)rm",
1425 "TEST(8|16|32|64)mr",
1426 "TEST(8|16|32|64)mi",
1427 "XOR(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001428
1429def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001430 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431 let NumMicroOps = 2;
1432 let ResourceCycles = [1,1];
1433}
1434def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1435
1436def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001437 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001438 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001439 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001440}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001441def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1442 "(V?)PEXTRBmr",
1443 "(V?)PEXTRDmr",
1444 "(V?)PEXTRQmr",
1445 "(V?)PEXTRWmr",
1446 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001447
Gadi Haberd76f7b82017-08-28 10:04:16 +00001448def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001449 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001450 let NumMicroOps = 3;
1451 let ResourceCycles = [1,1,1];
1452}
1453def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001454
Gadi Haberd76f7b82017-08-28 10:04:16 +00001455def HWWriteResGroup22 : SchedWriteRes<[HWPort4,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001456 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001457 let NumMicroOps = 3;
1458 let ResourceCycles = [1,1,1];
1459}
Craig Topperf4cd9082018-01-19 05:47:32 +00001460def: InstRW<[HWWriteResGroup22], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001461
Gadi Haberd76f7b82017-08-28 10:04:16 +00001462def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001463 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001464 let NumMicroOps = 3;
1465 let ResourceCycles = [1,1,1];
1466}
1467def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1468
1469def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001470 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001471 let NumMicroOps = 3;
1472 let ResourceCycles = [1,1,1];
1473}
1474def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1475
1476def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001477 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001478 let NumMicroOps = 3;
1479 let ResourceCycles = [1,1,1];
1480}
Craig Topper2d451e72018-03-18 08:38:06 +00001481def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001482def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1483 "PUSH64i8",
1484 "STOSB",
1485 "STOSL",
1486 "STOSQ",
1487 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001488
1489def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001490 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001491 let NumMicroOps = 4;
1492 let ResourceCycles = [1,1,1,1];
1493}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001494def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1495 "BTR(16|32|64)mi8",
1496 "BTS(16|32|64)mi8",
1497 "SAR(8|16|32|64)m1",
1498 "SAR(8|16|32|64)mi",
1499 "SHL(8|16|32|64)m1",
1500 "SHL(8|16|32|64)mi",
1501 "SHR(8|16|32|64)m1",
1502 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001503
1504def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001505 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001506 let NumMicroOps = 4;
1507 let ResourceCycles = [1,1,1,1];
1508}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001509def: InstRW<[HWWriteResGroup26], (instregex "ADD(8|16|32|64)mi",
1510 "ADD(8|16|32|64)mr",
1511 "AND(8|16|32|64)mi",
1512 "AND(8|16|32|64)mr",
1513 "DEC(8|16|32|64)m",
1514 "INC(8|16|32|64)m",
1515 "NEG(8|16|32|64)m",
1516 "NOT(8|16|32|64)m",
1517 "OR(8|16|32|64)mi",
1518 "OR(8|16|32|64)mr",
1519 "POP(16|32|64)rmm",
1520 "PUSH(16|32|64)rmm",
1521 "SUB(8|16|32|64)mi",
1522 "SUB(8|16|32|64)mr",
1523 "XOR(8|16|32|64)mi",
1524 "XOR(8|16|32|64)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001525
1526def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001527 let Latency = 2;
1528 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001529 let ResourceCycles = [2];
1530}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001531def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1532 "BLENDVPSrr0",
1533 "MMX_PINSRWrr",
1534 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001535 "VBLENDVPD(Y?)rr",
1536 "VBLENDVPS(Y?)rr",
1537 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001538 "(V?)PINSRBrr",
1539 "(V?)PINSRDrr",
1540 "(V?)PINSRQrr",
1541 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001542
Gadi Haberd76f7b82017-08-28 10:04:16 +00001543def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1544 let Latency = 2;
1545 let NumMicroOps = 2;
1546 let ResourceCycles = [2];
1547}
1548def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1549
1550def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1551 let Latency = 2;
1552 let NumMicroOps = 2;
1553 let ResourceCycles = [2];
1554}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001555def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1556 "ROL(8|16|32|64)ri",
1557 "ROR(8|16|32|64)r1",
1558 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001559
1560def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1561 let Latency = 2;
1562 let NumMicroOps = 2;
1563 let ResourceCycles = [2];
1564}
1565def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1566def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1567def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1568def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1569
1570def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1571 let Latency = 2;
1572 let NumMicroOps = 2;
1573 let ResourceCycles = [1,1];
1574}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001575def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1576 "VCVTPH2PSYrr",
1577 "VCVTPH2PSrr",
1578 "(V?)CVTPS2PDrr",
1579 "(V?)CVTSS2SDrr",
1580 "(V?)EXTRACTPSrr",
1581 "(V?)PEXTRBrr",
1582 "(V?)PEXTRDrr",
1583 "(V?)PEXTRQrr",
1584 "(V?)PEXTRWrr",
1585 "(V?)PSLLDrr",
1586 "(V?)PSLLQrr",
1587 "(V?)PSLLWrr",
1588 "(V?)PSRADrr",
1589 "(V?)PSRAWrr",
1590 "(V?)PSRLDrr",
1591 "(V?)PSRLQrr",
1592 "(V?)PSRLWrr",
1593 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001594
1595def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1596 let Latency = 2;
1597 let NumMicroOps = 2;
1598 let ResourceCycles = [1,1];
1599}
1600def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1601
1602def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1603 let Latency = 2;
1604 let NumMicroOps = 2;
1605 let ResourceCycles = [1,1];
1606}
1607def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1608
1609def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1610 let Latency = 2;
1611 let NumMicroOps = 2;
1612 let ResourceCycles = [1,1];
1613}
Craig Topper498875f2018-04-04 17:54:19 +00001614def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1615
1616def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1617 let Latency = 1;
1618 let NumMicroOps = 1;
1619 let ResourceCycles = [1];
1620}
1621def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001622
1623def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1624 let Latency = 2;
1625 let NumMicroOps = 2;
1626 let ResourceCycles = [1,1];
1627}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001628def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1629def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1630 "ADC(8|16|32|64)rr",
1631 "ADC(8|16|32|64)i",
1632 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
1633 "SBB(8|16|32|64)ri",
1634 "SBB(8|16|32|64)rr",
1635 "SBB(8|16|32|64)i",
1636 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001637
1638def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001639 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001640 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001641 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001642}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001643def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1644 "BLENDVPSrm0",
1645 "PBLENDVBrm0",
1646 "VBLENDVPDrm",
1647 "VBLENDVPSrm",
1648 "VMASKMOVPDrm",
1649 "VMASKMOVPSrm",
1650 "VPBLENDVBrm",
1651 "VPMASKMOVDrm",
1652 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001653
Gadi Haber2cf601f2017-12-08 09:48:44 +00001654def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1655 let Latency = 9;
1656 let NumMicroOps = 3;
1657 let ResourceCycles = [2,1];
1658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001659def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1660 "VBLENDVPSYrm",
1661 "VMASKMOVPDYrm",
1662 "VMASKMOVPSYrm",
1663 "VPBLENDVBYrm",
1664 "VPMASKMOVDYrm",
1665 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001666
1667def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1668 let Latency = 7;
1669 let NumMicroOps = 3;
1670 let ResourceCycles = [2,1];
1671}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001672def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1673 "MMX_PACKSSWBirm",
1674 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001675
Gadi Haberd76f7b82017-08-28 10:04:16 +00001676def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001677 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001678 let NumMicroOps = 3;
1679 let ResourceCycles = [1,2];
1680}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001681def: InstRW<[HWWriteResGroup37], (instregex "LEAVE64",
1682 "SCASB",
1683 "SCASL",
1684 "SCASQ",
1685 "SCASW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001686
1687def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001688 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001689 let NumMicroOps = 3;
1690 let ResourceCycles = [1,1,1];
1691}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001692def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1693 "(V?)PSLLQrm",
1694 "(V?)PSLLWrm",
1695 "(V?)PSRADrm",
1696 "(V?)PSRAWrm",
1697 "(V?)PSRLDrm",
1698 "(V?)PSRLQrm",
1699 "(V?)PSRLWrm",
1700 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001701
1702def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001703 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001704 let NumMicroOps = 3;
1705 let ResourceCycles = [1,1,1];
1706}
1707def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1708
1709def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001710 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001711 let NumMicroOps = 3;
1712 let ResourceCycles = [1,1,1];
1713}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001714def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001715
1716def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001717 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001718 let NumMicroOps = 3;
1719 let ResourceCycles = [1,1,1];
1720}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001721def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1722 "RETL",
1723 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001724
Gadi Haberd76f7b82017-08-28 10:04:16 +00001725def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001726 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001727 let NumMicroOps = 3;
1728 let ResourceCycles = [1,1,1];
1729}
Craig Topper13a16502018-03-19 00:56:09 +00001730def: InstRW<[HWWriteResGroup43], (instregex "ADC(8|16|32|64)rm")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00001731def: InstRW<[HWWriteResGroup43], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm")>;
Craig Topper13a16502018-03-19 00:56:09 +00001732def: InstRW<[HWWriteResGroup43], (instregex "SBB(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001733
1734def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001735 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001736 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001737 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001738}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001739def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001740
Gadi Haberd76f7b82017-08-28 10:04:16 +00001741def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001742 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001743 let NumMicroOps = 4;
1744 let ResourceCycles = [1,1,1,1];
1745}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001746def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1747 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001748
1749def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001750 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001751 let NumMicroOps = 5;
1752 let ResourceCycles = [1,1,1,2];
1753}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001754def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1755 "ROL(8|16|32|64)mi",
1756 "ROR(8|16|32|64)m1",
1757 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001758
1759def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001760 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001761 let NumMicroOps = 5;
1762 let ResourceCycles = [1,1,1,2];
1763}
Craig Topper13a16502018-03-19 00:56:09 +00001764def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001765
1766def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001767 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001768 let NumMicroOps = 5;
1769 let ResourceCycles = [1,1,1,1,1];
1770}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001771def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1772 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001773
Gadi Haberd76f7b82017-08-28 10:04:16 +00001774def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1775 let Latency = 3;
1776 let NumMicroOps = 1;
1777 let ResourceCycles = [1];
1778}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001779def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1780def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1781 "ADD_FST0r",
1782 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001783 "MMX_CVTPI2PSirr",
1784 "PDEP(32|64)rr",
1785 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001786 "SHLD(16|32|64)rri8",
1787 "SHRD(16|32|64)rri8",
1788 "SUBR_FPrST0",
1789 "SUBR_FST0r",
1790 "SUBR_FrST0",
1791 "SUB_FPrST0",
1792 "SUB_FST0r",
1793 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001794 "(V?)ADDPD(Y?)rr",
1795 "(V?)ADDPS(Y?)rr",
1796 "(V?)ADDSDrr",
1797 "(V?)ADDSSrr",
1798 "(V?)ADDSUBPD(Y?)rr",
1799 "(V?)ADDSUBPS(Y?)rr",
1800 "(V?)CMPPD(Y?)rri",
1801 "(V?)CMPPS(Y?)rri",
1802 "(V?)CMPSDrr",
1803 "(V?)CMPSSrr",
1804 "(V?)COMISDrr",
1805 "(V?)COMISSrr",
1806 "(V?)CVTDQ2PS(Y?)rr",
1807 "(V?)CVTPS2DQ(Y?)rr",
1808 "(V?)CVTTPS2DQ(Y?)rr",
1809 "(V?)MAX(C?)PD(Y?)rr",
1810 "(V?)MAX(C?)PS(Y?)rr",
1811 "(V?)MAX(C?)SDrr",
1812 "(V?)MAX(C?)SSrr",
1813 "(V?)MIN(C?)PD(Y?)rr",
1814 "(V?)MIN(C?)PS(Y?)rr",
1815 "(V?)MIN(C?)SDrr",
1816 "(V?)MIN(C?)SSrr",
1817 "(V?)SUBPD(Y?)rr",
1818 "(V?)SUBPS(Y?)rr",
1819 "(V?)SUBSDrr",
1820 "(V?)SUBSSrr",
1821 "(V?)UCOMISDrr",
1822 "(V?)UCOMISSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823
Clement Courbet327fac42018-03-07 08:14:02 +00001824def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001825 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00001826 let NumMicroOps = 2;
1827 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001828}
Clement Courbet327fac42018-03-07 08:14:02 +00001829def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001830
1831def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1832 let Latency = 3;
1833 let NumMicroOps = 1;
1834 let ResourceCycles = [1];
1835}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001836def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1837 "VBROADCASTSSYrr",
1838 "VEXTRACTF128rr",
1839 "VEXTRACTI128rr",
1840 "VINSERTF128rr",
1841 "VINSERTI128rr",
1842 "VPBROADCASTBYrr",
1843 "VPBROADCASTBrr",
1844 "VPBROADCASTDYrr",
1845 "VPBROADCASTQYrr",
1846 "VPBROADCASTWYrr",
1847 "VPBROADCASTWrr",
1848 "VPERM2F128rr",
1849 "VPERM2I128rr",
1850 "VPERMDYrr",
1851 "VPERMPDYri",
1852 "VPERMPSYrr",
1853 "VPERMQYri",
1854 "VPMOVSXBDYrr",
1855 "VPMOVSXBQYrr",
1856 "VPMOVSXBWYrr",
1857 "VPMOVSXDQYrr",
1858 "VPMOVSXWDYrr",
1859 "VPMOVSXWQYrr",
1860 "VPMOVZXBDYrr",
1861 "VPMOVZXBQYrr",
1862 "VPMOVZXBWYrr",
1863 "VPMOVZXDQYrr",
1864 "VPMOVZXWDYrr",
1865 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001866
1867def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001868 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001869 let NumMicroOps = 2;
1870 let ResourceCycles = [1,1];
1871}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001872def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1873 "(V?)ADDPSrm",
1874 "(V?)ADDSUBPDrm",
1875 "(V?)ADDSUBPSrm",
1876 "(V?)CMPPDrmi",
1877 "(V?)CMPPSrmi",
1878 "(V?)CVTDQ2PSrm",
1879 "(V?)CVTPS2DQrm",
1880 "(V?)CVTTPS2DQrm",
1881 "(V?)MAX(C?)PDrm",
1882 "(V?)MAX(C?)PSrm",
1883 "(V?)MIN(C?)PDrm",
1884 "(V?)MIN(C?)PSrm",
1885 "(V?)SUBPDrm",
1886 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001887
Gadi Haber2cf601f2017-12-08 09:48:44 +00001888def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1889 let Latency = 10;
1890 let NumMicroOps = 2;
1891 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001892}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001893def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1894 "ADD_F64m",
1895 "ILD_F16m",
1896 "ILD_F32m",
1897 "ILD_F64m",
1898 "SUBR_F32m",
1899 "SUBR_F64m",
1900 "SUB_F32m",
1901 "SUB_F64m",
1902 "VADDPDYrm",
1903 "VADDPSYrm",
1904 "VADDSUBPDYrm",
1905 "VADDSUBPSYrm",
1906 "VCMPPDYrmi",
1907 "VCMPPSYrmi",
1908 "VCVTDQ2PSYrm",
1909 "VCVTPS2DQYrm",
1910 "VCVTTPS2DQYrm",
1911 "VMAX(C?)PDYrm",
1912 "VMAX(C?)PSYrm",
1913 "VMIN(C?)PDYrm",
1914 "VMIN(C?)PSYrm",
1915 "VSUBPDYrm",
1916 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001917
1918def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001919 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920 let NumMicroOps = 2;
1921 let ResourceCycles = [1,1];
1922}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001923def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1924 "VPERM2I128rm",
1925 "VPERMDYrm",
1926 "VPERMPDYmi",
1927 "VPERMPSYrm",
1928 "VPERMQYmi",
1929 "VPMOVZXBDYrm",
1930 "VPMOVZXBQYrm",
1931 "VPMOVZXBWYrm",
1932 "VPMOVZXDQYrm",
1933 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001934
Gadi Haber2cf601f2017-12-08 09:48:44 +00001935def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1936 let Latency = 9;
1937 let NumMicroOps = 2;
1938 let ResourceCycles = [1,1];
1939}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001940def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1941 "VPMOVSXDQYrm",
1942 "VPMOVSXWDYrm",
1943 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001944
Gadi Haberd76f7b82017-08-28 10:04:16 +00001945def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1946 let Latency = 3;
1947 let NumMicroOps = 3;
1948 let ResourceCycles = [3];
1949}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001950def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1951 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001952
1953def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1954 let Latency = 3;
1955 let NumMicroOps = 3;
1956 let ResourceCycles = [2,1];
1957}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001958def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1959 "VPSRAVD(Y?)rr",
1960 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001961
1962def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1963 let Latency = 3;
1964 let NumMicroOps = 3;
1965 let ResourceCycles = [2,1];
1966}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001967def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1968 "MMX_PHADDSWrr",
1969 "MMX_PHADDWrr",
1970 "MMX_PHSUBDrr",
1971 "MMX_PHSUBSWrr",
1972 "MMX_PHSUBWrr",
1973 "(V?)PHADDD(Y?)rr",
1974 "(V?)PHADDSW(Y?)rr",
1975 "(V?)PHADDW(Y?)rr",
1976 "(V?)PHSUBD(Y?)rr",
1977 "(V?)PHSUBSW(Y?)rr",
1978 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001979
1980def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1981 let Latency = 3;
1982 let NumMicroOps = 3;
1983 let ResourceCycles = [2,1];
1984}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001985def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1986 "MMX_PACKSSWBirr",
1987 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001988
1989def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1990 let Latency = 3;
1991 let NumMicroOps = 3;
1992 let ResourceCycles = [1,2];
1993}
1994def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1995
1996def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1997 let Latency = 3;
1998 let NumMicroOps = 3;
1999 let ResourceCycles = [1,2];
2000}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002001def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
2002 "RCL(8|16|32|64)r1",
2003 "RCL(8|16|32|64)ri",
2004 "RCR(8|16|32|64)r1",
2005 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002006
2007def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
2008 let Latency = 3;
2009 let NumMicroOps = 3;
2010 let ResourceCycles = [2,1];
2011}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002012def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
2013 "ROR(8|16|32|64)rCL",
2014 "SAR(8|16|32|64)rCL",
2015 "SHL(8|16|32|64)rCL",
2016 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002017
2018def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002019 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002020 let NumMicroOps = 3;
2021 let ResourceCycles = [1,1,1];
2022}
2023def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
2024
2025def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002026 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002027 let NumMicroOps = 3;
2028 let ResourceCycles = [1,1,1];
2029}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002030def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
2031 "ISTT_FP32m",
2032 "ISTT_FP64m",
2033 "IST_F16m",
2034 "IST_F32m",
2035 "IST_FP16m",
2036 "IST_FP32m",
2037 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002038
2039def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002040 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002041 let NumMicroOps = 4;
2042 let ResourceCycles = [2,1,1];
2043}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002044def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
2045 "VPSRAVDYrm",
2046 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002047
2048def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2049 let Latency = 9;
2050 let NumMicroOps = 4;
2051 let ResourceCycles = [2,1,1];
2052}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002053def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
2054 "VPSRAVDrm",
2055 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002056
2057def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002058 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002059 let NumMicroOps = 4;
2060 let ResourceCycles = [2,1,1];
2061}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002062def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
2063 "MMX_PHADDSWrm",
2064 "MMX_PHADDWrm",
2065 "MMX_PHSUBDrm",
2066 "MMX_PHSUBSWrm",
2067 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002068
2069def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2070 let Latency = 10;
2071 let NumMicroOps = 4;
2072 let ResourceCycles = [2,1,1];
2073}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002074def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
2075 "VPHADDSWYrm",
2076 "VPHADDWYrm",
2077 "VPHSUBDYrm",
2078 "VPHSUBSWYrm",
2079 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002080
2081def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2082 let Latency = 9;
2083 let NumMicroOps = 4;
2084 let ResourceCycles = [2,1,1];
2085}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002086def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
2087 "(V?)PHADDSWrm",
2088 "(V?)PHADDWrm",
2089 "(V?)PHSUBDrm",
2090 "(V?)PHSUBSWrm",
2091 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002092
2093def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002094 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002095 let NumMicroOps = 4;
2096 let ResourceCycles = [1,1,2];
2097}
Craig Topperf4cd9082018-01-19 05:47:32 +00002098def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002099
2100def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002101 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002102 let NumMicroOps = 5;
2103 let ResourceCycles = [1,1,1,2];
2104}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002105def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2106 "RCL(8|16|32|64)mi",
2107 "RCR(8|16|32|64)m1",
2108 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109
2110def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002111 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112 let NumMicroOps = 5;
2113 let ResourceCycles = [1,1,2,1];
2114}
Craig Topper13a16502018-03-19 00:56:09 +00002115def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002116
2117def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002118 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002119 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002120 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002121}
Craig Topper9f834812018-04-01 21:54:24 +00002122def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002123
Gadi Haberd76f7b82017-08-28 10:04:16 +00002124def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002125 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002126 let NumMicroOps = 6;
2127 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002128}
Craig Topper9f834812018-04-01 21:54:24 +00002129def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
2130 "ADC(8|16|32|64)mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002131 "CMPXCHG(8|16|32|64)rm",
2132 "ROL(8|16|32|64)mCL",
2133 "SAR(8|16|32|64)mCL",
2134 "SBB(8|16|32|64)mi",
2135 "SBB(8|16|32|64)mr",
2136 "SHL(8|16|32|64)mCL",
2137 "SHR(8|16|32|64)mCL")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002138
Gadi Haberd76f7b82017-08-28 10:04:16 +00002139def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2140 let Latency = 4;
2141 let NumMicroOps = 2;
2142 let ResourceCycles = [1,1];
2143}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002144def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2145 "(V?)CVTSD2SIrr",
2146 "(V?)CVTSS2SI64rr",
2147 "(V?)CVTSS2SIrr",
2148 "(V?)CVTTSD2SI64rr",
2149 "(V?)CVTTSD2SIrr",
2150 "(V?)CVTTSS2SI64rr",
2151 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002152
2153def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2154 let Latency = 4;
2155 let NumMicroOps = 2;
2156 let ResourceCycles = [1,1];
2157}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002158def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2159 "VPSLLDYrr",
2160 "VPSLLQYrr",
2161 "VPSLLWYrr",
2162 "VPSRADYrr",
2163 "VPSRAWYrr",
2164 "VPSRLDYrr",
2165 "VPSRLQYrr",
2166 "VPSRLWYrr",
2167 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002168
2169def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2170 let Latency = 4;
2171 let NumMicroOps = 2;
2172 let ResourceCycles = [1,1];
2173}
2174def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2175
2176def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2177 let Latency = 4;
2178 let NumMicroOps = 2;
2179 let ResourceCycles = [1,1];
2180}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002181def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2182 "MMX_CVTPI2PDirr",
2183 "MMX_CVTPS2PIirr",
2184 "MMX_CVTTPD2PIirr",
2185 "MMX_CVTTPS2PIirr",
2186 "(V?)CVTDQ2PDrr",
2187 "(V?)CVTPD2DQrr",
2188 "(V?)CVTPD2PSrr",
2189 "VCVTPS2PHrr",
2190 "(V?)CVTSD2SSrr",
2191 "(V?)CVTSI642SDrr",
2192 "(V?)CVTSI2SDrr",
2193 "(V?)CVTSI2SSrr",
2194 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002195
2196def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2197 let Latency = 4;
2198 let NumMicroOps = 2;
2199 let ResourceCycles = [1,1];
2200}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002201def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002202
2203def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2204 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002205 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002206}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002207def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002208
Gadi Haberd76f7b82017-08-28 10:04:16 +00002209def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002210 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002211 let NumMicroOps = 3;
2212 let ResourceCycles = [2,1];
2213}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002214def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2215 "FICOM32m",
2216 "FICOMP16m",
2217 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002218
2219def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002220 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002221 let NumMicroOps = 3;
2222 let ResourceCycles = [1,1,1];
2223}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002224def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2225 "(V?)CVTSD2SIrm",
2226 "(V?)CVTSS2SI64rm",
2227 "(V?)CVTSS2SIrm",
2228 "(V?)CVTTSD2SI64rm",
2229 "(V?)CVTTSD2SIrm",
2230 "VCVTTSS2SI64rm",
2231 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002232
2233def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002234 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002235 let NumMicroOps = 3;
2236 let ResourceCycles = [1,1,1];
2237}
2238def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002239
2240def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2241 let Latency = 11;
2242 let NumMicroOps = 3;
2243 let ResourceCycles = [1,1,1];
2244}
2245def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246
2247def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002248 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002249 let NumMicroOps = 3;
2250 let ResourceCycles = [1,1,1];
2251}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002252def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2253 "CVTPD2PSrm",
2254 "CVTTPD2DQrm",
2255 "MMX_CVTPD2PIirm",
2256 "MMX_CVTTPD2PIirm",
2257 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002258
2259def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2260 let Latency = 9;
2261 let NumMicroOps = 3;
2262 let ResourceCycles = [1,1,1];
2263}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002264def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2265 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266
2267def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002268 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002269 let NumMicroOps = 3;
2270 let ResourceCycles = [1,1,1];
2271}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002272def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002273
2274def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002275 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002276 let NumMicroOps = 3;
2277 let ResourceCycles = [1,1,1];
2278}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002279def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2280 "VPBROADCASTBrm",
2281 "VPBROADCASTWYrm",
2282 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002283
2284def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2285 let Latency = 4;
2286 let NumMicroOps = 4;
2287 let ResourceCycles = [4];
2288}
2289def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2290
2291def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2292 let Latency = 4;
2293 let NumMicroOps = 4;
2294 let ResourceCycles = [1,3];
2295}
2296def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2297
2298def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2299 let Latency = 4;
2300 let NumMicroOps = 4;
2301 let ResourceCycles = [1,1,2];
2302}
2303def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2304
2305def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002306 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002307 let NumMicroOps = 4;
2308 let ResourceCycles = [1,1,1,1];
2309}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002310def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2311 "VMASKMOVPS(Y?)mr",
2312 "VPMASKMOVD(Y?)mr",
2313 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002314
2315def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002316 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002317 let NumMicroOps = 4;
2318 let ResourceCycles = [1,1,1,1];
2319}
2320def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2321
2322def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002323 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002324 let NumMicroOps = 4;
2325 let ResourceCycles = [1,1,1,1];
2326}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002327def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2328 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002329
2330def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002331 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002332 let NumMicroOps = 5;
2333 let ResourceCycles = [1,2,1,1];
2334}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002335def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2336 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002337
2338def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002339 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002340 let NumMicroOps = 6;
2341 let ResourceCycles = [1,1,4];
2342}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002343def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2344 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002345
2346def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002347 let Latency = 5;
2348 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002349 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002350}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002351def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2352 "MMX_PMADDWDirr",
2353 "MMX_PMULHRSWrr",
2354 "MMX_PMULHUWirr",
2355 "MMX_PMULHWirr",
2356 "MMX_PMULLWirr",
2357 "MMX_PMULUDQirr",
2358 "MMX_PSADBWirr",
2359 "MUL_FPrST0",
2360 "MUL_FST0r",
2361 "MUL_FrST0",
2362 "(V?)PCMPGTQ(Y?)rr",
2363 "(V?)PHMINPOSUWrr",
2364 "(V?)PMADDUBSW(Y?)rr",
2365 "(V?)PMADDWD(Y?)rr",
2366 "(V?)PMULDQ(Y?)rr",
2367 "(V?)PMULHRSW(Y?)rr",
2368 "(V?)PMULHUW(Y?)rr",
2369 "(V?)PMULHW(Y?)rr",
2370 "(V?)PMULLW(Y?)rr",
2371 "(V?)PMULUDQ(Y?)rr",
2372 "(V?)PSADBW(Y?)rr",
2373 "(V?)RCPPSr",
2374 "(V?)RCPSSr",
2375 "(V?)RSQRTPSr",
2376 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002377
Gadi Haberd76f7b82017-08-28 10:04:16 +00002378def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002379 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002380 let NumMicroOps = 1;
2381 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002382}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002383def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2384 "(V?)MULPS(Y?)rr",
2385 "(V?)MULSDrr",
2386 "(V?)MULSSrr",
2387 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2388 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002389
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002391 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002392 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002393 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002394}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002395def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2396 "MMX_PMADDWDirm",
2397 "MMX_PMULHRSWrm",
2398 "MMX_PMULHUWirm",
2399 "MMX_PMULHWirm",
2400 "MMX_PMULLWirm",
2401 "MMX_PMULUDQirm",
2402 "MMX_PSADBWirm",
2403 "(V?)RCPSSm",
2404 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002405
Craig Topper8104f262018-04-02 05:33:28 +00002406def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002407 let Latency = 16;
2408 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002409 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002410}
2411def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2412
Craig Topper8104f262018-04-02 05:33:28 +00002413def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002414 let Latency = 18;
2415 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002416 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002417}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002418def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002419
2420def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2421 let Latency = 11;
2422 let NumMicroOps = 2;
2423 let ResourceCycles = [1,1];
2424}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002425def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2426 "(V?)PHMINPOSUWrm",
2427 "(V?)PMADDUBSWrm",
2428 "(V?)PMADDWDrm",
2429 "(V?)PMULDQrm",
2430 "(V?)PMULHRSWrm",
2431 "(V?)PMULHUWrm",
2432 "(V?)PMULHWrm",
2433 "(V?)PMULLWrm",
2434 "(V?)PMULUDQrm",
2435 "(V?)PSADBWrm",
2436 "(V?)RCPPSm",
2437 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002438
2439def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2440 let Latency = 12;
2441 let NumMicroOps = 2;
2442 let ResourceCycles = [1,1];
2443}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002444def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2445 "MUL_F64m",
2446 "VPCMPGTQYrm",
2447 "VPMADDUBSWYrm",
2448 "VPMADDWDYrm",
2449 "VPMULDQYrm",
2450 "VPMULHRSWYrm",
2451 "VPMULHUWYrm",
2452 "VPMULHWYrm",
2453 "VPMULLWYrm",
2454 "VPMULUDQYrm",
2455 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002456
Gadi Haberd76f7b82017-08-28 10:04:16 +00002457def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002458 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002459 let NumMicroOps = 2;
2460 let ResourceCycles = [1,1];
2461}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002462def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2463 "(V?)MULPSrm",
2464 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002465
2466def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2467 let Latency = 12;
2468 let NumMicroOps = 2;
2469 let ResourceCycles = [1,1];
2470}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002471def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2472 "VMULPSYrm",
2473 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002474
2475def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2476 let Latency = 10;
2477 let NumMicroOps = 2;
2478 let ResourceCycles = [1,1];
2479}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002480def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2481 "(V?)MULSSrm",
2482 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002483
2484def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2485 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002486 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002487 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002488}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002489def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2490 "(V?)HADDPD(Y?)rr",
2491 "(V?)HADDPS(Y?)rr",
2492 "(V?)HSUBPD(Y?)rr",
2493 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002494
Gadi Haberd76f7b82017-08-28 10:04:16 +00002495def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2496 let Latency = 5;
2497 let NumMicroOps = 3;
2498 let ResourceCycles = [1,1,1];
2499}
2500def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2501
2502def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002503 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002504 let NumMicroOps = 3;
2505 let ResourceCycles = [1,1,1];
2506}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002507def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002508
2509def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002510 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002511 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002512 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002514def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2515 "(V?)HADDPSrm",
2516 "(V?)HSUBPDrm",
2517 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002518
Gadi Haber2cf601f2017-12-08 09:48:44 +00002519def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2520 let Latency = 12;
2521 let NumMicroOps = 4;
2522 let ResourceCycles = [1,2,1];
2523}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002524def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2525 "VHADDPSYrm",
2526 "VHSUBPDYrm",
2527 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002528
Gadi Haberd76f7b82017-08-28 10:04:16 +00002529def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002530 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002531 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002532 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002533}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002534def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002535
Gadi Haberd76f7b82017-08-28 10:04:16 +00002536def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002537 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002538 let NumMicroOps = 4;
2539 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002540}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002541def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002542
Gadi Haberd76f7b82017-08-28 10:04:16 +00002543def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2544 let Latency = 5;
2545 let NumMicroOps = 5;
2546 let ResourceCycles = [1,4];
2547}
2548def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2549
2550def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2551 let Latency = 5;
2552 let NumMicroOps = 5;
2553 let ResourceCycles = [1,4];
2554}
2555def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2556
2557def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2558 let Latency = 5;
2559 let NumMicroOps = 5;
2560 let ResourceCycles = [2,3];
2561}
Craig Topper13a16502018-03-19 00:56:09 +00002562def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002563
2564def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2565 let Latency = 6;
2566 let NumMicroOps = 2;
2567 let ResourceCycles = [1,1];
2568}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002569def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2570 "VCVTPD2DQYrr",
2571 "VCVTPD2PSYrr",
2572 "VCVTPS2PHYrr",
2573 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002574
2575def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002576 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002577 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002578 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002579}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002580def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2581 "ADD_FI32m",
2582 "SUBR_FI16m",
2583 "SUBR_FI32m",
2584 "SUB_FI16m",
2585 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002586 "VROUNDPDYm",
2587 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002588
Gadi Haber2cf601f2017-12-08 09:48:44 +00002589def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2590 let Latency = 12;
2591 let NumMicroOps = 3;
2592 let ResourceCycles = [2,1];
2593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002594def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2595 "(V?)ROUNDPSm",
2596 "(V?)ROUNDSDm",
2597 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002598
Gadi Haberd76f7b82017-08-28 10:04:16 +00002599def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002600 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002601 let NumMicroOps = 3;
2602 let ResourceCycles = [1,1,1];
2603}
2604def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2605
2606def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2607 let Latency = 6;
2608 let NumMicroOps = 4;
2609 let ResourceCycles = [1,1,2];
2610}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002611def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2612 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002613
2614def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002615 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002616 let NumMicroOps = 4;
2617 let ResourceCycles = [1,1,1,1];
2618}
2619def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2620
2621def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2622 let Latency = 6;
2623 let NumMicroOps = 4;
2624 let ResourceCycles = [1,1,1,1];
2625}
2626def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2627
2628def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2629 let Latency = 6;
2630 let NumMicroOps = 6;
2631 let ResourceCycles = [1,5];
2632}
2633def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2634
2635def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002636 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002637 let NumMicroOps = 6;
2638 let ResourceCycles = [1,1,1,1,2];
2639}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002640def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2641 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002642
Gadi Haberd76f7b82017-08-28 10:04:16 +00002643def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2644 let Latency = 7;
2645 let NumMicroOps = 3;
2646 let ResourceCycles = [1,2];
2647}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002648def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002649
2650def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002651 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002652 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002653 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002654}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002655def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656
Gadi Haber2cf601f2017-12-08 09:48:44 +00002657def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2658 let Latency = 14;
2659 let NumMicroOps = 4;
2660 let ResourceCycles = [1,2,1];
2661}
2662def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2663
Gadi Haberd76f7b82017-08-28 10:04:16 +00002664def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2665 let Latency = 7;
2666 let NumMicroOps = 7;
2667 let ResourceCycles = [2,2,1,2];
2668}
Craig Topper2d451e72018-03-18 08:38:06 +00002669def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002670
2671def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002672 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002673 let NumMicroOps = 3;
2674 let ResourceCycles = [1,1,1];
2675}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002676def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2677 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002678
2679def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2680 let Latency = 9;
2681 let NumMicroOps = 3;
2682 let ResourceCycles = [1,1,1];
2683}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002684def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002685
2686def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002687 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002688 let NumMicroOps = 4;
2689 let ResourceCycles = [1,1,1,1];
2690}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002691def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002692
Gadi Haber2cf601f2017-12-08 09:48:44 +00002693def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2694 let Latency = 17;
2695 let NumMicroOps = 3;
2696 let ResourceCycles = [2,1];
2697}
2698def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2699
Gadi Haberd76f7b82017-08-28 10:04:16 +00002700def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002701 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002702 let NumMicroOps = 10;
2703 let ResourceCycles = [1,1,1,4,1,2];
2704}
Craig Topper13a16502018-03-19 00:56:09 +00002705def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002706
Craig Topper8104f262018-04-02 05:33:28 +00002707def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002708 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002709 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002710 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002711}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002712def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2713 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002714
Gadi Haberd76f7b82017-08-28 10:04:16 +00002715def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2716 let Latency = 11;
2717 let NumMicroOps = 3;
2718 let ResourceCycles = [2,1];
2719}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002720def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2721 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722
Gadi Haberd76f7b82017-08-28 10:04:16 +00002723def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002724 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002725 let NumMicroOps = 4;
2726 let ResourceCycles = [2,1,1];
2727}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002728def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2729 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002730
2731def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2732 let Latency = 11;
2733 let NumMicroOps = 7;
2734 let ResourceCycles = [2,2,3];
2735}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002736def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2737 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002738
2739def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2740 let Latency = 11;
2741 let NumMicroOps = 9;
2742 let ResourceCycles = [1,4,1,3];
2743}
2744def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2745
2746def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2747 let Latency = 11;
2748 let NumMicroOps = 11;
2749 let ResourceCycles = [2,9];
2750}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002751def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002752
2753def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002754 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002755 let NumMicroOps = 14;
2756 let ResourceCycles = [1,1,1,4,2,5];
2757}
2758def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2759
Craig Topper8104f262018-04-02 05:33:28 +00002760def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002761 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002762 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002763 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002764}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002765def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2766 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002767
Craig Topper8104f262018-04-02 05:33:28 +00002768def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002769 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002770 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002771 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002772}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002773def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002774
2775def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002776 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002777 let NumMicroOps = 11;
2778 let ResourceCycles = [2,1,1,3,1,3];
2779}
Craig Topper13a16502018-03-19 00:56:09 +00002780def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002781
Craig Topper8104f262018-04-02 05:33:28 +00002782def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002783 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002784 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002785 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002786}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002787def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002788
Gadi Haberd76f7b82017-08-28 10:04:16 +00002789def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2790 let Latency = 14;
2791 let NumMicroOps = 4;
2792 let ResourceCycles = [2,1,1];
2793}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002794def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002795
2796def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002797 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002798 let NumMicroOps = 5;
2799 let ResourceCycles = [2,1,1,1];
2800}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002801def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002802
Gadi Haber2cf601f2017-12-08 09:48:44 +00002803def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2804 let Latency = 21;
2805 let NumMicroOps = 5;
2806 let ResourceCycles = [2,1,1,1];
2807}
2808def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2809
Gadi Haberd76f7b82017-08-28 10:04:16 +00002810def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2811 let Latency = 14;
2812 let NumMicroOps = 10;
2813 let ResourceCycles = [2,3,1,4];
2814}
2815def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2816
2817def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002818 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002819 let NumMicroOps = 15;
2820 let ResourceCycles = [1,14];
2821}
2822def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2823
2824def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002825 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002826 let NumMicroOps = 8;
2827 let ResourceCycles = [1,1,1,1,1,1,2];
2828}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002829def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2830 "INSL",
2831 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002832
2833def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2834 let Latency = 16;
2835 let NumMicroOps = 16;
2836 let ResourceCycles = [16];
2837}
2838def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2839
2840def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002841 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002842 let NumMicroOps = 19;
2843 let ResourceCycles = [2,1,4,1,1,4,6];
2844}
2845def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2846
2847def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2848 let Latency = 17;
2849 let NumMicroOps = 15;
2850 let ResourceCycles = [2,1,2,4,2,4];
2851}
2852def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2853
Gadi Haberd76f7b82017-08-28 10:04:16 +00002854def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2855 let Latency = 18;
2856 let NumMicroOps = 8;
2857 let ResourceCycles = [1,1,1,5];
2858}
2859def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002860def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002861
Gadi Haberd76f7b82017-08-28 10:04:16 +00002862def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002863 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002864 let NumMicroOps = 19;
2865 let ResourceCycles = [3,1,15];
2866}
Craig Topper391c6f92017-12-10 01:24:08 +00002867def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002868
Gadi Haberd76f7b82017-08-28 10:04:16 +00002869def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2870 let Latency = 20;
2871 let NumMicroOps = 1;
2872 let ResourceCycles = [1];
2873}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002874def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2875 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002876 "DIV_FrST0")>;
2877
2878def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2879 let Latency = 20;
2880 let NumMicroOps = 1;
2881 let ResourceCycles = [1,14];
2882}
2883def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2884 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002885
2886def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002887 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002888 let NumMicroOps = 2;
2889 let ResourceCycles = [1,1];
2890}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002891def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002892 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002893
Craig Topper8104f262018-04-02 05:33:28 +00002894def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002895 let Latency = 26;
2896 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002897 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002898}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002899def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002900
Craig Topper8104f262018-04-02 05:33:28 +00002901def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002902 let Latency = 21;
2903 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002904 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002905}
2906def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2907
Craig Topper8104f262018-04-02 05:33:28 +00002908def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002909 let Latency = 22;
2910 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002911 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002912}
2913def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2914
Craig Topper8104f262018-04-02 05:33:28 +00002915def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002916 let Latency = 25;
2917 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002918 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002919}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002920def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002921
2922def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2923 let Latency = 20;
2924 let NumMicroOps = 10;
2925 let ResourceCycles = [1,2,7];
2926}
2927def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2928
Craig Topper8104f262018-04-02 05:33:28 +00002929def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002930 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002931 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002932 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002933}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002934def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2935 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002936
Craig Topper8104f262018-04-02 05:33:28 +00002937def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002938 let Latency = 21;
2939 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002940 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002941}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002942def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2943 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002944
Craig Topper8104f262018-04-02 05:33:28 +00002945def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002946 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002947 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002948 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002949}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002950def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2951 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002952
2953def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002954 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002955 let NumMicroOps = 3;
2956 let ResourceCycles = [1,1,1];
2957}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002958def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2959 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002960
2961def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2962 let Latency = 24;
2963 let NumMicroOps = 1;
2964 let ResourceCycles = [1];
2965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002966def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2967 "DIVR_FST0r",
2968 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002969
2970def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002971 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002972 let NumMicroOps = 2;
2973 let ResourceCycles = [1,1];
2974}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002975def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2976 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002977
2978def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002979 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002980 let NumMicroOps = 27;
2981 let ResourceCycles = [1,5,1,1,19];
2982}
2983def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2984
2985def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002986 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002987 let NumMicroOps = 28;
2988 let ResourceCycles = [1,6,1,1,19];
2989}
Craig Topper2d451e72018-03-18 08:38:06 +00002990def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002991
2992def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002993 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002994 let NumMicroOps = 3;
2995 let ResourceCycles = [1,1,1];
2996}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002997def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2998 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002999
Gadi Haberd76f7b82017-08-28 10:04:16 +00003000def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003001 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003002 let NumMicroOps = 23;
3003 let ResourceCycles = [1,5,3,4,10];
3004}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003005def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
3006 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003007
3008def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003009 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003010 let NumMicroOps = 23;
3011 let ResourceCycles = [1,5,2,1,4,10];
3012}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003013def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
3014 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003015
3016def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
3017 let Latency = 31;
3018 let NumMicroOps = 31;
3019 let ResourceCycles = [8,1,21,1];
3020}
3021def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
3022
Craig Topper8104f262018-04-02 05:33:28 +00003023def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00003024 let Latency = 35;
3025 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00003026 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00003027}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003028def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
3029 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003030
Craig Topper8104f262018-04-02 05:33:28 +00003031def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003032 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003033 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00003034 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00003035}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003036def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
3037 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003038
3039def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003040 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003041 let NumMicroOps = 18;
3042 let ResourceCycles = [1,1,2,3,1,1,1,8];
3043}
3044def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
3045
3046def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
3047 let Latency = 42;
3048 let NumMicroOps = 22;
3049 let ResourceCycles = [2,20];
3050}
Craig Topper2d451e72018-03-18 08:38:06 +00003051def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003052
3053def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003054 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003055 let NumMicroOps = 64;
3056 let ResourceCycles = [2,2,8,1,10,2,39];
3057}
3058def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003059
3060def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003061 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003062 let NumMicroOps = 88;
3063 let ResourceCycles = [4,4,31,1,2,1,45];
3064}
Craig Topper2d451e72018-03-18 08:38:06 +00003065def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003066
3067def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003068 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003069 let NumMicroOps = 90;
3070 let ResourceCycles = [4,2,33,1,2,1,47];
3071}
Craig Topper2d451e72018-03-18 08:38:06 +00003072def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003073
3074def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
3075 let Latency = 75;
3076 let NumMicroOps = 15;
3077 let ResourceCycles = [6,3,6];
3078}
3079def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
3080
3081def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3082 let Latency = 98;
3083 let NumMicroOps = 32;
3084 let ResourceCycles = [7,7,3,3,1,11];
3085}
3086def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
3087
3088def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3089 let Latency = 112;
3090 let NumMicroOps = 66;
3091 let ResourceCycles = [4,2,4,8,14,34];
3092}
3093def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3094
3095def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003096 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003097 let NumMicroOps = 100;
3098 let ResourceCycles = [9,9,11,8,1,11,21,30];
3099}
3100def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003101
Gadi Haber2cf601f2017-12-08 09:48:44 +00003102def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3103 let Latency = 26;
3104 let NumMicroOps = 12;
3105 let ResourceCycles = [2,2,1,3,2,2];
3106}
Craig Topper17a31182017-12-16 18:35:29 +00003107def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3108 VPGATHERDQrm,
3109 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003110
3111def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3112 let Latency = 24;
3113 let NumMicroOps = 22;
3114 let ResourceCycles = [5,3,4,1,5,4];
3115}
Craig Topper17a31182017-12-16 18:35:29 +00003116def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3117 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003118
3119def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3120 let Latency = 28;
3121 let NumMicroOps = 22;
3122 let ResourceCycles = [5,3,4,1,5,4];
3123}
Craig Topper17a31182017-12-16 18:35:29 +00003124def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003125
3126def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3127 let Latency = 25;
3128 let NumMicroOps = 22;
3129 let ResourceCycles = [5,3,4,1,5,4];
3130}
Craig Topper17a31182017-12-16 18:35:29 +00003131def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003132
3133def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3134 let Latency = 27;
3135 let NumMicroOps = 20;
3136 let ResourceCycles = [3,3,4,1,5,4];
3137}
Craig Topper17a31182017-12-16 18:35:29 +00003138def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3139 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003140
3141def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3142 let Latency = 27;
3143 let NumMicroOps = 34;
3144 let ResourceCycles = [5,3,8,1,9,8];
3145}
Craig Topper17a31182017-12-16 18:35:29 +00003146def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3147 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003148
3149def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3150 let Latency = 23;
3151 let NumMicroOps = 14;
3152 let ResourceCycles = [3,3,2,1,3,2];
3153}
Craig Topper17a31182017-12-16 18:35:29 +00003154def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3155 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003156
3157def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3158 let Latency = 28;
3159 let NumMicroOps = 15;
3160 let ResourceCycles = [3,3,2,1,4,2];
3161}
Craig Topper17a31182017-12-16 18:35:29 +00003162def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003163
3164def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3165 let Latency = 25;
3166 let NumMicroOps = 15;
3167 let ResourceCycles = [3,3,2,1,4,2];
3168}
Craig Topper17a31182017-12-16 18:35:29 +00003169def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3170 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003171
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003172} // SchedModel