blob: 8dc684f55917ae1892752e95e6ff57cd38ca0895 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : HWWriteResPair<WriteFMA, [HWPort01], 5, [1], 1, 6>;
163defm : HWWriteResPair<WriteFMAS, [HWPort01], 5, [1], 1, 5>;
164defm : HWWriteResPair<WriteFMAY, [HWPort01], 5, [1], 1, 7>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000166defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
167defm : HWWriteResPair<WriteFLogicY, [HWPort5], 1, [1], 1, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000169defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1, [1], 1, 6>;
170defm : HWWriteResPair<WriteFVarShuffleY, [HWPort5], 1, [1], 1, 7>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000171defm : HWWriteResPair<WriteFBlend, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000172defm : HWWriteResPair<WriteFBlendY, [HWPort015], 1, [1], 1, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000174defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000175defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000176defm : HWWriteResPair<WriteFVarBlendY, [HWPort5], 2, [2], 2, 7>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000177
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000178def : WriteRes<WriteCvtF2FSt, [HWPort1,HWPort4,HWPort5,HWPort237]> {
179 let Latency = 5;
180 let NumMicroOps = 4;
181 let ResourceCycles = [1,1,1,1];
182}
183
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000184// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000185def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
186def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
187def : WriteRes<WriteVecMove, [HWPort015]>;
188
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000190defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
192defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000193defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000195defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000196defm : HWWriteResPair<WriteBlend, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000197defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000198defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000199defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000200defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000201defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 7, [1, 2], 3, 6>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000202defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000203defm : HWWriteResPair<WritePHMINPOS, [HWPort0], 5, [1], 1, 6>;
Quentin Colombetca498512014-02-24 19:33:51 +0000204
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000205// Vector insert/extract operations.
206def : WriteRes<WriteVecInsert, [HWPort5]> {
207 let Latency = 2;
208 let NumMicroOps = 2;
209 let ResourceCycles = [2];
210}
211def : WriteRes<WriteVecInsertLd, [HWPort5,HWPort23]> {
212 let Latency = 6;
213 let NumMicroOps = 2;
214}
215
216def : WriteRes<WriteVecExtract, [HWPort0,HWPort5]> {
217 let Latency = 2;
218 let NumMicroOps = 2;
219}
220def : WriteRes<WriteVecExtractSt, [HWPort4,HWPort5,HWPort237]> {
221 let Latency = 2;
222 let NumMicroOps = 3;
223}
224
Quentin Colombetca498512014-02-24 19:33:51 +0000225// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000226
Quentin Colombetca498512014-02-24 19:33:51 +0000227// Packed Compare Implicit Length Strings, Return Mask
228def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229 let Latency = 11;
230 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000231 let ResourceCycles = [3];
232}
233def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234 let Latency = 17;
235 let NumMicroOps = 4;
236 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000237}
238
239// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000240def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
241 let Latency = 19;
242 let NumMicroOps = 9;
243 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000244}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000245def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
246 let Latency = 25;
247 let NumMicroOps = 10;
248 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000249}
250
251// Packed Compare Implicit Length Strings, Return Index
252def : WriteRes<WritePCmpIStrI, [HWPort0]> {
253 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000254 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000255 let ResourceCycles = [3];
256}
257def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000258 let Latency = 17;
259 let NumMicroOps = 4;
260 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000261}
262
263// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000264def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
265 let Latency = 18;
266 let NumMicroOps = 8;
267 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000269def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
270 let Latency = 24;
271 let NumMicroOps = 9;
272 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000273}
274
Simon Pilgrima2f26782018-03-27 20:38:54 +0000275// MOVMSK Instructions.
276def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
277def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
278def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
279
Quentin Colombetca498512014-02-24 19:33:51 +0000280// AES Instructions.
281def : WriteRes<WriteAESDecEnc, [HWPort5]> {
282 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000283 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000284 let ResourceCycles = [1];
285}
286def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000287 let Latency = 13;
288 let NumMicroOps = 2;
289 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000290}
291
292def : WriteRes<WriteAESIMC, [HWPort5]> {
293 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000295 let ResourceCycles = [2];
296}
297def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000298 let Latency = 20;
299 let NumMicroOps = 3;
300 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000301}
302
Simon Pilgrim7684e052018-03-22 13:18:08 +0000303def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
304 let Latency = 29;
305 let NumMicroOps = 11;
306 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000307}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000308def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
309 let Latency = 34;
310 let NumMicroOps = 11;
311 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000312}
313
314// Carry-less multiplication instructions.
315def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000316 let Latency = 11;
317 let NumMicroOps = 3;
318 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000319}
320def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000321 let Latency = 17;
322 let NumMicroOps = 4;
323 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000324}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000325
Craig Topper05242bf2018-04-21 18:07:36 +0000326// Load/store MXCSR.
327def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
328def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
329
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000330def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
331def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000332def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
333def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000334
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335//================ Exceptions ================//
336
337//-- Specific Scheduling Models --//
338
339// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000340def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000341
Craig Topper02daec02018-04-02 01:12:32 +0000342def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000343
Craig Topper02daec02018-04-02 01:12:32 +0000344def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000345 let NumMicroOps = 2;
346}
Craig Topper02daec02018-04-02 01:12:32 +0000347def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348 let NumMicroOps = 3;
349}
350
Craig Topper02daec02018-04-02 01:12:32 +0000351def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000352 let NumMicroOps = 2;
353}
354
Craig Topper02daec02018-04-02 01:12:32 +0000355def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000356 let NumMicroOps = 3;
357 let ResourceCycles = [2, 1];
358}
359
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000361def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000362
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363
Craig Topper02daec02018-04-02 01:12:32 +0000364def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000365 let NumMicroOps = 2;
366 let ResourceCycles = [2];
367}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368
369// Notation:
370// - r: register.
371// - mm: 64 bit mmx register.
372// - x = 128 bit xmm register.
373// - (x)mm = mmx or xmm register.
374// - y = 256 bit ymm register.
375// - v = any vector register.
376// - m = memory.
377
378//=== Integer Instructions ===//
379//-- Move instructions --//
380
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000382def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000383 let Latency = 7;
384 let NumMicroOps = 3;
385}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000386def : InstRW<[HWWriteXLAT], (instrs XLAT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000387
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000389def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000390 let NumMicroOps = 19;
391}
Craig Topper02daec02018-04-02 01:12:32 +0000392def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393
Michael Zuckermanf6684002017-06-28 11:23:31 +0000394// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000395def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000396 let NumMicroOps = 18;
397}
Craig Topper02daec02018-04-02 01:12:32 +0000398def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399
Michael Zuckermanf6684002017-06-28 11:23:31 +0000400//-- Arithmetic instructions --//
401
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402// DIV.
403// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000404def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000405 let Latency = 22;
406 let NumMicroOps = 9;
407}
Craig Topper02daec02018-04-02 01:12:32 +0000408def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409
Michael Zuckermanf6684002017-06-28 11:23:31 +0000410// IDIV.
411// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000412def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000413 let Latency = 23;
414 let NumMicroOps = 9;
415}
Craig Topper02daec02018-04-02 01:12:32 +0000416def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000419// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000420def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421 let NumMicroOps = 10;
422}
Craig Topper02daec02018-04-02 01:12:32 +0000423def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000424
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000427def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428 let NumMicroOps = 11;
429}
Craig Topper02daec02018-04-02 01:12:32 +0000430def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432//-- Control transfer instructions --//
433
Michael Zuckermanf6684002017-06-28 11:23:31 +0000434// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000435// i.
Craig Topper02daec02018-04-02 01:12:32 +0000436def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437 let NumMicroOps = 4;
438 let ResourceCycles = [1, 2, 1];
439}
Craig Topper02daec02018-04-02 01:12:32 +0000440def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000441
442// BOUND.
443// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000444def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000445 let NumMicroOps = 15;
446}
Craig Topper02daec02018-04-02 01:12:32 +0000447def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000448
449// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000450def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000451 let NumMicroOps = 4;
452}
Craig Topper02daec02018-04-02 01:12:32 +0000453def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000454
455//-- String instructions --//
456
457// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000458def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000459
460// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000461def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462
Michael Zuckermanf6684002017-06-28 11:23:31 +0000463// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000464def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000465 let Latency = 4;
466 let NumMicroOps = 5;
467 let ResourceCycles = [2, 1, 2];
468}
Craig Topper02daec02018-04-02 01:12:32 +0000469def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000470
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000472def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473 let Latency = 4;
474 let NumMicroOps = 5;
475 let ResourceCycles = [2, 3];
476}
Craig Topper02daec02018-04-02 01:12:32 +0000477def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000478
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479//-- Other --//
480
Gadi Haberd76f7b82017-08-28 10:04:16 +0000481// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000482def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000483 let NumMicroOps = 34;
484}
Craig Topper02daec02018-04-02 01:12:32 +0000485def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486
487// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000488def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000489 let NumMicroOps = 17;
490 let ResourceCycles = [1, 16];
491}
Craig Topper02daec02018-04-02 01:12:32 +0000492def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000493
494//=== Floating Point x87 Instructions ===//
495//-- Move instructions --//
496
497// FLD.
498// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
Michael Zuckermanf6684002017-06-28 11:23:31 +0000501// FBLD.
502// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000503def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000504 let Latency = 47;
505 let NumMicroOps = 43;
506}
Craig Topper02daec02018-04-02 01:12:32 +0000507def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000508
509// FST(P).
510// r.
Craig Topper02daec02018-04-02 01:12:32 +0000511def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512
Michael Zuckermanf6684002017-06-28 11:23:31 +0000513// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000514def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000515
Michael Zuckermanf6684002017-06-28 11:23:31 +0000516// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000517def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000518
Michael Zuckermanf6684002017-06-28 11:23:31 +0000519// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000520def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000521
522// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000523def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524 let NumMicroOps = 147;
525}
Craig Topper02daec02018-04-02 01:12:32 +0000526def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527
528// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000529def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000530 let NumMicroOps = 90;
531}
Craig Topper02daec02018-04-02 01:12:32 +0000532def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000533
534//-- Arithmetic instructions --//
535
Michael Zuckermanf6684002017-06-28 11:23:31 +0000536// FCOMPP FUCOMPP.
537// r.
Craig Topper02daec02018-04-02 01:12:32 +0000538def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000539
540// FCOMI(P) FUCOMI(P).
541// m.
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000542def : InstRW<[HWWrite3P01], (instrs COM_FIPr, COM_FIr, UCOM_FIPr, UCOM_FIr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543
Michael Zuckermanf6684002017-06-28 11:23:31 +0000544// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000545def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000546
547// FXAM.
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000548def : InstRW<[HWWrite2P1], (instrs FXAM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000549
550// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000551def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000552 let Latency = 19;
553 let NumMicroOps = 28;
554}
Craig Topper02daec02018-04-02 01:12:32 +0000555def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000556
557// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000558def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000559 let Latency = 27;
560 let NumMicroOps = 41;
561}
Craig Topper02daec02018-04-02 01:12:32 +0000562def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000563
564// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000565def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000566 let Latency = 11;
567 let NumMicroOps = 17;
568}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000569def : InstRW<[HWWriteFRNDINT], (instrs FRNDINT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000570
571//-- Math instructions --//
572
573// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000574def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000575 let Latency = 75; // 49-125
576 let NumMicroOps = 50; // 25-75
577}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000578def : InstRW<[HWWriteFSCALE], (instrs FSCALE)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000579
580// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000581def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000582 let Latency = 15;
583 let NumMicroOps = 17;
584}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000585def : InstRW<[HWWriteFXTRACT], (instrs FXTRACT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000586
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000587////////////////////////////////////////////////////////////////////////////////
588// Horizontal add/sub instructions.
589////////////////////////////////////////////////////////////////////////////////
590
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000591defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1,2], 3, 6>;
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000592defm : HWWriteResPair<WriteFHAddY, [HWPort1, HWPort5], 5, [1,2], 3, 7>;
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000593defm : HWWriteResPair<WritePHAdd, [HWPort5, HWPort15], 3, [2,1], 3, 6>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000594
Michael Zuckermanf6684002017-06-28 11:23:31 +0000595//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000596
Gadi Haberd76f7b82017-08-28 10:04:16 +0000597// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000598
Gadi Haberd76f7b82017-08-28 10:04:16 +0000599def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000600 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000601 let NumMicroOps = 1;
602 let ResourceCycles = [1];
603}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000604def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
605 "(V?)LDDQUrm",
606 "(V?)MOVAPDrm",
607 "(V?)MOVAPSrm",
608 "(V?)MOVDQArm",
609 "(V?)MOVDQUrm",
610 "(V?)MOVNTDQArm",
611 "(V?)MOVSHDUPrm",
612 "(V?)MOVSLDUPrm",
613 "(V?)MOVUPDrm",
614 "(V?)MOVUPSrm",
615 "VPBROADCASTDrm",
616 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000617 "(V?)ROUNDPD(Y?)r",
618 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000619 "(V?)ROUNDSDr",
620 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000621
622def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
623 let Latency = 7;
624 let NumMicroOps = 1;
625 let ResourceCycles = [1];
626}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000627def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F(32|64|80)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000628 "VBROADCASTF128",
629 "VBROADCASTI128",
630 "VBROADCASTSDYrm",
631 "VBROADCASTSSYrm",
632 "VLDDQUYrm",
633 "VMOVAPDYrm",
634 "VMOVAPSYrm",
635 "VMOVDDUPYrm",
636 "VMOVDQAYrm",
637 "VMOVDQUYrm",
638 "VMOVNTDQAYrm",
639 "VMOVSHDUPYrm",
640 "VMOVSLDUPYrm",
641 "VMOVUPDYrm",
642 "VMOVUPSYrm",
643 "VPBROADCASTDYrm",
644 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000645
646def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
647 let Latency = 5;
648 let NumMicroOps = 1;
649 let ResourceCycles = [1];
650}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000651def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000652 "MOVSX(16|32|64)rm32",
653 "MOVSX(16|32|64)rm8",
654 "MOVZX(16|32|64)rm16",
655 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000656 "(V?)MOVDDUPrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000657
Gadi Haberd76f7b82017-08-28 10:04:16 +0000658def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
659 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000660 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000661 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000662}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000663def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
664 "MMX_MOVD64from64rm",
665 "MMX_MOVD64mr",
666 "MMX_MOVNTQmr",
667 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000668 "MOVNTI_64mr",
669 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000670 "ST_FP(32|64|80)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000671 "VEXTRACTF128mr",
672 "VEXTRACTI128mr",
673 "(V?)MOVAPD(Y?)mr",
674 "(V?)MOVAPS(V?)mr",
675 "(V?)MOVDQA(Y?)mr",
676 "(V?)MOVDQU(Y?)mr",
677 "(V?)MOVHPDmr",
678 "(V?)MOVHPSmr",
679 "(V?)MOVLPDmr",
680 "(V?)MOVLPSmr",
681 "(V?)MOVNTDQ(Y?)mr",
682 "(V?)MOVNTPD(Y?)mr",
683 "(V?)MOVNTPS(Y?)mr",
684 "(V?)MOVPDI2DImr",
685 "(V?)MOVPQI2QImr",
686 "(V?)MOVPQIto64mr",
687 "(V?)MOVSDmr",
688 "(V?)MOVSSmr",
689 "(V?)MOVUPD(Y?)mr",
690 "(V?)MOVUPS(Y?)mr",
691 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000692
Gadi Haberd76f7b82017-08-28 10:04:16 +0000693def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
694 let Latency = 1;
695 let NumMicroOps = 1;
696 let ResourceCycles = [1];
697}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000698def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
699 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000700 "(V?)MOVPDI2DIrr",
701 "(V?)MOVPQIto64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000702 "VPSLLVQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000703 "VPSRLVQ(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000704 "VTESTPD(Y?)rr",
705 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000706
707def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
708 let Latency = 1;
709 let NumMicroOps = 1;
710 let ResourceCycles = [1];
711}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000712def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
713 "COM_FST0r",
714 "UCOM_FPr",
715 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000716
717def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
718 let Latency = 1;
719 let NumMicroOps = 1;
720 let ResourceCycles = [1];
721}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000722def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000723 "MMX_MOVD64to64rr",
724 "MMX_MOVQ2DQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000725 "(V?)MOV64toPQIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000726 "(V?)MOVDI2PDIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000727 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000728 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000729
730def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
731 let Latency = 1;
732 let NumMicroOps = 1;
733 let ResourceCycles = [1];
734}
735def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
736
737def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
738 let Latency = 1;
739 let NumMicroOps = 1;
740 let ResourceCycles = [1];
741}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000742def: InstRW<[HWWriteResGroup6], (instrs FINCSTP, FNOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000743
744def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
745 let Latency = 1;
746 let NumMicroOps = 1;
747 let ResourceCycles = [1];
748}
Craig Topperfbe31322018-04-05 21:56:19 +0000749def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000750def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
751 "BT(16|32|64)rr",
752 "BTC(16|32|64)ri8",
753 "BTC(16|32|64)rr",
754 "BTR(16|32|64)ri8",
755 "BTR(16|32|64)rr",
756 "BTS(16|32|64)ri8",
757 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000758 "SAR(8|16|32|64)r1",
759 "SAR(8|16|32|64)ri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000760 "SHL(8|16|32|64)r1",
761 "SHL(8|16|32|64)ri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000762 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000763 "SHR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000764
765def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
766 let Latency = 1;
767 let NumMicroOps = 1;
768 let ResourceCycles = [1];
769}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000770def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
771 "BLSI(32|64)rr",
772 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000773 "BLSR(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000774
775def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
776 let Latency = 1;
777 let NumMicroOps = 1;
778 let ResourceCycles = [1];
779}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000780def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000781 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000782
783def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
784 let Latency = 1;
785 let NumMicroOps = 1;
786 let ResourceCycles = [1];
787}
Craig Topperfbe31322018-04-05 21:56:19 +0000788def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000789def: InstRW<[HWWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000790def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000791 "CMC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000792 "NOOP",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000793 "SGDT64m",
794 "SIDT64m",
795 "SLDT64m",
796 "SMSW16m",
797 "STC",
798 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000799 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000800
801def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000802 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000803 let NumMicroOps = 2;
804 let ResourceCycles = [1,1];
805}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000806def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000807 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000808
Gadi Haber2cf601f2017-12-08 09:48:44 +0000809def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
810 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000811 let NumMicroOps = 2;
812 let ResourceCycles = [1,1];
813}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000814def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
815 "(V?)CVTSS2SDrm",
816 "VPSLLVQrm",
817 "VPSRLVQrm",
818 "VTESTPDrm",
819 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000820
821def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
822 let Latency = 8;
823 let NumMicroOps = 2;
824 let ResourceCycles = [1,1];
825}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000826def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
827 "VPSLLQYrm",
828 "VPSLLVQYrm",
829 "VPSLLWYrm",
830 "VPSRADYrm",
831 "VPSRAWYrm",
832 "VPSRLDYrm",
833 "VPSRLQYrm",
834 "VPSRLVQYrm",
835 "VPSRLWYrm",
836 "VTESTPDYrm",
837 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000838
839def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
840 let Latency = 8;
841 let NumMicroOps = 2;
842 let ResourceCycles = [1,1];
843}
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000844def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000845 "PDEP(32|64)rm",
846 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000847 "(V?)CMPSDrm",
848 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000849 "(V?)MAX(C?)SDrm",
850 "(V?)MAX(C?)SSrm",
851 "(V?)MIN(C?)SDrm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000852 "(V?)MIN(C?)SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000853
Craig Topperf846e2d2018-04-19 05:34:05 +0000854def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
855 let Latency = 8;
856 let NumMicroOps = 3;
857 let ResourceCycles = [1,1,1];
858}
859def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
860
861def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
862 let Latency = 9;
863 let NumMicroOps = 5;
864 let ResourceCycles = [1,1,2,1];
865}
866def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
867
Gadi Haberd76f7b82017-08-28 10:04:16 +0000868def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000869 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000870 let NumMicroOps = 2;
871 let ResourceCycles = [1,1];
872}
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000873def: InstRW<[HWWriteResGroup13], (instregex "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000874 "(V?)PACKSSDWrm",
875 "(V?)PACKSSWBrm",
876 "(V?)PACKUSDWrm",
877 "(V?)PACKUSWBrm",
878 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000879 "VPERMILPDmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000880 "VPERMILPSmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000881 "(V?)PSHUFBrm",
882 "(V?)PSHUFDmi",
883 "(V?)PSHUFHWmi",
884 "(V?)PSHUFLWmi",
885 "(V?)PUNPCKHBWrm",
886 "(V?)PUNPCKHDQrm",
887 "(V?)PUNPCKHQDQrm",
888 "(V?)PUNPCKHWDrm",
889 "(V?)PUNPCKLBWrm",
890 "(V?)PUNPCKLDQrm",
891 "(V?)PUNPCKLQDQrm",
892 "(V?)PUNPCKLWDrm",
893 "(V?)SHUFPDrmi",
894 "(V?)SHUFPSrmi",
895 "(V?)UNPCKHPDrm",
896 "(V?)UNPCKHPSrm",
897 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000898 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000899
Gadi Haber2cf601f2017-12-08 09:48:44 +0000900def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
901 let Latency = 8;
902 let NumMicroOps = 2;
903 let ResourceCycles = [1,1];
904}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000905def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKSSDWYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000906 "VPACKSSWBYrm",
907 "VPACKUSDWYrm",
908 "VPACKUSWBYrm",
909 "VPALIGNRYrmi",
910 "VPBLENDWYrmi",
911 "VPERMILPDYmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000912 "VPERMILPSYmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000913 "VPMOVSXBDYrm",
914 "VPMOVSXBQYrm",
915 "VPMOVSXWQYrm",
916 "VPSHUFBYrm",
917 "VPSHUFDYmi",
918 "VPSHUFHWYmi",
919 "VPSHUFLWYmi",
920 "VPUNPCKHBWYrm",
921 "VPUNPCKHDQYrm",
922 "VPUNPCKHQDQYrm",
923 "VPUNPCKHWDYrm",
924 "VPUNPCKLBWYrm",
925 "VPUNPCKLDQYrm",
926 "VPUNPCKLQDQYrm",
927 "VPUNPCKLWDYrm",
928 "VSHUFPDYrmi",
929 "VSHUFPSYrmi",
930 "VUNPCKHPDYrm",
931 "VUNPCKHPSYrm",
932 "VUNPCKLPDYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000933 "VUNPCKLPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000934
Gadi Haberd76f7b82017-08-28 10:04:16 +0000935def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000936 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000937 let NumMicroOps = 2;
938 let ResourceCycles = [1,1];
939}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000940def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
941 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000942
943def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000944 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000945 let NumMicroOps = 2;
946 let ResourceCycles = [1,1];
947}
Simon Pilgrimeb609092018-04-23 22:19:55 +0000948def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000949
950def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000951 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000952 let NumMicroOps = 2;
953 let ResourceCycles = [1,1];
954}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000955def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
956 "BLSI(32|64)rm",
957 "BLSMSK(32|64)rm",
958 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000959 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000960
961def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
962 let Latency = 7;
963 let NumMicroOps = 2;
964 let ResourceCycles = [1,1];
965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000966def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
967 "(V?)PABSDrm",
968 "(V?)PABSWrm",
969 "(V?)PADDBrm",
970 "(V?)PADDDrm",
971 "(V?)PADDQrm",
972 "(V?)PADDSBrm",
973 "(V?)PADDSWrm",
974 "(V?)PADDUSBrm",
975 "(V?)PADDUSWrm",
976 "(V?)PADDWrm",
977 "(V?)PAVGBrm",
978 "(V?)PAVGWrm",
979 "(V?)PCMPEQBrm",
980 "(V?)PCMPEQDrm",
981 "(V?)PCMPEQQrm",
982 "(V?)PCMPEQWrm",
983 "(V?)PCMPGTBrm",
984 "(V?)PCMPGTDrm",
985 "(V?)PCMPGTWrm",
986 "(V?)PMAXSBrm",
987 "(V?)PMAXSDrm",
988 "(V?)PMAXSWrm",
989 "(V?)PMAXUBrm",
990 "(V?)PMAXUDrm",
991 "(V?)PMAXUWrm",
992 "(V?)PMINSBrm",
993 "(V?)PMINSDrm",
994 "(V?)PMINSWrm",
995 "(V?)PMINUBrm",
996 "(V?)PMINUDrm",
997 "(V?)PMINUWrm",
998 "(V?)PSIGNBrm",
999 "(V?)PSIGNDrm",
1000 "(V?)PSIGNWrm",
1001 "(V?)PSUBBrm",
1002 "(V?)PSUBDrm",
1003 "(V?)PSUBQrm",
1004 "(V?)PSUBSBrm",
1005 "(V?)PSUBSWrm",
1006 "(V?)PSUBUSBrm",
1007 "(V?)PSUBUSWrm",
1008 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001009
1010def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1011 let Latency = 8;
1012 let NumMicroOps = 2;
1013 let ResourceCycles = [1,1];
1014}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001015def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1016 "VPABSDYrm",
1017 "VPABSWYrm",
1018 "VPADDBYrm",
1019 "VPADDDYrm",
1020 "VPADDQYrm",
1021 "VPADDSBYrm",
1022 "VPADDSWYrm",
1023 "VPADDUSBYrm",
1024 "VPADDUSWYrm",
1025 "VPADDWYrm",
1026 "VPAVGBYrm",
1027 "VPAVGWYrm",
1028 "VPCMPEQBYrm",
1029 "VPCMPEQDYrm",
1030 "VPCMPEQQYrm",
1031 "VPCMPEQWYrm",
1032 "VPCMPGTBYrm",
1033 "VPCMPGTDYrm",
1034 "VPCMPGTWYrm",
1035 "VPMAXSBYrm",
1036 "VPMAXSDYrm",
1037 "VPMAXSWYrm",
1038 "VPMAXUBYrm",
1039 "VPMAXUDYrm",
1040 "VPMAXUWYrm",
1041 "VPMINSBYrm",
1042 "VPMINSDYrm",
1043 "VPMINSWYrm",
1044 "VPMINUBYrm",
1045 "VPMINUDYrm",
1046 "VPMINUWYrm",
1047 "VPSIGNBYrm",
1048 "VPSIGNDYrm",
1049 "VPSIGNWYrm",
1050 "VPSUBBYrm",
1051 "VPSUBDYrm",
1052 "VPSUBQYrm",
1053 "VPSUBSBYrm",
1054 "VPSUBSWYrm",
1055 "VPSUBUSBYrm",
1056 "VPSUBUSWYrm",
1057 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001058
1059def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001060 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001061 let NumMicroOps = 2;
1062 let ResourceCycles = [1,1];
1063}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001064def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001065 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001066 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001067
Gadi Haber2cf601f2017-12-08 09:48:44 +00001068def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1069 let Latency = 6;
1070 let NumMicroOps = 2;
1071 let ResourceCycles = [1,1];
1072}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001073def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1074 "MMX_PANDirm",
1075 "MMX_PORirm",
1076 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001077
1078def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1079 let Latency = 8;
1080 let NumMicroOps = 2;
1081 let ResourceCycles = [1,1];
1082}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001083def: InstRW<[HWWriteResGroup17_2], (instregex "VPANDNYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001084 "VPANDYrm",
1085 "VPBLENDDYrmi",
1086 "VPORYrm",
1087 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001088
Gadi Haberd76f7b82017-08-28 10:04:16 +00001089def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001090 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Craig Topper2d451e72018-03-18 08:38:06 +00001094def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001095def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001096
1097def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001098 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001099 let NumMicroOps = 2;
1100 let ResourceCycles = [1,1];
1101}
1102def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1103
Gadi Haberd76f7b82017-08-28 10:04:16 +00001104def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001105 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001106 let NumMicroOps = 3;
1107 let ResourceCycles = [1,1,1];
1108}
1109def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001110
Gadi Haberd76f7b82017-08-28 10:04:16 +00001111def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001112 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001113 let NumMicroOps = 3;
1114 let ResourceCycles = [1,1,1];
1115}
1116def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1117
1118def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001119 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001120 let NumMicroOps = 3;
1121 let ResourceCycles = [1,1,1];
1122}
1123def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1124
1125def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001126 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001127 let NumMicroOps = 3;
1128 let ResourceCycles = [1,1,1];
1129}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001130def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r,
1131 STOSB, STOSL, STOSQ, STOSW)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001132def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001133 "PUSH64i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001134
1135def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001136 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001137 let NumMicroOps = 4;
1138 let ResourceCycles = [1,1,1,1];
1139}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001140def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1141 "BTR(16|32|64)mi8",
1142 "BTS(16|32|64)mi8",
1143 "SAR(8|16|32|64)m1",
1144 "SAR(8|16|32|64)mi",
1145 "SHL(8|16|32|64)m1",
1146 "SHL(8|16|32|64)mi",
1147 "SHR(8|16|32|64)m1",
1148 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001149
1150def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001151 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001152 let NumMicroOps = 4;
1153 let ResourceCycles = [1,1,1,1];
1154}
Craig Topperf0d04262018-04-06 16:16:48 +00001155def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1156 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001157
Gadi Haberd76f7b82017-08-28 10:04:16 +00001158def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1159 let Latency = 2;
1160 let NumMicroOps = 2;
1161 let ResourceCycles = [2];
1162}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001163def: InstRW<[HWWriteResGroup28], (instrs FDECSTP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001164
1165def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1166 let Latency = 2;
1167 let NumMicroOps = 2;
1168 let ResourceCycles = [2];
1169}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001170def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1171 "ROL(8|16|32|64)ri",
1172 "ROR(8|16|32|64)r1",
1173 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001174
1175def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1176 let Latency = 2;
1177 let NumMicroOps = 2;
1178 let ResourceCycles = [2];
1179}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001180def: InstRW<[HWWriteResGroup30], (instrs LFENCE,
1181 MFENCE,
1182 WAIT,
1183 XGETBV)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001184
1185def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1186 let Latency = 2;
1187 let NumMicroOps = 2;
1188 let ResourceCycles = [1,1];
1189}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +00001190def: InstRW<[HWWriteResGroup31], (instregex "VCVTPH2PSYrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001191 "VCVTPH2PSrr",
1192 "(V?)CVTPS2PDrr",
1193 "(V?)CVTSS2SDrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001194 "(V?)PSLLDrr",
1195 "(V?)PSLLQrr",
1196 "(V?)PSLLWrr",
1197 "(V?)PSRADrr",
1198 "(V?)PSRAWrr",
1199 "(V?)PSRLDrr",
1200 "(V?)PSRLQrr",
1201 "(V?)PSRLWrr",
1202 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001203
1204def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1205 let Latency = 2;
1206 let NumMicroOps = 2;
1207 let ResourceCycles = [1,1];
1208}
1209def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1210
1211def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1212 let Latency = 2;
1213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
1216def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1217
1218def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1219 let Latency = 2;
1220 let NumMicroOps = 2;
1221 let ResourceCycles = [1,1];
1222}
Craig Topper498875f2018-04-04 17:54:19 +00001223def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1224
1225def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1226 let Latency = 1;
1227 let NumMicroOps = 1;
1228 let ResourceCycles = [1];
1229}
1230def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001231
1232def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1233 let Latency = 2;
1234 let NumMicroOps = 2;
1235 let ResourceCycles = [1,1];
1236}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001237def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1238def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1239 "ADC(8|16|32|64)rr",
1240 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001241 "SBB(8|16|32|64)ri",
1242 "SBB(8|16|32|64)rr",
1243 "SBB(8|16|32|64)i",
1244 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001245
1246def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001247 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001248 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001249 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001250}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001251def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001252 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001253 "VPMASKMOVDrm",
1254 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001255
Gadi Haber2cf601f2017-12-08 09:48:44 +00001256def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1257 let Latency = 9;
1258 let NumMicroOps = 3;
1259 let ResourceCycles = [2,1];
1260}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001261def: InstRW<[HWWriteResGroup36_1], (instregex "VMASKMOVPDYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001262 "VMASKMOVPSYrm",
1263 "VPBLENDVBYrm",
1264 "VPMASKMOVDYrm",
1265 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001266
1267def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1268 let Latency = 7;
1269 let NumMicroOps = 3;
1270 let ResourceCycles = [2,1];
1271}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001272def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1273 "MMX_PACKSSWBirm",
1274 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001275
Gadi Haberd76f7b82017-08-28 10:04:16 +00001276def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001277 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001278 let NumMicroOps = 3;
1279 let ResourceCycles = [1,2];
1280}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001281def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1282 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001283
1284def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001285 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001286 let NumMicroOps = 3;
1287 let ResourceCycles = [1,1,1];
1288}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001289def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1290 "(V?)PSLLQrm",
1291 "(V?)PSLLWrm",
1292 "(V?)PSRADrm",
1293 "(V?)PSRAWrm",
1294 "(V?)PSRLDrm",
1295 "(V?)PSRLQrm",
1296 "(V?)PSRLWrm",
1297 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001298
1299def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001300 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001301 let NumMicroOps = 3;
1302 let ResourceCycles = [1,1,1];
1303}
1304def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1305
Gadi Haberd76f7b82017-08-28 10:04:16 +00001306def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001307 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001308 let NumMicroOps = 3;
1309 let ResourceCycles = [1,1,1];
1310}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001311def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1312 "RETL",
1313 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314
Gadi Haberd76f7b82017-08-28 10:04:16 +00001315def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001316 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001317 let NumMicroOps = 3;
1318 let ResourceCycles = [1,1,1];
1319}
Craig Topperc50570f2018-04-06 17:12:18 +00001320def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1321 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001322
1323def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001324 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001325 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001326 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001327}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001328def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001329
Gadi Haberd76f7b82017-08-28 10:04:16 +00001330def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001331 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001332 let NumMicroOps = 4;
1333 let ResourceCycles = [1,1,1,1];
1334}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001335def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1336 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001337
1338def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001339 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001340 let NumMicroOps = 5;
1341 let ResourceCycles = [1,1,1,2];
1342}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001343def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1344 "ROL(8|16|32|64)mi",
1345 "ROR(8|16|32|64)m1",
1346 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001347
1348def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001349 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350 let NumMicroOps = 5;
1351 let ResourceCycles = [1,1,1,2];
1352}
Craig Topper13a16502018-03-19 00:56:09 +00001353def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001354
1355def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001356 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001357 let NumMicroOps = 5;
1358 let ResourceCycles = [1,1,1,1,1];
1359}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001360def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1361 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001362
Gadi Haberd76f7b82017-08-28 10:04:16 +00001363def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1364 let Latency = 3;
1365 let NumMicroOps = 1;
1366 let ResourceCycles = [1];
1367}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001368def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001369 "PDEP(32|64)rr",
1370 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001371 "SHLD(16|32|64)rri8",
1372 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001373 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374
Clement Courbet327fac42018-03-07 08:14:02 +00001375def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001376 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001377 let NumMicroOps = 2;
1378 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001379}
Clement Courbet327fac42018-03-07 08:14:02 +00001380def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001381
1382def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1383 let Latency = 3;
1384 let NumMicroOps = 1;
1385 let ResourceCycles = [1];
1386}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001387def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001388 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001389 "VPMOVSXBDYrr",
1390 "VPMOVSXBQYrr",
1391 "VPMOVSXBWYrr",
1392 "VPMOVSXDQYrr",
1393 "VPMOVSXWDYrr",
1394 "VPMOVSXWQYrr",
1395 "VPMOVZXBDYrr",
1396 "VPMOVZXBQYrr",
1397 "VPMOVZXBWYrr",
1398 "VPMOVZXDQYrr",
1399 "VPMOVZXWDYrr",
1400 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001401
1402def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001403 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001404 let NumMicroOps = 2;
1405 let ResourceCycles = [1,1];
1406}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001407def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1408 "(V?)ADDPSrm",
1409 "(V?)ADDSUBPDrm",
1410 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001411 "(V?)CVTPS2DQrm",
1412 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001413 "(V?)SUBPDrm",
1414 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415
Gadi Haber2cf601f2017-12-08 09:48:44 +00001416def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1417 let Latency = 10;
1418 let NumMicroOps = 2;
1419 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001420}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001421def: InstRW<[HWWriteResGroup52_1], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1422 "ILD_F(16|32|64)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001423 "VADDPDYrm",
1424 "VADDPSYrm",
1425 "VADDSUBPDYrm",
1426 "VADDSUBPSYrm",
1427 "VCMPPDYrmi",
1428 "VCMPPSYrmi",
1429 "VCVTDQ2PSYrm",
1430 "VCVTPS2DQYrm",
1431 "VCVTTPS2DQYrm",
1432 "VMAX(C?)PDYrm",
1433 "VMAX(C?)PSYrm",
1434 "VMIN(C?)PDYrm",
1435 "VMIN(C?)PSYrm",
1436 "VSUBPDYrm",
1437 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001438
1439def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001440 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001441 let NumMicroOps = 2;
1442 let ResourceCycles = [1,1];
1443}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001444def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1445 "VPERM2I128rm",
1446 "VPERMDYrm",
1447 "VPERMPDYmi",
1448 "VPERMPSYrm",
1449 "VPERMQYmi",
1450 "VPMOVZXBDYrm",
1451 "VPMOVZXBQYrm",
1452 "VPMOVZXBWYrm",
1453 "VPMOVZXDQYrm",
1454 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001455
Gadi Haber2cf601f2017-12-08 09:48:44 +00001456def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1457 let Latency = 9;
1458 let NumMicroOps = 2;
1459 let ResourceCycles = [1,1];
1460}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001461def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1462 "VPMOVSXDQYrm",
1463 "VPMOVSXWDYrm",
1464 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001465
Gadi Haberd76f7b82017-08-28 10:04:16 +00001466def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001467 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001468 let NumMicroOps = 3;
1469 let ResourceCycles = [3];
1470}
Craig Topperb5f26592018-04-19 18:00:17 +00001471def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1472 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1473 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001474
1475def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1476 let Latency = 3;
1477 let NumMicroOps = 3;
1478 let ResourceCycles = [2,1];
1479}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001480def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1481 "VPSRAVD(Y?)rr",
1482 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001483
Gadi Haberd76f7b82017-08-28 10:04:16 +00001484def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1485 let Latency = 3;
1486 let NumMicroOps = 3;
1487 let ResourceCycles = [2,1];
1488}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001489def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1490 "MMX_PACKSSWBirr",
1491 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001492
1493def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1494 let Latency = 3;
1495 let NumMicroOps = 3;
1496 let ResourceCycles = [1,2];
1497}
1498def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1499
1500def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1501 let Latency = 3;
1502 let NumMicroOps = 3;
1503 let ResourceCycles = [1,2];
1504}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001505def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1506 "RCL(8|16|32|64)r1",
1507 "RCL(8|16|32|64)ri",
1508 "RCR(8|16|32|64)r1",
1509 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001510
1511def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1512 let Latency = 3;
1513 let NumMicroOps = 3;
1514 let ResourceCycles = [2,1];
1515}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001516def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1517 "ROR(8|16|32|64)rCL",
1518 "SAR(8|16|32|64)rCL",
1519 "SHL(8|16|32|64)rCL",
1520 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001521
1522def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001523 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001524 let NumMicroOps = 3;
1525 let ResourceCycles = [1,1,1];
1526}
1527def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1528
1529def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001530 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001531 let NumMicroOps = 3;
1532 let ResourceCycles = [1,1,1];
1533}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001534def: InstRW<[HWWriteResGroup62], (instregex "IST(T?)_FP(16|32|64)m",
1535 "IST_F(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001536
1537def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001538 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001539 let NumMicroOps = 4;
1540 let ResourceCycles = [2,1,1];
1541}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001542def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1543 "VPSRAVDYrm",
1544 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001545
1546def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1547 let Latency = 9;
1548 let NumMicroOps = 4;
1549 let ResourceCycles = [2,1,1];
1550}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001551def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1552 "VPSRAVDrm",
1553 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001554
1555def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001556 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001557 let NumMicroOps = 4;
1558 let ResourceCycles = [2,1,1];
1559}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001560def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001561
1562def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1563 let Latency = 10;
1564 let NumMicroOps = 4;
1565 let ResourceCycles = [2,1,1];
1566}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001567def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1568 "VPHADDSWYrm",
1569 "VPHADDWYrm",
1570 "VPHSUBDYrm",
1571 "VPHSUBSWYrm",
1572 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001573
Gadi Haberd76f7b82017-08-28 10:04:16 +00001574def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001575 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001576 let NumMicroOps = 4;
1577 let ResourceCycles = [1,1,2];
1578}
Craig Topperf4cd9082018-01-19 05:47:32 +00001579def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001580
1581def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001582 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001583 let NumMicroOps = 5;
1584 let ResourceCycles = [1,1,1,2];
1585}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001586def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1587 "RCL(8|16|32|64)mi",
1588 "RCR(8|16|32|64)m1",
1589 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001590
1591def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001592 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001593 let NumMicroOps = 5;
1594 let ResourceCycles = [1,1,2,1];
1595}
Craig Topper13a16502018-03-19 00:56:09 +00001596def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001597
1598def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001599 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001600 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001601 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001602}
Craig Topper9f834812018-04-01 21:54:24 +00001603def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001604
Gadi Haberd76f7b82017-08-28 10:04:16 +00001605def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001606 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607 let NumMicroOps = 6;
1608 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001609}
Craig Topper9f834812018-04-01 21:54:24 +00001610def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001611 "CMPXCHG(8|16|32|64)rm",
1612 "ROL(8|16|32|64)mCL",
1613 "SAR(8|16|32|64)mCL",
1614 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001615 "SHL(8|16|32|64)mCL",
1616 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001617def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1618 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001619
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1621 let Latency = 4;
1622 let NumMicroOps = 2;
1623 let ResourceCycles = [1,1];
1624}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001625def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1626 "(V?)CVTSD2SIrr",
1627 "(V?)CVTSS2SI64rr",
1628 "(V?)CVTSS2SIrr",
1629 "(V?)CVTTSD2SI64rr",
1630 "(V?)CVTTSD2SIrr",
1631 "(V?)CVTTSS2SI64rr",
1632 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001633
1634def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1635 let Latency = 4;
1636 let NumMicroOps = 2;
1637 let ResourceCycles = [1,1];
1638}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001639def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1640 "VPSLLDYrr",
1641 "VPSLLQYrr",
1642 "VPSLLWYrr",
1643 "VPSRADYrr",
1644 "VPSRAWYrr",
1645 "VPSRLDYrr",
1646 "VPSRLQYrr",
1647 "VPSRLWYrr",
1648 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001649
1650def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1651 let Latency = 4;
1652 let NumMicroOps = 2;
1653 let ResourceCycles = [1,1];
1654}
1655def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1656
1657def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1658 let Latency = 4;
1659 let NumMicroOps = 2;
1660 let ResourceCycles = [1,1];
1661}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001662def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1663 "MMX_CVTPI2PDirr",
1664 "MMX_CVTPS2PIirr",
1665 "MMX_CVTTPD2PIirr",
1666 "MMX_CVTTPS2PIirr",
1667 "(V?)CVTDQ2PDrr",
1668 "(V?)CVTPD2DQrr",
1669 "(V?)CVTPD2PSrr",
1670 "VCVTPS2PHrr",
1671 "(V?)CVTSD2SSrr",
1672 "(V?)CVTSI642SDrr",
1673 "(V?)CVTSI2SDrr",
1674 "(V?)CVTSI2SSrr",
1675 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001676
1677def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1678 let Latency = 4;
1679 let NumMicroOps = 2;
1680 let ResourceCycles = [1,1];
1681}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001682def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001683
Craig Topperf846e2d2018-04-19 05:34:05 +00001684def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001685 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001686 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001687 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001688}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001689def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001690
Gadi Haberd76f7b82017-08-28 10:04:16 +00001691def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001692 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001693 let NumMicroOps = 3;
1694 let ResourceCycles = [2,1];
1695}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001696def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1697 "FICOM32m",
1698 "FICOMP16m",
1699 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001700
1701def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001702 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001703 let NumMicroOps = 3;
1704 let ResourceCycles = [1,1,1];
1705}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001706def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1707 "(V?)CVTSD2SIrm",
1708 "(V?)CVTSS2SI64rm",
1709 "(V?)CVTSS2SIrm",
1710 "(V?)CVTTSD2SI64rm",
1711 "(V?)CVTTSD2SIrm",
1712 "VCVTTSS2SI64rm",
1713 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001714
1715def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001716 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001717 let NumMicroOps = 3;
1718 let ResourceCycles = [1,1,1];
1719}
1720def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001721
1722def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1723 let Latency = 11;
1724 let NumMicroOps = 3;
1725 let ResourceCycles = [1,1,1];
1726}
1727def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001728
1729def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001730 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001731 let NumMicroOps = 3;
1732 let ResourceCycles = [1,1,1];
1733}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001734def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1735 "CVTPD2PSrm",
1736 "CVTTPD2DQrm",
1737 "MMX_CVTPD2PIirm",
1738 "MMX_CVTTPD2PIirm",
1739 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001740
1741def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1742 let Latency = 9;
1743 let NumMicroOps = 3;
1744 let ResourceCycles = [1,1,1];
1745}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001746def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1747 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001748
1749def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001750 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001751 let NumMicroOps = 3;
1752 let ResourceCycles = [1,1,1];
1753}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001754def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001755
1756def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001757 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001761def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1762 "VPBROADCASTBrm",
1763 "VPBROADCASTWYrm",
1764 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001765
1766def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1767 let Latency = 4;
1768 let NumMicroOps = 4;
1769 let ResourceCycles = [4];
1770}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001771def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001772
1773def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1774 let Latency = 4;
1775 let NumMicroOps = 4;
1776 let ResourceCycles = [1,3];
1777}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001778def: InstRW<[HWWriteResGroup82], (instrs VZEROUPPER)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001779
1780def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1781 let Latency = 4;
1782 let NumMicroOps = 4;
1783 let ResourceCycles = [1,1,2];
1784}
1785def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1786
1787def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001788 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001789 let NumMicroOps = 4;
1790 let ResourceCycles = [1,1,1,1];
1791}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001792def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1793 "VMASKMOVPS(Y?)mr",
1794 "VPMASKMOVD(Y?)mr",
1795 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001796
Gadi Haberd76f7b82017-08-28 10:04:16 +00001797def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001798 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001799 let NumMicroOps = 4;
1800 let ResourceCycles = [1,1,1,1];
1801}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001802def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1803 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001804
1805def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001806 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001807 let NumMicroOps = 5;
1808 let ResourceCycles = [1,2,1,1];
1809}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001810def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1811 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001812
1813def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001814 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001815 let NumMicroOps = 6;
1816 let ResourceCycles = [1,1,4];
1817}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001818def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1819 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001820
1821def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001822 let Latency = 5;
1823 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001824 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001825}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001826def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001827
Gadi Haberd76f7b82017-08-28 10:04:16 +00001828def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001829 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001830 let NumMicroOps = 1;
1831 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001832}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001833def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1834 "(V?)MULPS(Y?)rr",
1835 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001836 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001837
Craig Topper8104f262018-04-02 05:33:28 +00001838def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001839 let Latency = 16;
1840 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001841 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001842}
1843def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1844
Craig Topper8104f262018-04-02 05:33:28 +00001845def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001846 let Latency = 18;
1847 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001848 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001849}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001850def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001851
1852def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1853 let Latency = 11;
1854 let NumMicroOps = 2;
1855 let ResourceCycles = [1,1];
1856}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001857def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001858 "(V?)PMADDUBSWrm",
1859 "(V?)PMADDWDrm",
1860 "(V?)PMULDQrm",
1861 "(V?)PMULHRSWrm",
1862 "(V?)PMULHUWrm",
1863 "(V?)PMULHWrm",
1864 "(V?)PMULLWrm",
1865 "(V?)PMULUDQrm",
1866 "(V?)PSADBWrm",
1867 "(V?)RCPPSm",
1868 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001869
1870def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1871 let Latency = 12;
1872 let NumMicroOps = 2;
1873 let ResourceCycles = [1,1];
1874}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001875def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F(32|64)m",
1876 "VPCMPGTQYrm",
1877 "VPMADDUBSWYrm",
1878 "VPMADDWDYrm",
1879 "VPMULDQYrm",
1880 "VPMULHRSWYrm",
1881 "VPMULHUWYrm",
1882 "VPMULHWYrm",
1883 "VPMULLWYrm",
1884 "VPMULUDQYrm",
1885 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001886
Gadi Haberd76f7b82017-08-28 10:04:16 +00001887def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001888 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001889 let NumMicroOps = 2;
1890 let ResourceCycles = [1,1];
1891}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001892def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001893 "(V?)MULPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001894
1895def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1896 let Latency = 12;
1897 let NumMicroOps = 2;
1898 let ResourceCycles = [1,1];
1899}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001900def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001901 "VMULPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001902
1903def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
1904 let Latency = 10;
1905 let NumMicroOps = 2;
1906 let ResourceCycles = [1,1];
1907}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001908def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
Simon Pilgrim16299272018-04-24 14:47:11 +00001909 "(V?)MULSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001910
1911def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
1912 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001913 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001914 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001915}
Simon Pilgrim44278f62018-04-21 16:20:28 +00001916def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001917
Gadi Haberd76f7b82017-08-28 10:04:16 +00001918def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
1919 let Latency = 5;
1920 let NumMicroOps = 3;
1921 let ResourceCycles = [1,1,1];
1922}
1923def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
1924
1925def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001926 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001927 let NumMicroOps = 3;
1928 let ResourceCycles = [1,1,1];
1929}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001930def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001931
Gadi Haberd76f7b82017-08-28 10:04:16 +00001932def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001933 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001934 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001935 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001936}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001938
Gadi Haberd76f7b82017-08-28 10:04:16 +00001939def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001940 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001941 let NumMicroOps = 4;
1942 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001943}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001944def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001945
Gadi Haberd76f7b82017-08-28 10:04:16 +00001946def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
1947 let Latency = 5;
1948 let NumMicroOps = 5;
1949 let ResourceCycles = [1,4];
1950}
1951def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
1952
1953def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
1954 let Latency = 5;
1955 let NumMicroOps = 5;
1956 let ResourceCycles = [1,4];
1957}
1958def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
1959
1960def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
1961 let Latency = 5;
1962 let NumMicroOps = 5;
1963 let ResourceCycles = [2,3];
1964}
Craig Topper13a16502018-03-19 00:56:09 +00001965def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001966
1967def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
1968 let Latency = 6;
1969 let NumMicroOps = 2;
1970 let ResourceCycles = [1,1];
1971}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001972def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
1973 "VCVTPD2DQYrr",
1974 "VCVTPD2PSYrr",
1975 "VCVTPS2PHYrr",
1976 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001977
1978def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001979 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001980 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001981 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001982}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001983def: InstRW<[HWWriteResGroup103], (instregex "(ADD|SUB|SUBR)_FI(16|32)m",
Craig Topper40d3b322018-03-22 21:55:20 +00001984 "VROUNDPDYm",
1985 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001986
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1988 let Latency = 12;
1989 let NumMicroOps = 3;
1990 let ResourceCycles = [2,1];
1991}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001992def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
1993 "(V?)ROUNDPSm",
1994 "(V?)ROUNDSDm",
1995 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001996
Gadi Haberd76f7b82017-08-28 10:04:16 +00001997def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001998 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001999 let NumMicroOps = 3;
2000 let ResourceCycles = [1,1,1];
2001}
2002def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2003
2004def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2005 let Latency = 6;
2006 let NumMicroOps = 4;
2007 let ResourceCycles = [1,1,2];
2008}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002009def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2010 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002011
2012def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002013 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002014 let NumMicroOps = 4;
2015 let ResourceCycles = [1,1,1,1];
2016}
2017def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2018
2019def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2020 let Latency = 6;
2021 let NumMicroOps = 4;
2022 let ResourceCycles = [1,1,1,1];
2023}
2024def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2025
2026def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2027 let Latency = 6;
2028 let NumMicroOps = 6;
2029 let ResourceCycles = [1,5];
2030}
2031def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2032
2033def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002034 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002035 let NumMicroOps = 6;
2036 let ResourceCycles = [1,1,1,1,2];
2037}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002038def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2039 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002040
Gadi Haber2cf601f2017-12-08 09:48:44 +00002041def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2042 let Latency = 14;
2043 let NumMicroOps = 4;
2044 let ResourceCycles = [1,2,1];
2045}
2046def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2047
Gadi Haberd76f7b82017-08-28 10:04:16 +00002048def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2049 let Latency = 7;
2050 let NumMicroOps = 7;
2051 let ResourceCycles = [2,2,1,2];
2052}
Craig Topper2d451e72018-03-18 08:38:06 +00002053def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002054
2055def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002056 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002057 let NumMicroOps = 3;
2058 let ResourceCycles = [1,1,1];
2059}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002060def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002061
2062def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2063 let Latency = 9;
2064 let NumMicroOps = 3;
2065 let ResourceCycles = [1,1,1];
2066}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002067def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002068
2069def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002070 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071 let NumMicroOps = 4;
2072 let ResourceCycles = [1,1,1,1];
2073}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002074def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002075
Gadi Haber2cf601f2017-12-08 09:48:44 +00002076def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2077 let Latency = 17;
2078 let NumMicroOps = 3;
2079 let ResourceCycles = [2,1];
2080}
2081def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2082
Gadi Haberd76f7b82017-08-28 10:04:16 +00002083def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002084 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002085 let NumMicroOps = 10;
2086 let ResourceCycles = [1,1,1,4,1,2];
2087}
Craig Topper13a16502018-03-19 00:56:09 +00002088def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002089
Craig Topper8104f262018-04-02 05:33:28 +00002090def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002091 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002092 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002093 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002094}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002095def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2096 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002097
Gadi Haberd76f7b82017-08-28 10:04:16 +00002098def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2099 let Latency = 11;
2100 let NumMicroOps = 3;
2101 let ResourceCycles = [2,1];
2102}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002103def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2104 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002105
Gadi Haberd76f7b82017-08-28 10:04:16 +00002106def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002107 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002108 let NumMicroOps = 4;
2109 let ResourceCycles = [2,1,1];
2110}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002111def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2112 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002113
2114def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2115 let Latency = 11;
2116 let NumMicroOps = 7;
2117 let ResourceCycles = [2,2,3];
2118}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002119def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2120 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002121
2122def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2123 let Latency = 11;
2124 let NumMicroOps = 9;
2125 let ResourceCycles = [1,4,1,3];
2126}
2127def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2128
2129def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2130 let Latency = 11;
2131 let NumMicroOps = 11;
2132 let ResourceCycles = [2,9];
2133}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002134def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002135
2136def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002137 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002138 let NumMicroOps = 14;
2139 let ResourceCycles = [1,1,1,4,2,5];
2140}
2141def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2142
Craig Topper8104f262018-04-02 05:33:28 +00002143def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002144 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002146 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002147}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002148def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2149 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002150
Craig Topper8104f262018-04-02 05:33:28 +00002151def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002152 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002153 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002154 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002155}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002156def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002157
2158def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002159 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002160 let NumMicroOps = 11;
2161 let ResourceCycles = [2,1,1,3,1,3];
2162}
Craig Topper13a16502018-03-19 00:56:09 +00002163def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002164
Craig Topper8104f262018-04-02 05:33:28 +00002165def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002166 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002167 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002168 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002169}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002170def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002171
Gadi Haberd76f7b82017-08-28 10:04:16 +00002172def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2173 let Latency = 14;
2174 let NumMicroOps = 4;
2175 let ResourceCycles = [2,1,1];
2176}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002177def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002178
2179def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002180 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002181 let NumMicroOps = 5;
2182 let ResourceCycles = [2,1,1,1];
2183}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002184def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002185
Gadi Haber2cf601f2017-12-08 09:48:44 +00002186def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2187 let Latency = 21;
2188 let NumMicroOps = 5;
2189 let ResourceCycles = [2,1,1,1];
2190}
2191def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2192
Gadi Haberd76f7b82017-08-28 10:04:16 +00002193def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2194 let Latency = 14;
2195 let NumMicroOps = 10;
2196 let ResourceCycles = [2,3,1,4];
2197}
2198def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2199
2200def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002201 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002202 let NumMicroOps = 15;
2203 let ResourceCycles = [1,14];
2204}
2205def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2206
2207def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002208 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002209 let NumMicroOps = 8;
2210 let ResourceCycles = [1,1,1,1,1,1,2];
2211}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002212def: InstRW<[HWWriteResGroup144], (instrs INSB, INSL, INSW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002213
2214def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2215 let Latency = 16;
2216 let NumMicroOps = 16;
2217 let ResourceCycles = [16];
2218}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002219def: InstRW<[HWWriteResGroup145], (instrs VZEROALL)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002220
2221def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002222 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002223 let NumMicroOps = 19;
2224 let ResourceCycles = [2,1,4,1,1,4,6];
2225}
2226def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2227
2228def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2229 let Latency = 17;
2230 let NumMicroOps = 15;
2231 let ResourceCycles = [2,1,2,4,2,4];
2232}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002233def: InstRW<[HWWriteResGroup147], (instrs XCH_F)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002234
Gadi Haberd76f7b82017-08-28 10:04:16 +00002235def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2236 let Latency = 18;
2237 let NumMicroOps = 8;
2238 let ResourceCycles = [1,1,1,5];
2239}
2240def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002241def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002242
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002244 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002245 let NumMicroOps = 19;
2246 let ResourceCycles = [3,1,15];
2247}
Craig Topper391c6f92017-12-10 01:24:08 +00002248def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002249
Gadi Haberd76f7b82017-08-28 10:04:16 +00002250def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2251 let Latency = 20;
2252 let NumMicroOps = 1;
2253 let ResourceCycles = [1];
2254}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002255def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2256 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002257 "DIV_FrST0")>;
2258
2259def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2260 let Latency = 20;
2261 let NumMicroOps = 1;
2262 let ResourceCycles = [1,14];
2263}
2264def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2265 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266
2267def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002268 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002269 let NumMicroOps = 2;
2270 let ResourceCycles = [1,1];
2271}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002272def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F(32|64)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002273
Craig Topper8104f262018-04-02 05:33:28 +00002274def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002275 let Latency = 26;
2276 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002277 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002278}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002279def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002280
Craig Topper8104f262018-04-02 05:33:28 +00002281def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002282 let Latency = 21;
2283 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002284 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002285}
2286def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2287
Craig Topper8104f262018-04-02 05:33:28 +00002288def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002289 let Latency = 22;
2290 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002291 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002292}
2293def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2294
Craig Topper8104f262018-04-02 05:33:28 +00002295def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002296 let Latency = 25;
2297 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002298 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002299}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002300def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301
2302def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2303 let Latency = 20;
2304 let NumMicroOps = 10;
2305 let ResourceCycles = [1,2,7];
2306}
2307def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2308
Craig Topper8104f262018-04-02 05:33:28 +00002309def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002310 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002311 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002312 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002313}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002314def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2315 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002316
Craig Topper8104f262018-04-02 05:33:28 +00002317def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002318 let Latency = 21;
2319 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002320 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002321}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002322def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2323 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002324
Craig Topper8104f262018-04-02 05:33:28 +00002325def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002326 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002327 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002328 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002329}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002330def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2331 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002332
2333def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002334 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002335 let NumMicroOps = 3;
2336 let ResourceCycles = [1,1,1];
2337}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002338def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002339
2340def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2341 let Latency = 24;
2342 let NumMicroOps = 1;
2343 let ResourceCycles = [1];
2344}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002345def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2346 "DIVR_FST0r",
2347 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002348
2349def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002350 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002351 let NumMicroOps = 2;
2352 let ResourceCycles = [1,1];
2353}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002354def: InstRW<[HWWriteResGroup163], (instregex "DIV_F(32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002355
2356def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002357 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358 let NumMicroOps = 27;
2359 let ResourceCycles = [1,5,1,1,19];
2360}
2361def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2362
2363def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002364 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002365 let NumMicroOps = 28;
2366 let ResourceCycles = [1,6,1,1,19];
2367}
Craig Topper2d451e72018-03-18 08:38:06 +00002368def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002369
2370def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002371 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002372 let NumMicroOps = 3;
2373 let ResourceCycles = [1,1,1];
2374}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002375def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002376
Gadi Haberd76f7b82017-08-28 10:04:16 +00002377def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002378 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002379 let NumMicroOps = 23;
2380 let ResourceCycles = [1,5,3,4,10];
2381}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002382def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2383 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002384
2385def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002386 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002387 let NumMicroOps = 23;
2388 let ResourceCycles = [1,5,2,1,4,10];
2389}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002390def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2391 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002392
2393def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2394 let Latency = 31;
2395 let NumMicroOps = 31;
2396 let ResourceCycles = [8,1,21,1];
2397}
2398def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2399
Craig Topper8104f262018-04-02 05:33:28 +00002400def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002401 let Latency = 35;
2402 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002403 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002404}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002405def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2406 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002407
Craig Topper8104f262018-04-02 05:33:28 +00002408def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002409 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002410 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002411 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002412}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002413def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2414 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002415
2416def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002417 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002418 let NumMicroOps = 18;
2419 let ResourceCycles = [1,1,2,3,1,1,1,8];
2420}
2421def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2422
2423def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2424 let Latency = 42;
2425 let NumMicroOps = 22;
2426 let ResourceCycles = [2,20];
2427}
Craig Topper2d451e72018-03-18 08:38:06 +00002428def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002429
2430def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002431 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432 let NumMicroOps = 64;
2433 let ResourceCycles = [2,2,8,1,10,2,39];
2434}
2435def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002436
2437def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002438 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439 let NumMicroOps = 88;
2440 let ResourceCycles = [4,4,31,1,2,1,45];
2441}
Craig Topper2d451e72018-03-18 08:38:06 +00002442def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002443
2444def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002445 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002446 let NumMicroOps = 90;
2447 let ResourceCycles = [4,2,33,1,2,1,47];
2448}
Craig Topper2d451e72018-03-18 08:38:06 +00002449def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002450
2451def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2452 let Latency = 75;
2453 let NumMicroOps = 15;
2454 let ResourceCycles = [6,3,6];
2455}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002456def: InstRW<[HWWriteResGroup180], (instrs FNINIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002457
2458def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2459 let Latency = 98;
2460 let NumMicroOps = 32;
2461 let ResourceCycles = [7,7,3,3,1,11];
2462}
2463def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2464
2465def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2466 let Latency = 112;
2467 let NumMicroOps = 66;
2468 let ResourceCycles = [4,2,4,8,14,34];
2469}
2470def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2471
2472def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002473 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474 let NumMicroOps = 100;
2475 let ResourceCycles = [9,9,11,8,1,11,21,30];
2476}
2477def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002478
Gadi Haber2cf601f2017-12-08 09:48:44 +00002479def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2480 let Latency = 26;
2481 let NumMicroOps = 12;
2482 let ResourceCycles = [2,2,1,3,2,2];
2483}
Craig Topper17a31182017-12-16 18:35:29 +00002484def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2485 VPGATHERDQrm,
2486 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002487
2488def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2489 let Latency = 24;
2490 let NumMicroOps = 22;
2491 let ResourceCycles = [5,3,4,1,5,4];
2492}
Craig Topper17a31182017-12-16 18:35:29 +00002493def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2494 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002495
2496def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2497 let Latency = 28;
2498 let NumMicroOps = 22;
2499 let ResourceCycles = [5,3,4,1,5,4];
2500}
Craig Topper17a31182017-12-16 18:35:29 +00002501def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002502
2503def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2504 let Latency = 25;
2505 let NumMicroOps = 22;
2506 let ResourceCycles = [5,3,4,1,5,4];
2507}
Craig Topper17a31182017-12-16 18:35:29 +00002508def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002509
2510def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2511 let Latency = 27;
2512 let NumMicroOps = 20;
2513 let ResourceCycles = [3,3,4,1,5,4];
2514}
Craig Topper17a31182017-12-16 18:35:29 +00002515def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2516 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002517
2518def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2519 let Latency = 27;
2520 let NumMicroOps = 34;
2521 let ResourceCycles = [5,3,8,1,9,8];
2522}
Craig Topper17a31182017-12-16 18:35:29 +00002523def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2524 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002525
2526def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2527 let Latency = 23;
2528 let NumMicroOps = 14;
2529 let ResourceCycles = [3,3,2,1,3,2];
2530}
Craig Topper17a31182017-12-16 18:35:29 +00002531def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2532 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002533
2534def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2535 let Latency = 28;
2536 let NumMicroOps = 15;
2537 let ResourceCycles = [3,3,2,1,4,2];
2538}
Craig Topper17a31182017-12-16 18:35:29 +00002539def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002540
2541def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2542 let Latency = 25;
2543 let NumMicroOps = 15;
2544 let ResourceCycles = [3,3,2,1,4,2];
2545}
Craig Topper17a31182017-12-16 18:35:29 +00002546def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2547 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002548
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002549} // SchedModel