blob: 544bb65ebf35c2699bb6bef9270a2dd1fb2aeeef [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
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",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000636 "MOVNTI_64mr",
637 "MOVNTImr",
638 "ST_FP32m",
639 "ST_FP64m",
640 "ST_FP80m",
641 "VEXTRACTF128mr",
642 "VEXTRACTI128mr",
643 "(V?)MOVAPD(Y?)mr",
644 "(V?)MOVAPS(V?)mr",
645 "(V?)MOVDQA(Y?)mr",
646 "(V?)MOVDQU(Y?)mr",
647 "(V?)MOVHPDmr",
648 "(V?)MOVHPSmr",
649 "(V?)MOVLPDmr",
650 "(V?)MOVLPSmr",
651 "(V?)MOVNTDQ(Y?)mr",
652 "(V?)MOVNTPD(Y?)mr",
653 "(V?)MOVNTPS(Y?)mr",
654 "(V?)MOVPDI2DImr",
655 "(V?)MOVPQI2QImr",
656 "(V?)MOVPQIto64mr",
657 "(V?)MOVSDmr",
658 "(V?)MOVSSmr",
659 "(V?)MOVUPD(Y?)mr",
660 "(V?)MOVUPS(Y?)mr",
661 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000662
Gadi Haberd76f7b82017-08-28 10:04:16 +0000663def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
664 let Latency = 1;
665 let NumMicroOps = 1;
666 let ResourceCycles = [1];
667}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000668def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
669 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000670 "MMX_PSLLDri",
671 "MMX_PSLLDrr",
672 "MMX_PSLLQri",
673 "MMX_PSLLQrr",
674 "MMX_PSLLWri",
675 "MMX_PSLLWrr",
676 "MMX_PSRADri",
677 "MMX_PSRADrr",
678 "MMX_PSRAWri",
679 "MMX_PSRAWrr",
680 "MMX_PSRLDri",
681 "MMX_PSRLDrr",
682 "MMX_PSRLQri",
683 "MMX_PSRLQrr",
684 "MMX_PSRLWri",
685 "MMX_PSRLWrr",
686 "(V?)MOVPDI2DIrr",
687 "(V?)MOVPQIto64rr",
688 "(V?)PSLLD(Y?)ri",
689 "(V?)PSLLQ(Y?)ri",
690 "VPSLLVQ(Y?)rr",
691 "(V?)PSLLW(Y?)ri",
692 "(V?)PSRAD(Y?)ri",
693 "(V?)PSRAW(Y?)ri",
694 "(V?)PSRLD(Y?)ri",
695 "(V?)PSRLQ(Y?)ri",
696 "VPSRLVQ(Y?)rr",
697 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000698 "VTESTPD(Y?)rr",
699 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000700
701def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
702 let Latency = 1;
703 let NumMicroOps = 1;
704 let ResourceCycles = [1];
705}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000706def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
707 "COM_FST0r",
708 "UCOM_FPr",
709 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000710
711def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
712 let Latency = 1;
713 let NumMicroOps = 1;
714 let ResourceCycles = [1];
715}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000716def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000717 "MMX_MOVD64to64rr",
718 "MMX_MOVQ2DQrr",
719 "MMX_PALIGNRrri",
720 "MMX_PSHUFBrr",
721 "MMX_PSHUFWri",
722 "MMX_PUNPCKHBWirr",
723 "MMX_PUNPCKHDQirr",
724 "MMX_PUNPCKHWDirr",
725 "MMX_PUNPCKLBWirr",
726 "MMX_PUNPCKLDQirr",
727 "MMX_PUNPCKLWDirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000728 "(V?)ANDNPD(Y?)rr",
729 "(V?)ANDNPS(Y?)rr",
730 "(V?)ANDPD(Y?)rr",
731 "(V?)ANDPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000732 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000733 "(V?)INSERTPSrr",
734 "(V?)MOV64toPQIrr",
735 "(V?)MOVAPD(Y?)rr",
736 "(V?)MOVAPS(Y?)rr",
737 "(V?)MOVDDUP(Y?)rr",
738 "(V?)MOVDI2PDIrr",
739 "(V?)MOVHLPSrr",
740 "(V?)MOVLHPSrr",
741 "(V?)MOVSDrr",
742 "(V?)MOVSHDUP(Y?)rr",
743 "(V?)MOVSLDUP(Y?)rr",
744 "(V?)MOVSSrr",
745 "(V?)MOVUPD(Y?)rr",
746 "(V?)MOVUPS(Y?)rr",
747 "(V?)ORPD(Y?)rr",
748 "(V?)ORPS(Y?)rr",
749 "(V?)PACKSSDW(Y?)rr",
750 "(V?)PACKSSWB(Y?)rr",
751 "(V?)PACKUSDW(Y?)rr",
752 "(V?)PACKUSWB(Y?)rr",
753 "(V?)PALIGNR(Y?)rri",
754 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000755 "VPBROADCASTDrr",
756 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000757 "VPERMILPD(Y?)ri",
758 "VPERMILPD(Y?)rr",
759 "VPERMILPS(Y?)ri",
760 "VPERMILPS(Y?)rr",
761 "(V?)PMOVSXBDrr",
762 "(V?)PMOVSXBQrr",
763 "(V?)PMOVSXBWrr",
764 "(V?)PMOVSXDQrr",
765 "(V?)PMOVSXWDrr",
766 "(V?)PMOVSXWQrr",
767 "(V?)PMOVZXBDrr",
768 "(V?)PMOVZXBQrr",
769 "(V?)PMOVZXBWrr",
770 "(V?)PMOVZXDQrr",
771 "(V?)PMOVZXWDrr",
772 "(V?)PMOVZXWQrr",
773 "(V?)PSHUFB(Y?)rr",
774 "(V?)PSHUFD(Y?)ri",
775 "(V?)PSHUFHW(Y?)ri",
776 "(V?)PSHUFLW(Y?)ri",
777 "(V?)PSLLDQ(Y?)ri",
778 "(V?)PSRLDQ(Y?)ri",
779 "(V?)PUNPCKHBW(Y?)rr",
780 "(V?)PUNPCKHDQ(Y?)rr",
781 "(V?)PUNPCKHQDQ(Y?)rr",
782 "(V?)PUNPCKHWD(Y?)rr",
783 "(V?)PUNPCKLBW(Y?)rr",
784 "(V?)PUNPCKLDQ(Y?)rr",
785 "(V?)PUNPCKLQDQ(Y?)rr",
786 "(V?)PUNPCKLWD(Y?)rr",
787 "(V?)SHUFPD(Y?)rri",
788 "(V?)SHUFPS(Y?)rri",
789 "(V?)UNPCKHPD(Y?)rr",
790 "(V?)UNPCKHPS(Y?)rr",
791 "(V?)UNPCKLPD(Y?)rr",
792 "(V?)UNPCKLPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000793 "(V?)XORPD(Y?)rr",
794 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000795
796def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
797 let Latency = 1;
798 let NumMicroOps = 1;
799 let ResourceCycles = [1];
800}
801def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
802
803def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
804 let Latency = 1;
805 let NumMicroOps = 1;
806 let ResourceCycles = [1];
807}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000808def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
809 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000810
811def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
812 let Latency = 1;
813 let NumMicroOps = 1;
814 let ResourceCycles = [1];
815}
Craig Topperfbe31322018-04-05 21:56:19 +0000816def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000817def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
818 "BT(16|32|64)rr",
819 "BTC(16|32|64)ri8",
820 "BTC(16|32|64)rr",
821 "BTR(16|32|64)ri8",
822 "BTR(16|32|64)rr",
823 "BTS(16|32|64)ri8",
824 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000825 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
826 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
827 "JMP_1",
828 "JMP_4",
829 "RORX(32|64)ri",
830 "SAR(8|16|32|64)r1",
831 "SAR(8|16|32|64)ri",
832 "SARX(32|64)rr",
833 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
834 "SHL(8|16|32|64)r1",
835 "SHL(8|16|32|64)ri",
836 "SHLX(32|64)rr",
837 "SHR(8|16|32|64)r1",
838 "SHR(8|16|32|64)ri",
839 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000840
841def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
842 let Latency = 1;
843 let NumMicroOps = 1;
844 let ResourceCycles = [1];
845}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000846def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
847 "BLSI(32|64)rr",
848 "BLSMSK(32|64)rr",
849 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850 "LEA(16|32|64)(_32)?r",
851 "MMX_PABSBrr",
852 "MMX_PABSDrr",
853 "MMX_PABSWrr",
854 "MMX_PADDBirr",
855 "MMX_PADDDirr",
856 "MMX_PADDQirr",
857 "MMX_PADDSBirr",
858 "MMX_PADDSWirr",
859 "MMX_PADDUSBirr",
860 "MMX_PADDUSWirr",
861 "MMX_PADDWirr",
862 "MMX_PAVGBirr",
863 "MMX_PAVGWirr",
864 "MMX_PCMPEQBirr",
865 "MMX_PCMPEQDirr",
866 "MMX_PCMPEQWirr",
867 "MMX_PCMPGTBirr",
868 "MMX_PCMPGTDirr",
869 "MMX_PCMPGTWirr",
870 "MMX_PMAXSWirr",
871 "MMX_PMAXUBirr",
872 "MMX_PMINSWirr",
873 "MMX_PMINUBirr",
874 "MMX_PSIGNBrr",
875 "MMX_PSIGNDrr",
876 "MMX_PSIGNWrr",
877 "MMX_PSUBBirr",
878 "MMX_PSUBDirr",
879 "MMX_PSUBQirr",
880 "MMX_PSUBSBirr",
881 "MMX_PSUBSWirr",
882 "MMX_PSUBUSBirr",
883 "MMX_PSUBUSWirr",
884 "MMX_PSUBWirr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000885 "(V?)PABSB(Y?)rr",
886 "(V?)PABSD(Y?)rr",
887 "(V?)PABSW(Y?)rr",
888 "(V?)PADDB(Y?)rr",
889 "(V?)PADDD(Y?)rr",
890 "(V?)PADDQ(Y?)rr",
891 "(V?)PADDSB(Y?)rr",
892 "(V?)PADDSW(Y?)rr",
893 "(V?)PADDUSB(Y?)rr",
894 "(V?)PADDUSW(Y?)rr",
895 "(V?)PADDW(Y?)rr",
896 "(V?)PAVGB(Y?)rr",
897 "(V?)PAVGW(Y?)rr",
898 "(V?)PCMPEQB(Y?)rr",
899 "(V?)PCMPEQD(Y?)rr",
900 "(V?)PCMPEQQ(Y?)rr",
901 "(V?)PCMPEQW(Y?)rr",
902 "(V?)PCMPGTB(Y?)rr",
903 "(V?)PCMPGTD(Y?)rr",
904 "(V?)PCMPGTW(Y?)rr",
905 "(V?)PMAXSB(Y?)rr",
906 "(V?)PMAXSD(Y?)rr",
907 "(V?)PMAXSW(Y?)rr",
908 "(V?)PMAXUB(Y?)rr",
909 "(V?)PMAXUD(Y?)rr",
910 "(V?)PMAXUW(Y?)rr",
911 "(V?)PMINSB(Y?)rr",
912 "(V?)PMINSD(Y?)rr",
913 "(V?)PMINSW(Y?)rr",
914 "(V?)PMINUB(Y?)rr",
915 "(V?)PMINUD(Y?)rr",
916 "(V?)PMINUW(Y?)rr",
917 "(V?)PSIGNB(Y?)rr",
918 "(V?)PSIGND(Y?)rr",
919 "(V?)PSIGNW(Y?)rr",
920 "(V?)PSUBB(Y?)rr",
921 "(V?)PSUBD(Y?)rr",
922 "(V?)PSUBQ(Y?)rr",
923 "(V?)PSUBSB(Y?)rr",
924 "(V?)PSUBSW(Y?)rr",
925 "(V?)PSUBUSB(Y?)rr",
926 "(V?)PSUBUSW(Y?)rr",
927 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000928
929def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
930 let Latency = 1;
931 let NumMicroOps = 1;
932 let ResourceCycles = [1];
933}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000934def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
935 "MMX_PANDNirr",
936 "MMX_PANDirr",
937 "MMX_PORirr",
938 "MMX_PXORirr",
939 "(V?)BLENDPD(Y?)rri",
940 "(V?)BLENDPS(Y?)rri",
941 "(V?)MOVDQA(Y?)rr",
942 "(V?)MOVDQU(Y?)rr",
943 "(V?)MOVPQI2QIrr",
944 "VMOVZPQILo2PQIrr",
945 "(V?)PANDN(Y?)rr",
946 "(V?)PAND(Y?)rr",
947 "VPBLENDD(Y?)rri",
948 "(V?)POR(Y?)rr",
949 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000950
951def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
952 let Latency = 1;
953 let NumMicroOps = 1;
954 let ResourceCycles = [1];
955}
Craig Topperfbe31322018-04-05 21:56:19 +0000956def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000957def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000958 "CMC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000959 "LAHF",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000960 "NOOP",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000961 "SAHF",
962 "SGDT64m",
963 "SIDT64m",
964 "SLDT64m",
965 "SMSW16m",
966 "STC",
967 "STRm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000968 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000969 "XCHG(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000970
971def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000972 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000973 let NumMicroOps = 2;
974 let ResourceCycles = [1,1];
975}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000976def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
977 "MMX_PSLLQrm",
978 "MMX_PSLLWrm",
979 "MMX_PSRADrm",
980 "MMX_PSRAWrm",
981 "MMX_PSRLDrm",
982 "MMX_PSRLQrm",
983 "MMX_PSRLWrm",
984 "VCVTPH2PSrm",
985 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000986
Gadi Haber2cf601f2017-12-08 09:48:44 +0000987def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
988 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000989 let NumMicroOps = 2;
990 let ResourceCycles = [1,1];
991}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000992def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
993 "(V?)CVTSS2SDrm",
994 "VPSLLVQrm",
995 "VPSRLVQrm",
996 "VTESTPDrm",
997 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000998
999def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1000 let Latency = 8;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001004def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1005 "VPSLLQYrm",
1006 "VPSLLVQYrm",
1007 "VPSLLWYrm",
1008 "VPSRADYrm",
1009 "VPSRAWYrm",
1010 "VPSRLDYrm",
1011 "VPSRLQYrm",
1012 "VPSRLVQYrm",
1013 "VPSRLWYrm",
1014 "VTESTPDYrm",
1015 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001016
1017def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1018 let Latency = 8;
1019 let NumMicroOps = 2;
1020 let ResourceCycles = [1,1];
1021}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001022def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1023 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001024 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001025def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001026 "FCOM64m",
1027 "FCOMP32m",
1028 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001029 "MMX_CVTPI2PSirm",
1030 "MMX_CVTPS2PIirm",
1031 "MMX_CVTTPS2PIirm",
1032 "PDEP(32|64)rm",
1033 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001034 "(V?)ADDSDrm",
1035 "(V?)ADDSSrm",
1036 "(V?)CMPSDrm",
1037 "(V?)CMPSSrm",
1038 "(V?)COMISDrm",
1039 "(V?)COMISSrm",
1040 "(V?)MAX(C?)SDrm",
1041 "(V?)MAX(C?)SSrm",
1042 "(V?)MIN(C?)SDrm",
1043 "(V?)MIN(C?)SSrm",
1044 "(V?)SUBSDrm",
1045 "(V?)SUBSSrm",
1046 "(V?)UCOMISDrm",
1047 "(V?)UCOMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001048
1049def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001050 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001051 let NumMicroOps = 2;
1052 let ResourceCycles = [1,1];
1053}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001054def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1055 "(V?)ANDNPDrm",
1056 "(V?)ANDNPSrm",
1057 "(V?)ANDPDrm",
1058 "(V?)ANDPSrm",
1059 "(V?)INSERTPSrm",
1060 "(V?)ORPDrm",
1061 "(V?)ORPSrm",
1062 "(V?)PACKSSDWrm",
1063 "(V?)PACKSSWBrm",
1064 "(V?)PACKUSDWrm",
1065 "(V?)PACKUSWBrm",
1066 "(V?)PALIGNRrmi",
1067 "(V?)PBLENDWrmi",
1068 "VPERMILPDmi",
1069 "VPERMILPDrm",
1070 "VPERMILPSmi",
1071 "VPERMILPSrm",
1072 "(V?)PSHUFBrm",
1073 "(V?)PSHUFDmi",
1074 "(V?)PSHUFHWmi",
1075 "(V?)PSHUFLWmi",
1076 "(V?)PUNPCKHBWrm",
1077 "(V?)PUNPCKHDQrm",
1078 "(V?)PUNPCKHQDQrm",
1079 "(V?)PUNPCKHWDrm",
1080 "(V?)PUNPCKLBWrm",
1081 "(V?)PUNPCKLDQrm",
1082 "(V?)PUNPCKLQDQrm",
1083 "(V?)PUNPCKLWDrm",
1084 "(V?)SHUFPDrmi",
1085 "(V?)SHUFPSrmi",
1086 "(V?)UNPCKHPDrm",
1087 "(V?)UNPCKHPSrm",
1088 "(V?)UNPCKLPDrm",
1089 "(V?)UNPCKLPSrm",
1090 "(V?)XORPDrm",
1091 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001092
Gadi Haber2cf601f2017-12-08 09:48:44 +00001093def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1094 let Latency = 8;
1095 let NumMicroOps = 2;
1096 let ResourceCycles = [1,1];
1097}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001098def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1099 "VANDNPSYrm",
1100 "VANDPDYrm",
1101 "VANDPSYrm",
1102 "VORPDYrm",
1103 "VORPSYrm",
1104 "VPACKSSDWYrm",
1105 "VPACKSSWBYrm",
1106 "VPACKUSDWYrm",
1107 "VPACKUSWBYrm",
1108 "VPALIGNRYrmi",
1109 "VPBLENDWYrmi",
1110 "VPERMILPDYmi",
1111 "VPERMILPDYrm",
1112 "VPERMILPSYmi",
1113 "VPERMILPSYrm",
1114 "VPMOVSXBDYrm",
1115 "VPMOVSXBQYrm",
1116 "VPMOVSXWQYrm",
1117 "VPSHUFBYrm",
1118 "VPSHUFDYmi",
1119 "VPSHUFHWYmi",
1120 "VPSHUFLWYmi",
1121 "VPUNPCKHBWYrm",
1122 "VPUNPCKHDQYrm",
1123 "VPUNPCKHQDQYrm",
1124 "VPUNPCKHWDYrm",
1125 "VPUNPCKLBWYrm",
1126 "VPUNPCKLDQYrm",
1127 "VPUNPCKLQDQYrm",
1128 "VPUNPCKLWDYrm",
1129 "VSHUFPDYrmi",
1130 "VSHUFPSYrmi",
1131 "VUNPCKHPDYrm",
1132 "VUNPCKHPSYrm",
1133 "VUNPCKLPDYrm",
1134 "VUNPCKLPSYrm",
1135 "VXORPDYrm",
1136 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001137
1138def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1139 let Latency = 6;
1140 let NumMicroOps = 2;
1141 let ResourceCycles = [1,1];
1142}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001143def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1144 "MMX_PINSRWrm",
1145 "MMX_PSHUFBrm",
1146 "MMX_PSHUFWmi",
1147 "MMX_PUNPCKHBWirm",
1148 "MMX_PUNPCKHDQirm",
1149 "MMX_PUNPCKHWDirm",
1150 "MMX_PUNPCKLBWirm",
1151 "MMX_PUNPCKLDQirm",
1152 "MMX_PUNPCKLWDirm",
1153 "(V?)MOVHPDrm",
1154 "(V?)MOVHPSrm",
1155 "(V?)MOVLPDrm",
1156 "(V?)MOVLPSrm",
1157 "(V?)PINSRBrm",
1158 "(V?)PINSRDrm",
1159 "(V?)PINSRQrm",
1160 "(V?)PINSRWrm",
1161 "(V?)PMOVSXBDrm",
1162 "(V?)PMOVSXBQrm",
1163 "(V?)PMOVSXBWrm",
1164 "(V?)PMOVSXDQrm",
1165 "(V?)PMOVSXWDrm",
1166 "(V?)PMOVSXWQrm",
1167 "(V?)PMOVZXBDrm",
1168 "(V?)PMOVZXBQrm",
1169 "(V?)PMOVZXBWrm",
1170 "(V?)PMOVZXDQrm",
1171 "(V?)PMOVZXWDrm",
1172 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001173
Gadi Haberd76f7b82017-08-28 10:04:16 +00001174def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001175 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001176 let NumMicroOps = 2;
1177 let ResourceCycles = [1,1];
1178}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001179def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1180 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001181
1182def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001183 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001184 let NumMicroOps = 2;
1185 let ResourceCycles = [1,1];
1186}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001187def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1188 "RORX(32|64)mi",
1189 "SARX(32|64)rm",
1190 "SHLX(32|64)rm",
1191 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001192
1193def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001194 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001195 let NumMicroOps = 2;
1196 let ResourceCycles = [1,1];
1197}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001198def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1199 "BLSI(32|64)rm",
1200 "BLSMSK(32|64)rm",
1201 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001202 "MMX_PABSBrm",
1203 "MMX_PABSDrm",
1204 "MMX_PABSWrm",
1205 "MMX_PADDBirm",
1206 "MMX_PADDDirm",
1207 "MMX_PADDQirm",
1208 "MMX_PADDSBirm",
1209 "MMX_PADDSWirm",
1210 "MMX_PADDUSBirm",
1211 "MMX_PADDUSWirm",
1212 "MMX_PADDWirm",
1213 "MMX_PAVGBirm",
1214 "MMX_PAVGWirm",
1215 "MMX_PCMPEQBirm",
1216 "MMX_PCMPEQDirm",
1217 "MMX_PCMPEQWirm",
1218 "MMX_PCMPGTBirm",
1219 "MMX_PCMPGTDirm",
1220 "MMX_PCMPGTWirm",
1221 "MMX_PMAXSWirm",
1222 "MMX_PMAXUBirm",
1223 "MMX_PMINSWirm",
1224 "MMX_PMINUBirm",
1225 "MMX_PSIGNBrm",
1226 "MMX_PSIGNDrm",
1227 "MMX_PSIGNWrm",
1228 "MMX_PSUBBirm",
1229 "MMX_PSUBDirm",
1230 "MMX_PSUBQirm",
1231 "MMX_PSUBSBirm",
1232 "MMX_PSUBSWirm",
1233 "MMX_PSUBUSBirm",
1234 "MMX_PSUBUSWirm",
1235 "MMX_PSUBWirm",
1236 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001237
1238def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1239 let Latency = 7;
1240 let NumMicroOps = 2;
1241 let ResourceCycles = [1,1];
1242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001243def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1244 "(V?)PABSDrm",
1245 "(V?)PABSWrm",
1246 "(V?)PADDBrm",
1247 "(V?)PADDDrm",
1248 "(V?)PADDQrm",
1249 "(V?)PADDSBrm",
1250 "(V?)PADDSWrm",
1251 "(V?)PADDUSBrm",
1252 "(V?)PADDUSWrm",
1253 "(V?)PADDWrm",
1254 "(V?)PAVGBrm",
1255 "(V?)PAVGWrm",
1256 "(V?)PCMPEQBrm",
1257 "(V?)PCMPEQDrm",
1258 "(V?)PCMPEQQrm",
1259 "(V?)PCMPEQWrm",
1260 "(V?)PCMPGTBrm",
1261 "(V?)PCMPGTDrm",
1262 "(V?)PCMPGTWrm",
1263 "(V?)PMAXSBrm",
1264 "(V?)PMAXSDrm",
1265 "(V?)PMAXSWrm",
1266 "(V?)PMAXUBrm",
1267 "(V?)PMAXUDrm",
1268 "(V?)PMAXUWrm",
1269 "(V?)PMINSBrm",
1270 "(V?)PMINSDrm",
1271 "(V?)PMINSWrm",
1272 "(V?)PMINUBrm",
1273 "(V?)PMINUDrm",
1274 "(V?)PMINUWrm",
1275 "(V?)PSIGNBrm",
1276 "(V?)PSIGNDrm",
1277 "(V?)PSIGNWrm",
1278 "(V?)PSUBBrm",
1279 "(V?)PSUBDrm",
1280 "(V?)PSUBQrm",
1281 "(V?)PSUBSBrm",
1282 "(V?)PSUBSWrm",
1283 "(V?)PSUBUSBrm",
1284 "(V?)PSUBUSWrm",
1285 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001286
1287def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1288 let Latency = 8;
1289 let NumMicroOps = 2;
1290 let ResourceCycles = [1,1];
1291}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001292def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1293 "VPABSDYrm",
1294 "VPABSWYrm",
1295 "VPADDBYrm",
1296 "VPADDDYrm",
1297 "VPADDQYrm",
1298 "VPADDSBYrm",
1299 "VPADDSWYrm",
1300 "VPADDUSBYrm",
1301 "VPADDUSWYrm",
1302 "VPADDWYrm",
1303 "VPAVGBYrm",
1304 "VPAVGWYrm",
1305 "VPCMPEQBYrm",
1306 "VPCMPEQDYrm",
1307 "VPCMPEQQYrm",
1308 "VPCMPEQWYrm",
1309 "VPCMPGTBYrm",
1310 "VPCMPGTDYrm",
1311 "VPCMPGTWYrm",
1312 "VPMAXSBYrm",
1313 "VPMAXSDYrm",
1314 "VPMAXSWYrm",
1315 "VPMAXUBYrm",
1316 "VPMAXUDYrm",
1317 "VPMAXUWYrm",
1318 "VPMINSBYrm",
1319 "VPMINSDYrm",
1320 "VPMINSWYrm",
1321 "VPMINUBYrm",
1322 "VPMINUDYrm",
1323 "VPMINUWYrm",
1324 "VPSIGNBYrm",
1325 "VPSIGNDYrm",
1326 "VPSIGNWYrm",
1327 "VPSUBBYrm",
1328 "VPSUBDYrm",
1329 "VPSUBQYrm",
1330 "VPSUBSBYrm",
1331 "VPSUBSWYrm",
1332 "VPSUBUSBYrm",
1333 "VPSUBUSWYrm",
1334 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001335
1336def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001337 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338 let NumMicroOps = 2;
1339 let ResourceCycles = [1,1];
1340}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001341def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1342 "(V?)BLENDPSrmi",
1343 "VINSERTF128rm",
1344 "VINSERTI128rm",
1345 "(V?)PANDNrm",
1346 "(V?)PANDrm",
1347 "VPBLENDDrmi",
1348 "(V?)PORrm",
1349 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350
Gadi Haber2cf601f2017-12-08 09:48:44 +00001351def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1352 let Latency = 6;
1353 let NumMicroOps = 2;
1354 let ResourceCycles = [1,1];
1355}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001356def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1357 "MMX_PANDirm",
1358 "MMX_PORirm",
1359 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001360
1361def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1362 let Latency = 8;
1363 let NumMicroOps = 2;
1364 let ResourceCycles = [1,1];
1365}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001366def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1367 "VBLENDPSYrmi",
1368 "VPANDNYrm",
1369 "VPANDYrm",
1370 "VPBLENDDYrmi",
1371 "VPORYrm",
1372 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001373
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001375 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001376 let NumMicroOps = 2;
1377 let ResourceCycles = [1,1];
1378}
Craig Topper2d451e72018-03-18 08:38:06 +00001379def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001380def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001381
1382def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001383 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001384 let NumMicroOps = 2;
1385 let ResourceCycles = [1,1];
1386}
1387def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1388
1389def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001390 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001391 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001393}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001394def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1395 "(V?)PEXTRBmr",
1396 "(V?)PEXTRDmr",
1397 "(V?)PEXTRQmr",
1398 "(V?)PEXTRWmr",
1399 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001400
Gadi Haberd76f7b82017-08-28 10:04:16 +00001401def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001402 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,1,1];
1405}
1406def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001407
Gadi Haberd76f7b82017-08-28 10:04:16 +00001408def HWWriteResGroup22 : SchedWriteRes<[HWPort4,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001409 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001410 let NumMicroOps = 3;
1411 let ResourceCycles = [1,1,1];
1412}
Craig Topperf4cd9082018-01-19 05:47:32 +00001413def: 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 +00001414
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001416 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001417 let NumMicroOps = 3;
1418 let ResourceCycles = [1,1,1];
1419}
1420def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1421
1422def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001423 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001424 let NumMicroOps = 3;
1425 let ResourceCycles = [1,1,1];
1426}
1427def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1428
1429def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001430 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431 let NumMicroOps = 3;
1432 let ResourceCycles = [1,1,1];
1433}
Craig Topper2d451e72018-03-18 08:38:06 +00001434def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001435def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1436 "PUSH64i8",
1437 "STOSB",
1438 "STOSL",
1439 "STOSQ",
1440 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001441
1442def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001443 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001444 let NumMicroOps = 4;
1445 let ResourceCycles = [1,1,1,1];
1446}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001447def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1448 "BTR(16|32|64)mi8",
1449 "BTS(16|32|64)mi8",
1450 "SAR(8|16|32|64)m1",
1451 "SAR(8|16|32|64)mi",
1452 "SHL(8|16|32|64)m1",
1453 "SHL(8|16|32|64)mi",
1454 "SHR(8|16|32|64)m1",
1455 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001456
1457def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001458 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001459 let NumMicroOps = 4;
1460 let ResourceCycles = [1,1,1,1];
1461}
Craig Topperf0d04262018-04-06 16:16:48 +00001462def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1463 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001464
1465def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001466 let Latency = 2;
1467 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001468 let ResourceCycles = [2];
1469}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001470def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1471 "BLENDVPSrr0",
1472 "MMX_PINSRWrr",
1473 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001474 "VBLENDVPD(Y?)rr",
1475 "VBLENDVPS(Y?)rr",
1476 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001477 "(V?)PINSRBrr",
1478 "(V?)PINSRDrr",
1479 "(V?)PINSRQrr",
1480 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001481
Gadi Haberd76f7b82017-08-28 10:04:16 +00001482def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1483 let Latency = 2;
1484 let NumMicroOps = 2;
1485 let ResourceCycles = [2];
1486}
1487def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1488
1489def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1490 let Latency = 2;
1491 let NumMicroOps = 2;
1492 let ResourceCycles = [2];
1493}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001494def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1495 "ROL(8|16|32|64)ri",
1496 "ROR(8|16|32|64)r1",
1497 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001498
1499def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1500 let Latency = 2;
1501 let NumMicroOps = 2;
1502 let ResourceCycles = [2];
1503}
1504def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1505def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1506def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1507def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1508
1509def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1510 let Latency = 2;
1511 let NumMicroOps = 2;
1512 let ResourceCycles = [1,1];
1513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001514def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1515 "VCVTPH2PSYrr",
1516 "VCVTPH2PSrr",
1517 "(V?)CVTPS2PDrr",
1518 "(V?)CVTSS2SDrr",
1519 "(V?)EXTRACTPSrr",
1520 "(V?)PEXTRBrr",
1521 "(V?)PEXTRDrr",
1522 "(V?)PEXTRQrr",
1523 "(V?)PEXTRWrr",
1524 "(V?)PSLLDrr",
1525 "(V?)PSLLQrr",
1526 "(V?)PSLLWrr",
1527 "(V?)PSRADrr",
1528 "(V?)PSRAWrr",
1529 "(V?)PSRLDrr",
1530 "(V?)PSRLQrr",
1531 "(V?)PSRLWrr",
1532 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001533
1534def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1535 let Latency = 2;
1536 let NumMicroOps = 2;
1537 let ResourceCycles = [1,1];
1538}
1539def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1540
1541def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1542 let Latency = 2;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
1546def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1547
1548def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1549 let Latency = 2;
1550 let NumMicroOps = 2;
1551 let ResourceCycles = [1,1];
1552}
Craig Topper498875f2018-04-04 17:54:19 +00001553def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1554
1555def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1556 let Latency = 1;
1557 let NumMicroOps = 1;
1558 let ResourceCycles = [1];
1559}
1560def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001561
1562def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1563 let Latency = 2;
1564 let NumMicroOps = 2;
1565 let ResourceCycles = [1,1];
1566}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001567def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1568def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1569 "ADC(8|16|32|64)rr",
1570 "ADC(8|16|32|64)i",
1571 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
1572 "SBB(8|16|32|64)ri",
1573 "SBB(8|16|32|64)rr",
1574 "SBB(8|16|32|64)i",
1575 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001576
1577def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001578 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001579 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001580 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001581}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001582def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1583 "BLENDVPSrm0",
1584 "PBLENDVBrm0",
1585 "VBLENDVPDrm",
1586 "VBLENDVPSrm",
1587 "VMASKMOVPDrm",
1588 "VMASKMOVPSrm",
1589 "VPBLENDVBrm",
1590 "VPMASKMOVDrm",
1591 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001592
Gadi Haber2cf601f2017-12-08 09:48:44 +00001593def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1594 let Latency = 9;
1595 let NumMicroOps = 3;
1596 let ResourceCycles = [2,1];
1597}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001598def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1599 "VBLENDVPSYrm",
1600 "VMASKMOVPDYrm",
1601 "VMASKMOVPSYrm",
1602 "VPBLENDVBYrm",
1603 "VPMASKMOVDYrm",
1604 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001605
1606def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1607 let Latency = 7;
1608 let NumMicroOps = 3;
1609 let ResourceCycles = [2,1];
1610}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001611def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1612 "MMX_PACKSSWBirm",
1613 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001614
Gadi Haberd76f7b82017-08-28 10:04:16 +00001615def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001616 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001617 let NumMicroOps = 3;
1618 let ResourceCycles = [1,2];
1619}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001620def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1621 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001622
1623def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001624 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001625 let NumMicroOps = 3;
1626 let ResourceCycles = [1,1,1];
1627}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001628def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1629 "(V?)PSLLQrm",
1630 "(V?)PSLLWrm",
1631 "(V?)PSRADrm",
1632 "(V?)PSRAWrm",
1633 "(V?)PSRLDrm",
1634 "(V?)PSRLQrm",
1635 "(V?)PSRLWrm",
1636 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001637
1638def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001639 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001640 let NumMicroOps = 3;
1641 let ResourceCycles = [1,1,1];
1642}
1643def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1644
1645def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001646 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001647 let NumMicroOps = 3;
1648 let ResourceCycles = [1,1,1];
1649}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001650def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001651
1652def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001653 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001654 let NumMicroOps = 3;
1655 let ResourceCycles = [1,1,1];
1656}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001657def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1658 "RETL",
1659 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001660
Gadi Haberd76f7b82017-08-28 10:04:16 +00001661def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001662 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001663 let NumMicroOps = 3;
1664 let ResourceCycles = [1,1,1];
1665}
Craig Topperf4cd9082018-01-19 05:47:32 +00001666def: InstRW<[HWWriteResGroup43], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001667def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1668 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001669
1670def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001671 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001672 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001673 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001674}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001675def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001676
Gadi Haberd76f7b82017-08-28 10:04:16 +00001677def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001678 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001679 let NumMicroOps = 4;
1680 let ResourceCycles = [1,1,1,1];
1681}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001682def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1683 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001684
1685def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001686 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001687 let NumMicroOps = 5;
1688 let ResourceCycles = [1,1,1,2];
1689}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001690def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1691 "ROL(8|16|32|64)mi",
1692 "ROR(8|16|32|64)m1",
1693 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001694
1695def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001696 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001697 let NumMicroOps = 5;
1698 let ResourceCycles = [1,1,1,2];
1699}
Craig Topper13a16502018-03-19 00:56:09 +00001700def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001701
1702def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001703 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001704 let NumMicroOps = 5;
1705 let ResourceCycles = [1,1,1,1,1];
1706}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001707def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1708 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001709
Gadi Haberd76f7b82017-08-28 10:04:16 +00001710def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1711 let Latency = 3;
1712 let NumMicroOps = 1;
1713 let ResourceCycles = [1];
1714}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001715def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1716def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1717 "ADD_FST0r",
1718 "ADD_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001719 "MMX_CVTPI2PSirr",
1720 "PDEP(32|64)rr",
1721 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001722 "SHLD(16|32|64)rri8",
1723 "SHRD(16|32|64)rri8",
1724 "SUBR_FPrST0",
1725 "SUBR_FST0r",
1726 "SUBR_FrST0",
1727 "SUB_FPrST0",
1728 "SUB_FST0r",
1729 "SUB_FrST0",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001730 "(V?)ADDPD(Y?)rr",
1731 "(V?)ADDPS(Y?)rr",
1732 "(V?)ADDSDrr",
1733 "(V?)ADDSSrr",
1734 "(V?)ADDSUBPD(Y?)rr",
1735 "(V?)ADDSUBPS(Y?)rr",
1736 "(V?)CMPPD(Y?)rri",
1737 "(V?)CMPPS(Y?)rri",
1738 "(V?)CMPSDrr",
1739 "(V?)CMPSSrr",
1740 "(V?)COMISDrr",
1741 "(V?)COMISSrr",
1742 "(V?)CVTDQ2PS(Y?)rr",
1743 "(V?)CVTPS2DQ(Y?)rr",
1744 "(V?)CVTTPS2DQ(Y?)rr",
1745 "(V?)MAX(C?)PD(Y?)rr",
1746 "(V?)MAX(C?)PS(Y?)rr",
1747 "(V?)MAX(C?)SDrr",
1748 "(V?)MAX(C?)SSrr",
1749 "(V?)MIN(C?)PD(Y?)rr",
1750 "(V?)MIN(C?)PS(Y?)rr",
1751 "(V?)MIN(C?)SDrr",
1752 "(V?)MIN(C?)SSrr",
1753 "(V?)SUBPD(Y?)rr",
1754 "(V?)SUBPS(Y?)rr",
1755 "(V?)SUBSDrr",
1756 "(V?)SUBSSrr",
1757 "(V?)UCOMISDrr",
1758 "(V?)UCOMISSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001759
Clement Courbet327fac42018-03-07 08:14:02 +00001760def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001761 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00001762 let NumMicroOps = 2;
1763 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001764}
Clement Courbet327fac42018-03-07 08:14:02 +00001765def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001766
1767def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1768 let Latency = 3;
1769 let NumMicroOps = 1;
1770 let ResourceCycles = [1];
1771}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001772def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1773 "VBROADCASTSSYrr",
1774 "VEXTRACTF128rr",
1775 "VEXTRACTI128rr",
1776 "VINSERTF128rr",
1777 "VINSERTI128rr",
1778 "VPBROADCASTBYrr",
1779 "VPBROADCASTBrr",
1780 "VPBROADCASTDYrr",
1781 "VPBROADCASTQYrr",
1782 "VPBROADCASTWYrr",
1783 "VPBROADCASTWrr",
1784 "VPERM2F128rr",
1785 "VPERM2I128rr",
1786 "VPERMDYrr",
1787 "VPERMPDYri",
1788 "VPERMPSYrr",
1789 "VPERMQYri",
1790 "VPMOVSXBDYrr",
1791 "VPMOVSXBQYrr",
1792 "VPMOVSXBWYrr",
1793 "VPMOVSXDQYrr",
1794 "VPMOVSXWDYrr",
1795 "VPMOVSXWQYrr",
1796 "VPMOVZXBDYrr",
1797 "VPMOVZXBQYrr",
1798 "VPMOVZXBWYrr",
1799 "VPMOVZXDQYrr",
1800 "VPMOVZXWDYrr",
1801 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001802
1803def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001804 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805 let NumMicroOps = 2;
1806 let ResourceCycles = [1,1];
1807}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001808def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1809 "(V?)ADDPSrm",
1810 "(V?)ADDSUBPDrm",
1811 "(V?)ADDSUBPSrm",
1812 "(V?)CMPPDrmi",
1813 "(V?)CMPPSrmi",
1814 "(V?)CVTDQ2PSrm",
1815 "(V?)CVTPS2DQrm",
1816 "(V?)CVTTPS2DQrm",
1817 "(V?)MAX(C?)PDrm",
1818 "(V?)MAX(C?)PSrm",
1819 "(V?)MIN(C?)PDrm",
1820 "(V?)MIN(C?)PSrm",
1821 "(V?)SUBPDrm",
1822 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823
Gadi Haber2cf601f2017-12-08 09:48:44 +00001824def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1825 let Latency = 10;
1826 let NumMicroOps = 2;
1827 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001828}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001829def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1830 "ADD_F64m",
1831 "ILD_F16m",
1832 "ILD_F32m",
1833 "ILD_F64m",
1834 "SUBR_F32m",
1835 "SUBR_F64m",
1836 "SUB_F32m",
1837 "SUB_F64m",
1838 "VADDPDYrm",
1839 "VADDPSYrm",
1840 "VADDSUBPDYrm",
1841 "VADDSUBPSYrm",
1842 "VCMPPDYrmi",
1843 "VCMPPSYrmi",
1844 "VCVTDQ2PSYrm",
1845 "VCVTPS2DQYrm",
1846 "VCVTTPS2DQYrm",
1847 "VMAX(C?)PDYrm",
1848 "VMAX(C?)PSYrm",
1849 "VMIN(C?)PDYrm",
1850 "VMIN(C?)PSYrm",
1851 "VSUBPDYrm",
1852 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001853
1854def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001855 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001856 let NumMicroOps = 2;
1857 let ResourceCycles = [1,1];
1858}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001859def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1860 "VPERM2I128rm",
1861 "VPERMDYrm",
1862 "VPERMPDYmi",
1863 "VPERMPSYrm",
1864 "VPERMQYmi",
1865 "VPMOVZXBDYrm",
1866 "VPMOVZXBQYrm",
1867 "VPMOVZXBWYrm",
1868 "VPMOVZXDQYrm",
1869 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001870
Gadi Haber2cf601f2017-12-08 09:48:44 +00001871def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1872 let Latency = 9;
1873 let NumMicroOps = 2;
1874 let ResourceCycles = [1,1];
1875}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001876def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1877 "VPMOVSXDQYrm",
1878 "VPMOVSXWDYrm",
1879 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001880
Gadi Haberd76f7b82017-08-28 10:04:16 +00001881def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
1882 let Latency = 3;
1883 let NumMicroOps = 3;
1884 let ResourceCycles = [3];
1885}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001886def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
1887 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001888
1889def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1890 let Latency = 3;
1891 let NumMicroOps = 3;
1892 let ResourceCycles = [2,1];
1893}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001894def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1895 "VPSRAVD(Y?)rr",
1896 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001897
1898def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1899 let Latency = 3;
1900 let NumMicroOps = 3;
1901 let ResourceCycles = [2,1];
1902}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001903def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
1904 "MMX_PHADDSWrr",
1905 "MMX_PHADDWrr",
1906 "MMX_PHSUBDrr",
1907 "MMX_PHSUBSWrr",
1908 "MMX_PHSUBWrr",
1909 "(V?)PHADDD(Y?)rr",
1910 "(V?)PHADDSW(Y?)rr",
1911 "(V?)PHADDW(Y?)rr",
1912 "(V?)PHSUBD(Y?)rr",
1913 "(V?)PHSUBSW(Y?)rr",
1914 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001915
1916def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1917 let Latency = 3;
1918 let NumMicroOps = 3;
1919 let ResourceCycles = [2,1];
1920}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001921def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1922 "MMX_PACKSSWBirr",
1923 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001924
1925def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1926 let Latency = 3;
1927 let NumMicroOps = 3;
1928 let ResourceCycles = [1,2];
1929}
1930def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1931
1932def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1933 let Latency = 3;
1934 let NumMicroOps = 3;
1935 let ResourceCycles = [1,2];
1936}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001937def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1938 "RCL(8|16|32|64)r1",
1939 "RCL(8|16|32|64)ri",
1940 "RCR(8|16|32|64)r1",
1941 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001942
1943def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1944 let Latency = 3;
1945 let NumMicroOps = 3;
1946 let ResourceCycles = [2,1];
1947}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001948def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1949 "ROR(8|16|32|64)rCL",
1950 "SAR(8|16|32|64)rCL",
1951 "SHL(8|16|32|64)rCL",
1952 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001953
1954def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001955 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001956 let NumMicroOps = 3;
1957 let ResourceCycles = [1,1,1];
1958}
1959def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1960
1961def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001962 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963 let NumMicroOps = 3;
1964 let ResourceCycles = [1,1,1];
1965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001966def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1967 "ISTT_FP32m",
1968 "ISTT_FP64m",
1969 "IST_F16m",
1970 "IST_F32m",
1971 "IST_FP16m",
1972 "IST_FP32m",
1973 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001974
1975def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001976 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001977 let NumMicroOps = 4;
1978 let ResourceCycles = [2,1,1];
1979}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001980def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1981 "VPSRAVDYrm",
1982 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001983
1984def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1985 let Latency = 9;
1986 let NumMicroOps = 4;
1987 let ResourceCycles = [2,1,1];
1988}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001989def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1990 "VPSRAVDrm",
1991 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001992
1993def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001994 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001995 let NumMicroOps = 4;
1996 let ResourceCycles = [2,1,1];
1997}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001998def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
1999 "MMX_PHADDSWrm",
2000 "MMX_PHADDWrm",
2001 "MMX_PHSUBDrm",
2002 "MMX_PHSUBSWrm",
2003 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002004
2005def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2006 let Latency = 10;
2007 let NumMicroOps = 4;
2008 let ResourceCycles = [2,1,1];
2009}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002010def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
2011 "VPHADDSWYrm",
2012 "VPHADDWYrm",
2013 "VPHSUBDYrm",
2014 "VPHSUBSWYrm",
2015 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002016
2017def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2018 let Latency = 9;
2019 let NumMicroOps = 4;
2020 let ResourceCycles = [2,1,1];
2021}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002022def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
2023 "(V?)PHADDSWrm",
2024 "(V?)PHADDWrm",
2025 "(V?)PHSUBDrm",
2026 "(V?)PHSUBSWrm",
2027 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028
2029def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002030 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002031 let NumMicroOps = 4;
2032 let ResourceCycles = [1,1,2];
2033}
Craig Topperf4cd9082018-01-19 05:47:32 +00002034def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002035
2036def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002037 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002038 let NumMicroOps = 5;
2039 let ResourceCycles = [1,1,1,2];
2040}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002041def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2042 "RCL(8|16|32|64)mi",
2043 "RCR(8|16|32|64)m1",
2044 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002045
2046def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002047 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002048 let NumMicroOps = 5;
2049 let ResourceCycles = [1,1,2,1];
2050}
Craig Topper13a16502018-03-19 00:56:09 +00002051def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002052
2053def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002054 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002055 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002056 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002057}
Craig Topper9f834812018-04-01 21:54:24 +00002058def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002059
Gadi Haberd76f7b82017-08-28 10:04:16 +00002060def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002061 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002062 let NumMicroOps = 6;
2063 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002064}
Craig Topper9f834812018-04-01 21:54:24 +00002065def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002066 "CMPXCHG(8|16|32|64)rm",
2067 "ROL(8|16|32|64)mCL",
2068 "SAR(8|16|32|64)mCL",
2069 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002070 "SHL(8|16|32|64)mCL",
2071 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00002072def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2073 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002074
Gadi Haberd76f7b82017-08-28 10:04:16 +00002075def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2076 let Latency = 4;
2077 let NumMicroOps = 2;
2078 let ResourceCycles = [1,1];
2079}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002080def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2081 "(V?)CVTSD2SIrr",
2082 "(V?)CVTSS2SI64rr",
2083 "(V?)CVTSS2SIrr",
2084 "(V?)CVTTSD2SI64rr",
2085 "(V?)CVTTSD2SIrr",
2086 "(V?)CVTTSS2SI64rr",
2087 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002088
2089def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2090 let Latency = 4;
2091 let NumMicroOps = 2;
2092 let ResourceCycles = [1,1];
2093}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002094def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2095 "VPSLLDYrr",
2096 "VPSLLQYrr",
2097 "VPSLLWYrr",
2098 "VPSRADYrr",
2099 "VPSRAWYrr",
2100 "VPSRLDYrr",
2101 "VPSRLQYrr",
2102 "VPSRLWYrr",
2103 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002104
2105def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2106 let Latency = 4;
2107 let NumMicroOps = 2;
2108 let ResourceCycles = [1,1];
2109}
2110def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2111
2112def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2113 let Latency = 4;
2114 let NumMicroOps = 2;
2115 let ResourceCycles = [1,1];
2116}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002117def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2118 "MMX_CVTPI2PDirr",
2119 "MMX_CVTPS2PIirr",
2120 "MMX_CVTTPD2PIirr",
2121 "MMX_CVTTPS2PIirr",
2122 "(V?)CVTDQ2PDrr",
2123 "(V?)CVTPD2DQrr",
2124 "(V?)CVTPD2PSrr",
2125 "VCVTPS2PHrr",
2126 "(V?)CVTSD2SSrr",
2127 "(V?)CVTSI642SDrr",
2128 "(V?)CVTSI2SDrr",
2129 "(V?)CVTSI2SSrr",
2130 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002131
2132def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2133 let Latency = 4;
2134 let NumMicroOps = 2;
2135 let ResourceCycles = [1,1];
2136}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002137def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002138
2139def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2140 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002141 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002142}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002143def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002144
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002146 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002147 let NumMicroOps = 3;
2148 let ResourceCycles = [2,1];
2149}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002150def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2151 "FICOM32m",
2152 "FICOMP16m",
2153 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002154
2155def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002156 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002157 let NumMicroOps = 3;
2158 let ResourceCycles = [1,1,1];
2159}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002160def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2161 "(V?)CVTSD2SIrm",
2162 "(V?)CVTSS2SI64rm",
2163 "(V?)CVTSS2SIrm",
2164 "(V?)CVTTSD2SI64rm",
2165 "(V?)CVTTSD2SIrm",
2166 "VCVTTSS2SI64rm",
2167 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002168
2169def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002170 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002171 let NumMicroOps = 3;
2172 let ResourceCycles = [1,1,1];
2173}
2174def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002175
2176def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2177 let Latency = 11;
2178 let NumMicroOps = 3;
2179 let ResourceCycles = [1,1,1];
2180}
2181def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002182
2183def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002184 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002185 let NumMicroOps = 3;
2186 let ResourceCycles = [1,1,1];
2187}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002188def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2189 "CVTPD2PSrm",
2190 "CVTTPD2DQrm",
2191 "MMX_CVTPD2PIirm",
2192 "MMX_CVTTPD2PIirm",
2193 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002194
2195def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2196 let Latency = 9;
2197 let NumMicroOps = 3;
2198 let ResourceCycles = [1,1,1];
2199}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002200def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2201 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002202
2203def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002204 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002205 let NumMicroOps = 3;
2206 let ResourceCycles = [1,1,1];
2207}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002208def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002209
2210def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002211 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002212 let NumMicroOps = 3;
2213 let ResourceCycles = [1,1,1];
2214}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002215def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2216 "VPBROADCASTBrm",
2217 "VPBROADCASTWYrm",
2218 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002219
2220def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2221 let Latency = 4;
2222 let NumMicroOps = 4;
2223 let ResourceCycles = [4];
2224}
2225def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2226
2227def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2228 let Latency = 4;
2229 let NumMicroOps = 4;
2230 let ResourceCycles = [1,3];
2231}
2232def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2233
2234def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2235 let Latency = 4;
2236 let NumMicroOps = 4;
2237 let ResourceCycles = [1,1,2];
2238}
2239def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2240
2241def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002242 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243 let NumMicroOps = 4;
2244 let ResourceCycles = [1,1,1,1];
2245}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002246def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2247 "VMASKMOVPS(Y?)mr",
2248 "VPMASKMOVD(Y?)mr",
2249 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002250
2251def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002252 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002253 let NumMicroOps = 4;
2254 let ResourceCycles = [1,1,1,1];
2255}
2256def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2257
2258def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002259 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002260 let NumMicroOps = 4;
2261 let ResourceCycles = [1,1,1,1];
2262}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002263def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2264 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002265
2266def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002267 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002268 let NumMicroOps = 5;
2269 let ResourceCycles = [1,2,1,1];
2270}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002271def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2272 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002273
2274def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002275 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002276 let NumMicroOps = 6;
2277 let ResourceCycles = [1,1,4];
2278}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002279def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2280 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002281
2282def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002283 let Latency = 5;
2284 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002285 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002286}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002287def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2288 "MMX_PMADDWDirr",
2289 "MMX_PMULHRSWrr",
2290 "MMX_PMULHUWirr",
2291 "MMX_PMULHWirr",
2292 "MMX_PMULLWirr",
2293 "MMX_PMULUDQirr",
2294 "MMX_PSADBWirr",
2295 "MUL_FPrST0",
2296 "MUL_FST0r",
2297 "MUL_FrST0",
2298 "(V?)PCMPGTQ(Y?)rr",
2299 "(V?)PHMINPOSUWrr",
2300 "(V?)PMADDUBSW(Y?)rr",
2301 "(V?)PMADDWD(Y?)rr",
2302 "(V?)PMULDQ(Y?)rr",
2303 "(V?)PMULHRSW(Y?)rr",
2304 "(V?)PMULHUW(Y?)rr",
2305 "(V?)PMULHW(Y?)rr",
2306 "(V?)PMULLW(Y?)rr",
2307 "(V?)PMULUDQ(Y?)rr",
2308 "(V?)PSADBW(Y?)rr",
2309 "(V?)RCPPSr",
2310 "(V?)RCPSSr",
2311 "(V?)RSQRTPSr",
2312 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002313
Gadi Haberd76f7b82017-08-28 10:04:16 +00002314def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002315 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002316 let NumMicroOps = 1;
2317 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002318}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002319def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2320 "(V?)MULPS(Y?)rr",
2321 "(V?)MULSDrr",
2322 "(V?)MULSSrr",
2323 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2324 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002325
Gadi Haberd76f7b82017-08-28 10:04:16 +00002326def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002327 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002328 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002329 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002330}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002331def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2332 "MMX_PMADDWDirm",
2333 "MMX_PMULHRSWrm",
2334 "MMX_PMULHUWirm",
2335 "MMX_PMULHWirm",
2336 "MMX_PMULLWirm",
2337 "MMX_PMULUDQirm",
2338 "MMX_PSADBWirm",
2339 "(V?)RCPSSm",
2340 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002341
Craig Topper8104f262018-04-02 05:33:28 +00002342def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002343 let Latency = 16;
2344 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002345 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002346}
2347def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2348
Craig Topper8104f262018-04-02 05:33:28 +00002349def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002350 let Latency = 18;
2351 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002352 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002353}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002354def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002355
2356def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2357 let Latency = 11;
2358 let NumMicroOps = 2;
2359 let ResourceCycles = [1,1];
2360}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002361def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2362 "(V?)PHMINPOSUWrm",
2363 "(V?)PMADDUBSWrm",
2364 "(V?)PMADDWDrm",
2365 "(V?)PMULDQrm",
2366 "(V?)PMULHRSWrm",
2367 "(V?)PMULHUWrm",
2368 "(V?)PMULHWrm",
2369 "(V?)PMULLWrm",
2370 "(V?)PMULUDQrm",
2371 "(V?)PSADBWrm",
2372 "(V?)RCPPSm",
2373 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002374
2375def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2376 let Latency = 12;
2377 let NumMicroOps = 2;
2378 let ResourceCycles = [1,1];
2379}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002380def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2381 "MUL_F64m",
2382 "VPCMPGTQYrm",
2383 "VPMADDUBSWYrm",
2384 "VPMADDWDYrm",
2385 "VPMULDQYrm",
2386 "VPMULHRSWYrm",
2387 "VPMULHUWYrm",
2388 "VPMULHWYrm",
2389 "VPMULLWYrm",
2390 "VPMULUDQYrm",
2391 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002392
Gadi Haberd76f7b82017-08-28 10:04:16 +00002393def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002394 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002395 let NumMicroOps = 2;
2396 let ResourceCycles = [1,1];
2397}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002398def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2399 "(V?)MULPSrm",
2400 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002401
2402def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2403 let Latency = 12;
2404 let NumMicroOps = 2;
2405 let ResourceCycles = [1,1];
2406}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002407def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2408 "VMULPSYrm",
2409 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002410
2411def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2412 let Latency = 10;
2413 let NumMicroOps = 2;
2414 let ResourceCycles = [1,1];
2415}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002416def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2417 "(V?)MULSSrm",
2418 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002419
2420def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2421 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002422 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002423 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002424}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002425def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2426 "(V?)HADDPD(Y?)rr",
2427 "(V?)HADDPS(Y?)rr",
2428 "(V?)HSUBPD(Y?)rr",
2429 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002430
Gadi Haberd76f7b82017-08-28 10:04:16 +00002431def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2432 let Latency = 5;
2433 let NumMicroOps = 3;
2434 let ResourceCycles = [1,1,1];
2435}
2436def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2437
2438def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002439 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002440 let NumMicroOps = 3;
2441 let ResourceCycles = [1,1,1];
2442}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002443def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002444
2445def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002446 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002447 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002449}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002450def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2451 "(V?)HADDPSrm",
2452 "(V?)HSUBPDrm",
2453 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002454
Gadi Haber2cf601f2017-12-08 09:48:44 +00002455def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2456 let Latency = 12;
2457 let NumMicroOps = 4;
2458 let ResourceCycles = [1,2,1];
2459}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002460def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2461 "VHADDPSYrm",
2462 "VHSUBPDYrm",
2463 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002464
Gadi Haberd76f7b82017-08-28 10:04:16 +00002465def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002466 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002467 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002468 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002469}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002470def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002471
Gadi Haberd76f7b82017-08-28 10:04:16 +00002472def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002473 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474 let NumMicroOps = 4;
2475 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002476}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002477def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002478
Gadi Haberd76f7b82017-08-28 10:04:16 +00002479def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2480 let Latency = 5;
2481 let NumMicroOps = 5;
2482 let ResourceCycles = [1,4];
2483}
2484def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2485
2486def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2487 let Latency = 5;
2488 let NumMicroOps = 5;
2489 let ResourceCycles = [1,4];
2490}
2491def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2492
2493def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2494 let Latency = 5;
2495 let NumMicroOps = 5;
2496 let ResourceCycles = [2,3];
2497}
Craig Topper13a16502018-03-19 00:56:09 +00002498def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002499
2500def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2501 let Latency = 6;
2502 let NumMicroOps = 2;
2503 let ResourceCycles = [1,1];
2504}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002505def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2506 "VCVTPD2DQYrr",
2507 "VCVTPD2PSYrr",
2508 "VCVTPS2PHYrr",
2509 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002510
2511def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002512 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002513 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002514 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002515}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002516def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2517 "ADD_FI32m",
2518 "SUBR_FI16m",
2519 "SUBR_FI32m",
2520 "SUB_FI16m",
2521 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002522 "VROUNDPDYm",
2523 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002524
Gadi Haber2cf601f2017-12-08 09:48:44 +00002525def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2526 let Latency = 12;
2527 let NumMicroOps = 3;
2528 let ResourceCycles = [2,1];
2529}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002530def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2531 "(V?)ROUNDPSm",
2532 "(V?)ROUNDSDm",
2533 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002534
Gadi Haberd76f7b82017-08-28 10:04:16 +00002535def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002536 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002537 let NumMicroOps = 3;
2538 let ResourceCycles = [1,1,1];
2539}
2540def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2541
2542def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2543 let Latency = 6;
2544 let NumMicroOps = 4;
2545 let ResourceCycles = [1,1,2];
2546}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002547def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2548 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549
2550def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002551 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002552 let NumMicroOps = 4;
2553 let ResourceCycles = [1,1,1,1];
2554}
2555def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2556
2557def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2558 let Latency = 6;
2559 let NumMicroOps = 4;
2560 let ResourceCycles = [1,1,1,1];
2561}
2562def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2563
2564def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2565 let Latency = 6;
2566 let NumMicroOps = 6;
2567 let ResourceCycles = [1,5];
2568}
2569def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2570
2571def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002572 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002573 let NumMicroOps = 6;
2574 let ResourceCycles = [1,1,1,1,2];
2575}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002576def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2577 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002578
Gadi Haberd76f7b82017-08-28 10:04:16 +00002579def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2580 let Latency = 7;
2581 let NumMicroOps = 3;
2582 let ResourceCycles = [1,2];
2583}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002584def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002585
2586def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002587 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002588 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002589 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002590}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002591def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002592
Gadi Haber2cf601f2017-12-08 09:48:44 +00002593def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2594 let Latency = 14;
2595 let NumMicroOps = 4;
2596 let ResourceCycles = [1,2,1];
2597}
2598def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2599
Gadi Haberd76f7b82017-08-28 10:04:16 +00002600def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2601 let Latency = 7;
2602 let NumMicroOps = 7;
2603 let ResourceCycles = [2,2,1,2];
2604}
Craig Topper2d451e72018-03-18 08:38:06 +00002605def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002606
2607def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002608 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002609 let NumMicroOps = 3;
2610 let ResourceCycles = [1,1,1];
2611}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002612def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2613 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002614
2615def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2616 let Latency = 9;
2617 let NumMicroOps = 3;
2618 let ResourceCycles = [1,1,1];
2619}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002620def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002621
2622def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002623 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002624 let NumMicroOps = 4;
2625 let ResourceCycles = [1,1,1,1];
2626}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002627def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002628
Gadi Haber2cf601f2017-12-08 09:48:44 +00002629def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2630 let Latency = 17;
2631 let NumMicroOps = 3;
2632 let ResourceCycles = [2,1];
2633}
2634def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2635
Gadi Haberd76f7b82017-08-28 10:04:16 +00002636def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002637 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002638 let NumMicroOps = 10;
2639 let ResourceCycles = [1,1,1,4,1,2];
2640}
Craig Topper13a16502018-03-19 00:56:09 +00002641def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002642
Craig Topper8104f262018-04-02 05:33:28 +00002643def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002644 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002645 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002646 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002647}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002648def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2649 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002650
Gadi Haberd76f7b82017-08-28 10:04:16 +00002651def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2652 let Latency = 11;
2653 let NumMicroOps = 3;
2654 let ResourceCycles = [2,1];
2655}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002656def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2657 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002658
Gadi Haberd76f7b82017-08-28 10:04:16 +00002659def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002660 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002661 let NumMicroOps = 4;
2662 let ResourceCycles = [2,1,1];
2663}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002664def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2665 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002666
2667def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2668 let Latency = 11;
2669 let NumMicroOps = 7;
2670 let ResourceCycles = [2,2,3];
2671}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002672def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2673 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002674
2675def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2676 let Latency = 11;
2677 let NumMicroOps = 9;
2678 let ResourceCycles = [1,4,1,3];
2679}
2680def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2681
2682def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2683 let Latency = 11;
2684 let NumMicroOps = 11;
2685 let ResourceCycles = [2,9];
2686}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002687def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002688
2689def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002690 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002691 let NumMicroOps = 14;
2692 let ResourceCycles = [1,1,1,4,2,5];
2693}
2694def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2695
Craig Topper8104f262018-04-02 05:33:28 +00002696def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002697 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002698 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002699 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002700}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002701def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2702 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703
Craig Topper8104f262018-04-02 05:33:28 +00002704def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002705 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002706 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002707 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002708}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002709def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002710
2711def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002712 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002713 let NumMicroOps = 11;
2714 let ResourceCycles = [2,1,1,3,1,3];
2715}
Craig Topper13a16502018-03-19 00:56:09 +00002716def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002717
Craig Topper8104f262018-04-02 05:33:28 +00002718def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002719 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002720 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002721 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002723def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002724
Gadi Haberd76f7b82017-08-28 10:04:16 +00002725def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2726 let Latency = 14;
2727 let NumMicroOps = 4;
2728 let ResourceCycles = [2,1,1];
2729}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002730def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002731
2732def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002733 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002734 let NumMicroOps = 5;
2735 let ResourceCycles = [2,1,1,1];
2736}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002737def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002738
Gadi Haber2cf601f2017-12-08 09:48:44 +00002739def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2740 let Latency = 21;
2741 let NumMicroOps = 5;
2742 let ResourceCycles = [2,1,1,1];
2743}
2744def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2745
Gadi Haberd76f7b82017-08-28 10:04:16 +00002746def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2747 let Latency = 14;
2748 let NumMicroOps = 10;
2749 let ResourceCycles = [2,3,1,4];
2750}
2751def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2752
2753def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002754 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002755 let NumMicroOps = 15;
2756 let ResourceCycles = [1,14];
2757}
2758def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2759
2760def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002761 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002762 let NumMicroOps = 8;
2763 let ResourceCycles = [1,1,1,1,1,1,2];
2764}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002765def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2766 "INSL",
2767 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002768
2769def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2770 let Latency = 16;
2771 let NumMicroOps = 16;
2772 let ResourceCycles = [16];
2773}
2774def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2775
2776def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002777 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002778 let NumMicroOps = 19;
2779 let ResourceCycles = [2,1,4,1,1,4,6];
2780}
2781def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2782
2783def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2784 let Latency = 17;
2785 let NumMicroOps = 15;
2786 let ResourceCycles = [2,1,2,4,2,4];
2787}
2788def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2789
Gadi Haberd76f7b82017-08-28 10:04:16 +00002790def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2791 let Latency = 18;
2792 let NumMicroOps = 8;
2793 let ResourceCycles = [1,1,1,5];
2794}
2795def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002796def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002797
Gadi Haberd76f7b82017-08-28 10:04:16 +00002798def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002799 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002800 let NumMicroOps = 19;
2801 let ResourceCycles = [3,1,15];
2802}
Craig Topper391c6f92017-12-10 01:24:08 +00002803def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002804
Gadi Haberd76f7b82017-08-28 10:04:16 +00002805def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2806 let Latency = 20;
2807 let NumMicroOps = 1;
2808 let ResourceCycles = [1];
2809}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002810def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2811 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002812 "DIV_FrST0")>;
2813
2814def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2815 let Latency = 20;
2816 let NumMicroOps = 1;
2817 let ResourceCycles = [1,14];
2818}
2819def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2820 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002821
2822def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002823 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002824 let NumMicroOps = 2;
2825 let ResourceCycles = [1,1];
2826}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002827def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002828 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002829
Craig Topper8104f262018-04-02 05:33:28 +00002830def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002831 let Latency = 26;
2832 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002833 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002834}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002835def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002836
Craig Topper8104f262018-04-02 05:33:28 +00002837def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002838 let Latency = 21;
2839 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002840 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002841}
2842def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2843
Craig Topper8104f262018-04-02 05:33:28 +00002844def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002845 let Latency = 22;
2846 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002847 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002848}
2849def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2850
Craig Topper8104f262018-04-02 05:33:28 +00002851def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002852 let Latency = 25;
2853 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002854 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002855}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002856def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002857
2858def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2859 let Latency = 20;
2860 let NumMicroOps = 10;
2861 let ResourceCycles = [1,2,7];
2862}
2863def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2864
Craig Topper8104f262018-04-02 05:33:28 +00002865def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002866 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002867 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002868 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002869}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002870def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2871 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002872
Craig Topper8104f262018-04-02 05:33:28 +00002873def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002874 let Latency = 21;
2875 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002876 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002877}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002878def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2879 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002880
Craig Topper8104f262018-04-02 05:33:28 +00002881def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002882 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002883 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002884 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002885}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002886def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2887 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002888
2889def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002890 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002891 let NumMicroOps = 3;
2892 let ResourceCycles = [1,1,1];
2893}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002894def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2895 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002896
2897def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2898 let Latency = 24;
2899 let NumMicroOps = 1;
2900 let ResourceCycles = [1];
2901}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002902def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2903 "DIVR_FST0r",
2904 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002905
2906def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002907 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002908 let NumMicroOps = 2;
2909 let ResourceCycles = [1,1];
2910}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002911def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2912 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002913
2914def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002915 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002916 let NumMicroOps = 27;
2917 let ResourceCycles = [1,5,1,1,19];
2918}
2919def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2920
2921def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002922 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002923 let NumMicroOps = 28;
2924 let ResourceCycles = [1,6,1,1,19];
2925}
Craig Topper2d451e72018-03-18 08:38:06 +00002926def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002927
2928def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002929 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002930 let NumMicroOps = 3;
2931 let ResourceCycles = [1,1,1];
2932}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002933def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2934 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002935
Gadi Haberd76f7b82017-08-28 10:04:16 +00002936def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002937 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002938 let NumMicroOps = 23;
2939 let ResourceCycles = [1,5,3,4,10];
2940}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002941def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2942 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002943
2944def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002945 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002946 let NumMicroOps = 23;
2947 let ResourceCycles = [1,5,2,1,4,10];
2948}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002949def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2950 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002951
2952def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2953 let Latency = 31;
2954 let NumMicroOps = 31;
2955 let ResourceCycles = [8,1,21,1];
2956}
2957def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2958
Craig Topper8104f262018-04-02 05:33:28 +00002959def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002960 let Latency = 35;
2961 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002962 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002963}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002964def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2965 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002966
Craig Topper8104f262018-04-02 05:33:28 +00002967def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002968 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002969 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002970 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002971}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002972def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2973 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002974
2975def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002976 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002977 let NumMicroOps = 18;
2978 let ResourceCycles = [1,1,2,3,1,1,1,8];
2979}
2980def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2981
2982def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2983 let Latency = 42;
2984 let NumMicroOps = 22;
2985 let ResourceCycles = [2,20];
2986}
Craig Topper2d451e72018-03-18 08:38:06 +00002987def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002988
2989def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002990 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002991 let NumMicroOps = 64;
2992 let ResourceCycles = [2,2,8,1,10,2,39];
2993}
2994def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002995
2996def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002997 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002998 let NumMicroOps = 88;
2999 let ResourceCycles = [4,4,31,1,2,1,45];
3000}
Craig Topper2d451e72018-03-18 08:38:06 +00003001def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003002
3003def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003004 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003005 let NumMicroOps = 90;
3006 let ResourceCycles = [4,2,33,1,2,1,47];
3007}
Craig Topper2d451e72018-03-18 08:38:06 +00003008def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003009
3010def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
3011 let Latency = 75;
3012 let NumMicroOps = 15;
3013 let ResourceCycles = [6,3,6];
3014}
3015def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
3016
3017def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3018 let Latency = 98;
3019 let NumMicroOps = 32;
3020 let ResourceCycles = [7,7,3,3,1,11];
3021}
3022def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
3023
3024def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3025 let Latency = 112;
3026 let NumMicroOps = 66;
3027 let ResourceCycles = [4,2,4,8,14,34];
3028}
3029def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3030
3031def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003032 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003033 let NumMicroOps = 100;
3034 let ResourceCycles = [9,9,11,8,1,11,21,30];
3035}
3036def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003037
Gadi Haber2cf601f2017-12-08 09:48:44 +00003038def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3039 let Latency = 26;
3040 let NumMicroOps = 12;
3041 let ResourceCycles = [2,2,1,3,2,2];
3042}
Craig Topper17a31182017-12-16 18:35:29 +00003043def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3044 VPGATHERDQrm,
3045 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003046
3047def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3048 let Latency = 24;
3049 let NumMicroOps = 22;
3050 let ResourceCycles = [5,3,4,1,5,4];
3051}
Craig Topper17a31182017-12-16 18:35:29 +00003052def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3053 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003054
3055def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3056 let Latency = 28;
3057 let NumMicroOps = 22;
3058 let ResourceCycles = [5,3,4,1,5,4];
3059}
Craig Topper17a31182017-12-16 18:35:29 +00003060def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003061
3062def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3063 let Latency = 25;
3064 let NumMicroOps = 22;
3065 let ResourceCycles = [5,3,4,1,5,4];
3066}
Craig Topper17a31182017-12-16 18:35:29 +00003067def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003068
3069def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3070 let Latency = 27;
3071 let NumMicroOps = 20;
3072 let ResourceCycles = [3,3,4,1,5,4];
3073}
Craig Topper17a31182017-12-16 18:35:29 +00003074def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3075 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003076
3077def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3078 let Latency = 27;
3079 let NumMicroOps = 34;
3080 let ResourceCycles = [5,3,8,1,9,8];
3081}
Craig Topper17a31182017-12-16 18:35:29 +00003082def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3083 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003084
3085def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3086 let Latency = 23;
3087 let NumMicroOps = 14;
3088 let ResourceCycles = [3,3,2,1,3,2];
3089}
Craig Topper17a31182017-12-16 18:35:29 +00003090def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3091 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003092
3093def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3094 let Latency = 28;
3095 let NumMicroOps = 15;
3096 let ResourceCycles = [3,3,2,1,4,2];
3097}
Craig Topper17a31182017-12-16 18:35:29 +00003098def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003099
3100def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3101 let Latency = 25;
3102 let NumMicroOps = 15;
3103 let ResourceCycles = [3,3,2,1,4,2];
3104}
Craig Topper17a31182017-12-16 18:35:29 +00003105def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3106 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003107
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003108} // SchedModel