blob: b88e2113e32e9e6cf07e275fc52d29f5478bd544 [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)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000789def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000790 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000791 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000792 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000793 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000794 "SGDT64m",
795 "SIDT64m",
796 "SLDT64m",
797 "SMSW16m",
798 "STC",
799 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000800 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000801
802def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000803 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000804 let NumMicroOps = 2;
805 let ResourceCycles = [1,1];
806}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000807def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000808 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000809
Gadi Haber2cf601f2017-12-08 09:48:44 +0000810def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
811 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000812 let NumMicroOps = 2;
813 let ResourceCycles = [1,1];
814}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000815def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
816 "(V?)CVTSS2SDrm",
817 "VPSLLVQrm",
818 "VPSRLVQrm",
819 "VTESTPDrm",
820 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000821
822def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
823 let Latency = 8;
824 let NumMicroOps = 2;
825 let ResourceCycles = [1,1];
826}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000827def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
828 "VPSLLQYrm",
829 "VPSLLVQYrm",
830 "VPSLLWYrm",
831 "VPSRADYrm",
832 "VPSRAWYrm",
833 "VPSRLDYrm",
834 "VPSRLQYrm",
835 "VPSRLVQYrm",
836 "VPSRLWYrm",
837 "VTESTPDYrm",
838 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000839
840def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
841 let Latency = 8;
842 let NumMicroOps = 2;
843 let ResourceCycles = [1,1];
844}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000845def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000846 "FCOM64m",
847 "FCOMP32m",
848 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000849 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850 "PDEP(32|64)rm",
851 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000852 "(V?)CMPSDrm",
853 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854 "(V?)MAX(C?)SDrm",
855 "(V?)MAX(C?)SSrm",
856 "(V?)MIN(C?)SDrm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000857 "(V?)MIN(C?)SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000858
Craig Topperf846e2d2018-04-19 05:34:05 +0000859def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
860 let Latency = 8;
861 let NumMicroOps = 3;
862 let ResourceCycles = [1,1,1];
863}
864def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
865
866def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
867 let Latency = 9;
868 let NumMicroOps = 5;
869 let ResourceCycles = [1,1,2,1];
870}
871def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
872
Gadi Haberd76f7b82017-08-28 10:04:16 +0000873def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000874 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000875 let NumMicroOps = 2;
876 let ResourceCycles = [1,1];
877}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000878def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000879 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000880 "(V?)PACKSSDWrm",
881 "(V?)PACKSSWBrm",
882 "(V?)PACKUSDWrm",
883 "(V?)PACKUSWBrm",
884 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000885 "VPERMILPDmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000886 "VPERMILPSmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000887 "(V?)PSHUFBrm",
888 "(V?)PSHUFDmi",
889 "(V?)PSHUFHWmi",
890 "(V?)PSHUFLWmi",
891 "(V?)PUNPCKHBWrm",
892 "(V?)PUNPCKHDQrm",
893 "(V?)PUNPCKHQDQrm",
894 "(V?)PUNPCKHWDrm",
895 "(V?)PUNPCKLBWrm",
896 "(V?)PUNPCKLDQrm",
897 "(V?)PUNPCKLQDQrm",
898 "(V?)PUNPCKLWDrm",
899 "(V?)SHUFPDrmi",
900 "(V?)SHUFPSrmi",
901 "(V?)UNPCKHPDrm",
902 "(V?)UNPCKHPSrm",
903 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000904 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000905
Gadi Haber2cf601f2017-12-08 09:48:44 +0000906def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
907 let Latency = 8;
908 let NumMicroOps = 2;
909 let ResourceCycles = [1,1];
910}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000911def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKSSDWYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000912 "VPACKSSWBYrm",
913 "VPACKUSDWYrm",
914 "VPACKUSWBYrm",
915 "VPALIGNRYrmi",
916 "VPBLENDWYrmi",
917 "VPERMILPDYmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000918 "VPERMILPSYmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000919 "VPMOVSXBDYrm",
920 "VPMOVSXBQYrm",
921 "VPMOVSXWQYrm",
922 "VPSHUFBYrm",
923 "VPSHUFDYmi",
924 "VPSHUFHWYmi",
925 "VPSHUFLWYmi",
926 "VPUNPCKHBWYrm",
927 "VPUNPCKHDQYrm",
928 "VPUNPCKHQDQYrm",
929 "VPUNPCKHWDYrm",
930 "VPUNPCKLBWYrm",
931 "VPUNPCKLDQYrm",
932 "VPUNPCKLQDQYrm",
933 "VPUNPCKLWDYrm",
934 "VSHUFPDYrmi",
935 "VSHUFPSYrmi",
936 "VUNPCKHPDYrm",
937 "VUNPCKHPSYrm",
938 "VUNPCKLPDYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000939 "VUNPCKLPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000940
Gadi Haberd76f7b82017-08-28 10:04:16 +0000941def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000942 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000943 let NumMicroOps = 2;
944 let ResourceCycles = [1,1];
945}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000946def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
947 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000948
949def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000950 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000951 let NumMicroOps = 2;
952 let ResourceCycles = [1,1];
953}
Simon Pilgrimeb609092018-04-23 22:19:55 +0000954def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000955
956def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000957 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000958 let NumMicroOps = 2;
959 let ResourceCycles = [1,1];
960}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000961def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
962 "BLSI(32|64)rm",
963 "BLSMSK(32|64)rm",
964 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000965 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000966
967def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
968 let Latency = 7;
969 let NumMicroOps = 2;
970 let ResourceCycles = [1,1];
971}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000972def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
973 "(V?)PABSDrm",
974 "(V?)PABSWrm",
975 "(V?)PADDBrm",
976 "(V?)PADDDrm",
977 "(V?)PADDQrm",
978 "(V?)PADDSBrm",
979 "(V?)PADDSWrm",
980 "(V?)PADDUSBrm",
981 "(V?)PADDUSWrm",
982 "(V?)PADDWrm",
983 "(V?)PAVGBrm",
984 "(V?)PAVGWrm",
985 "(V?)PCMPEQBrm",
986 "(V?)PCMPEQDrm",
987 "(V?)PCMPEQQrm",
988 "(V?)PCMPEQWrm",
989 "(V?)PCMPGTBrm",
990 "(V?)PCMPGTDrm",
991 "(V?)PCMPGTWrm",
992 "(V?)PMAXSBrm",
993 "(V?)PMAXSDrm",
994 "(V?)PMAXSWrm",
995 "(V?)PMAXUBrm",
996 "(V?)PMAXUDrm",
997 "(V?)PMAXUWrm",
998 "(V?)PMINSBrm",
999 "(V?)PMINSDrm",
1000 "(V?)PMINSWrm",
1001 "(V?)PMINUBrm",
1002 "(V?)PMINUDrm",
1003 "(V?)PMINUWrm",
1004 "(V?)PSIGNBrm",
1005 "(V?)PSIGNDrm",
1006 "(V?)PSIGNWrm",
1007 "(V?)PSUBBrm",
1008 "(V?)PSUBDrm",
1009 "(V?)PSUBQrm",
1010 "(V?)PSUBSBrm",
1011 "(V?)PSUBSWrm",
1012 "(V?)PSUBUSBrm",
1013 "(V?)PSUBUSWrm",
1014 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001015
1016def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1017 let Latency = 8;
1018 let NumMicroOps = 2;
1019 let ResourceCycles = [1,1];
1020}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001021def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1022 "VPABSDYrm",
1023 "VPABSWYrm",
1024 "VPADDBYrm",
1025 "VPADDDYrm",
1026 "VPADDQYrm",
1027 "VPADDSBYrm",
1028 "VPADDSWYrm",
1029 "VPADDUSBYrm",
1030 "VPADDUSWYrm",
1031 "VPADDWYrm",
1032 "VPAVGBYrm",
1033 "VPAVGWYrm",
1034 "VPCMPEQBYrm",
1035 "VPCMPEQDYrm",
1036 "VPCMPEQQYrm",
1037 "VPCMPEQWYrm",
1038 "VPCMPGTBYrm",
1039 "VPCMPGTDYrm",
1040 "VPCMPGTWYrm",
1041 "VPMAXSBYrm",
1042 "VPMAXSDYrm",
1043 "VPMAXSWYrm",
1044 "VPMAXUBYrm",
1045 "VPMAXUDYrm",
1046 "VPMAXUWYrm",
1047 "VPMINSBYrm",
1048 "VPMINSDYrm",
1049 "VPMINSWYrm",
1050 "VPMINUBYrm",
1051 "VPMINUDYrm",
1052 "VPMINUWYrm",
1053 "VPSIGNBYrm",
1054 "VPSIGNDYrm",
1055 "VPSIGNWYrm",
1056 "VPSUBBYrm",
1057 "VPSUBDYrm",
1058 "VPSUBQYrm",
1059 "VPSUBSBYrm",
1060 "VPSUBSWYrm",
1061 "VPSUBUSBYrm",
1062 "VPSUBUSWYrm",
1063 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001064
1065def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001066 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001067 let NumMicroOps = 2;
1068 let ResourceCycles = [1,1];
1069}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001070def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001071 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001072 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001073
Gadi Haber2cf601f2017-12-08 09:48:44 +00001074def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1075 let Latency = 6;
1076 let NumMicroOps = 2;
1077 let ResourceCycles = [1,1];
1078}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001079def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1080 "MMX_PANDirm",
1081 "MMX_PORirm",
1082 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001083
1084def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1085 let Latency = 8;
1086 let NumMicroOps = 2;
1087 let ResourceCycles = [1,1];
1088}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001089def: InstRW<[HWWriteResGroup17_2], (instregex "VPANDNYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001090 "VPANDYrm",
1091 "VPBLENDDYrmi",
1092 "VPORYrm",
1093 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001094
Gadi Haberd76f7b82017-08-28 10:04:16 +00001095def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001096 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001097 let NumMicroOps = 2;
1098 let ResourceCycles = [1,1];
1099}
Craig Topper2d451e72018-03-18 08:38:06 +00001100def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001101def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001102
1103def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001104 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001105 let NumMicroOps = 2;
1106 let ResourceCycles = [1,1];
1107}
1108def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1109
Gadi Haberd76f7b82017-08-28 10:04:16 +00001110def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001111 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001112 let NumMicroOps = 3;
1113 let ResourceCycles = [1,1,1];
1114}
1115def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001116
Gadi Haberd76f7b82017-08-28 10:04:16 +00001117def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001118 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001119 let NumMicroOps = 3;
1120 let ResourceCycles = [1,1,1];
1121}
1122def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1123
1124def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001125 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001126 let NumMicroOps = 3;
1127 let ResourceCycles = [1,1,1];
1128}
1129def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1130
1131def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001132 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001133 let NumMicroOps = 3;
1134 let ResourceCycles = [1,1,1];
1135}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001136def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r,
1137 STOSB, STOSL, STOSQ, STOSW)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001138def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001139 "PUSH64i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001140
1141def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001142 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001143 let NumMicroOps = 4;
1144 let ResourceCycles = [1,1,1,1];
1145}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001146def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1147 "BTR(16|32|64)mi8",
1148 "BTS(16|32|64)mi8",
1149 "SAR(8|16|32|64)m1",
1150 "SAR(8|16|32|64)mi",
1151 "SHL(8|16|32|64)m1",
1152 "SHL(8|16|32|64)mi",
1153 "SHR(8|16|32|64)m1",
1154 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001155
1156def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001157 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001158 let NumMicroOps = 4;
1159 let ResourceCycles = [1,1,1,1];
1160}
Craig Topperf0d04262018-04-06 16:16:48 +00001161def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1162 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001163
Gadi Haberd76f7b82017-08-28 10:04:16 +00001164def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1165 let Latency = 2;
1166 let NumMicroOps = 2;
1167 let ResourceCycles = [2];
1168}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001169def: InstRW<[HWWriteResGroup28], (instrs FDECSTP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001170
1171def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1172 let Latency = 2;
1173 let NumMicroOps = 2;
1174 let ResourceCycles = [2];
1175}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001176def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1177 "ROL(8|16|32|64)ri",
1178 "ROR(8|16|32|64)r1",
1179 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001180
1181def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1182 let Latency = 2;
1183 let NumMicroOps = 2;
1184 let ResourceCycles = [2];
1185}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001186def: InstRW<[HWWriteResGroup30], (instrs LFENCE,
1187 MFENCE,
1188 WAIT,
1189 XGETBV)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001190
1191def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1192 let Latency = 2;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [1,1];
1195}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +00001196def: InstRW<[HWWriteResGroup31], (instregex "VCVTPH2PSYrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001197 "VCVTPH2PSrr",
1198 "(V?)CVTPS2PDrr",
1199 "(V?)CVTSS2SDrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001200 "(V?)PSLLDrr",
1201 "(V?)PSLLQrr",
1202 "(V?)PSLLWrr",
1203 "(V?)PSRADrr",
1204 "(V?)PSRAWrr",
1205 "(V?)PSRLDrr",
1206 "(V?)PSRLQrr",
1207 "(V?)PSRLWrr",
1208 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001209
1210def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1211 let Latency = 2;
1212 let NumMicroOps = 2;
1213 let ResourceCycles = [1,1];
1214}
1215def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1216
1217def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1218 let Latency = 2;
1219 let NumMicroOps = 2;
1220 let ResourceCycles = [1,1];
1221}
1222def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1223
1224def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1225 let Latency = 2;
1226 let NumMicroOps = 2;
1227 let ResourceCycles = [1,1];
1228}
Craig Topper498875f2018-04-04 17:54:19 +00001229def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1230
1231def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1232 let Latency = 1;
1233 let NumMicroOps = 1;
1234 let ResourceCycles = [1];
1235}
1236def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001237
1238def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1239 let Latency = 2;
1240 let NumMicroOps = 2;
1241 let ResourceCycles = [1,1];
1242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001243def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1244def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1245 "ADC(8|16|32|64)rr",
1246 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001247 "SBB(8|16|32|64)ri",
1248 "SBB(8|16|32|64)rr",
1249 "SBB(8|16|32|64)i",
1250 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001251
1252def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001253 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001254 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001255 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001256}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001257def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001258 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001259 "VPMASKMOVDrm",
1260 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001261
Gadi Haber2cf601f2017-12-08 09:48:44 +00001262def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1263 let Latency = 9;
1264 let NumMicroOps = 3;
1265 let ResourceCycles = [2,1];
1266}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001267def: InstRW<[HWWriteResGroup36_1], (instregex "VMASKMOVPDYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001268 "VMASKMOVPSYrm",
1269 "VPBLENDVBYrm",
1270 "VPMASKMOVDYrm",
1271 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001272
1273def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1274 let Latency = 7;
1275 let NumMicroOps = 3;
1276 let ResourceCycles = [2,1];
1277}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001278def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1279 "MMX_PACKSSWBirm",
1280 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001281
Gadi Haberd76f7b82017-08-28 10:04:16 +00001282def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001283 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001284 let NumMicroOps = 3;
1285 let ResourceCycles = [1,2];
1286}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001287def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1288 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001289
1290def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001291 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001292 let NumMicroOps = 3;
1293 let ResourceCycles = [1,1,1];
1294}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001295def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1296 "(V?)PSLLQrm",
1297 "(V?)PSLLWrm",
1298 "(V?)PSRADrm",
1299 "(V?)PSRAWrm",
1300 "(V?)PSRLDrm",
1301 "(V?)PSRLQrm",
1302 "(V?)PSRLWrm",
1303 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001304
1305def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001306 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001307 let NumMicroOps = 3;
1308 let ResourceCycles = [1,1,1];
1309}
1310def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1311
Gadi Haberd76f7b82017-08-28 10:04:16 +00001312def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001313 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314 let NumMicroOps = 3;
1315 let ResourceCycles = [1,1,1];
1316}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001317def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1318 "RETL",
1319 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001320
Gadi Haberd76f7b82017-08-28 10:04:16 +00001321def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001322 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001323 let NumMicroOps = 3;
1324 let ResourceCycles = [1,1,1];
1325}
Craig Topperc50570f2018-04-06 17:12:18 +00001326def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1327 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001328
1329def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001330 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001331 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001332 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001333}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001334def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001335
Gadi Haberd76f7b82017-08-28 10:04:16 +00001336def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001337 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338 let NumMicroOps = 4;
1339 let ResourceCycles = [1,1,1,1];
1340}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001341def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1342 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001343
1344def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001345 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001346 let NumMicroOps = 5;
1347 let ResourceCycles = [1,1,1,2];
1348}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001349def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1350 "ROL(8|16|32|64)mi",
1351 "ROR(8|16|32|64)m1",
1352 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001353
1354def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001355 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001356 let NumMicroOps = 5;
1357 let ResourceCycles = [1,1,1,2];
1358}
Craig Topper13a16502018-03-19 00:56:09 +00001359def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001360
1361def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001362 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001363 let NumMicroOps = 5;
1364 let ResourceCycles = [1,1,1,1,1];
1365}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001366def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1367 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001368
Gadi Haberd76f7b82017-08-28 10:04:16 +00001369def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1370 let Latency = 3;
1371 let NumMicroOps = 1;
1372 let ResourceCycles = [1];
1373}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001374def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001375 "PDEP(32|64)rr",
1376 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001377 "SHLD(16|32|64)rri8",
1378 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001379 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380
Clement Courbet327fac42018-03-07 08:14:02 +00001381def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001382 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001383 let NumMicroOps = 2;
1384 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001385}
Clement Courbet327fac42018-03-07 08:14:02 +00001386def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387
1388def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1389 let Latency = 3;
1390 let NumMicroOps = 1;
1391 let ResourceCycles = [1];
1392}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001393def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001394 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001395 "VPMOVSXBDYrr",
1396 "VPMOVSXBQYrr",
1397 "VPMOVSXBWYrr",
1398 "VPMOVSXDQYrr",
1399 "VPMOVSXWDYrr",
1400 "VPMOVSXWQYrr",
1401 "VPMOVZXBDYrr",
1402 "VPMOVZXBQYrr",
1403 "VPMOVZXBWYrr",
1404 "VPMOVZXDQYrr",
1405 "VPMOVZXWDYrr",
1406 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001407
1408def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001409 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001410 let NumMicroOps = 2;
1411 let ResourceCycles = [1,1];
1412}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001413def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1414 "(V?)ADDPSrm",
1415 "(V?)ADDSUBPDrm",
1416 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001417 "(V?)CVTPS2DQrm",
1418 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001419 "(V?)SUBPDrm",
1420 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001421
Gadi Haber2cf601f2017-12-08 09:48:44 +00001422def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1423 let Latency = 10;
1424 let NumMicroOps = 2;
1425 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001426}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001427def: InstRW<[HWWriteResGroup52_1], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1428 "ILD_F(16|32|64)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001429 "VADDPDYrm",
1430 "VADDPSYrm",
1431 "VADDSUBPDYrm",
1432 "VADDSUBPSYrm",
1433 "VCMPPDYrmi",
1434 "VCMPPSYrmi",
1435 "VCVTDQ2PSYrm",
1436 "VCVTPS2DQYrm",
1437 "VCVTTPS2DQYrm",
1438 "VMAX(C?)PDYrm",
1439 "VMAX(C?)PSYrm",
1440 "VMIN(C?)PDYrm",
1441 "VMIN(C?)PSYrm",
1442 "VSUBPDYrm",
1443 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001444
1445def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001446 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001447 let NumMicroOps = 2;
1448 let ResourceCycles = [1,1];
1449}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001450def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1451 "VPERM2I128rm",
1452 "VPERMDYrm",
1453 "VPERMPDYmi",
1454 "VPERMPSYrm",
1455 "VPERMQYmi",
1456 "VPMOVZXBDYrm",
1457 "VPMOVZXBQYrm",
1458 "VPMOVZXBWYrm",
1459 "VPMOVZXDQYrm",
1460 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001461
Gadi Haber2cf601f2017-12-08 09:48:44 +00001462def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1463 let Latency = 9;
1464 let NumMicroOps = 2;
1465 let ResourceCycles = [1,1];
1466}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001467def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1468 "VPMOVSXDQYrm",
1469 "VPMOVSXWDYrm",
1470 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001471
Gadi Haberd76f7b82017-08-28 10:04:16 +00001472def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001473 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001474 let NumMicroOps = 3;
1475 let ResourceCycles = [3];
1476}
Craig Topperb5f26592018-04-19 18:00:17 +00001477def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1478 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1479 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001480
1481def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1482 let Latency = 3;
1483 let NumMicroOps = 3;
1484 let ResourceCycles = [2,1];
1485}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001486def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1487 "VPSRAVD(Y?)rr",
1488 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001489
Gadi Haberd76f7b82017-08-28 10:04:16 +00001490def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1491 let Latency = 3;
1492 let NumMicroOps = 3;
1493 let ResourceCycles = [2,1];
1494}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001495def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1496 "MMX_PACKSSWBirr",
1497 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001498
1499def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1500 let Latency = 3;
1501 let NumMicroOps = 3;
1502 let ResourceCycles = [1,2];
1503}
1504def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1505
1506def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1507 let Latency = 3;
1508 let NumMicroOps = 3;
1509 let ResourceCycles = [1,2];
1510}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001511def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1512 "RCL(8|16|32|64)r1",
1513 "RCL(8|16|32|64)ri",
1514 "RCR(8|16|32|64)r1",
1515 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001516
1517def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1518 let Latency = 3;
1519 let NumMicroOps = 3;
1520 let ResourceCycles = [2,1];
1521}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001522def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1523 "ROR(8|16|32|64)rCL",
1524 "SAR(8|16|32|64)rCL",
1525 "SHL(8|16|32|64)rCL",
1526 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001527
1528def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001529 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001530 let NumMicroOps = 3;
1531 let ResourceCycles = [1,1,1];
1532}
1533def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1534
1535def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001536 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001537 let NumMicroOps = 3;
1538 let ResourceCycles = [1,1,1];
1539}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001540def: InstRW<[HWWriteResGroup62], (instregex "IST(T?)_FP(16|32|64)m",
1541 "IST_F(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001542
1543def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001544 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001545 let NumMicroOps = 4;
1546 let ResourceCycles = [2,1,1];
1547}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001548def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1549 "VPSRAVDYrm",
1550 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001551
1552def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1553 let Latency = 9;
1554 let NumMicroOps = 4;
1555 let ResourceCycles = [2,1,1];
1556}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001557def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1558 "VPSRAVDrm",
1559 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001560
1561def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001562 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001563 let NumMicroOps = 4;
1564 let ResourceCycles = [2,1,1];
1565}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001566def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001567
1568def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1569 let Latency = 10;
1570 let NumMicroOps = 4;
1571 let ResourceCycles = [2,1,1];
1572}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001573def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1574 "VPHADDSWYrm",
1575 "VPHADDWYrm",
1576 "VPHSUBDYrm",
1577 "VPHSUBSWYrm",
1578 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001579
Gadi Haberd76f7b82017-08-28 10:04:16 +00001580def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001581 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001582 let NumMicroOps = 4;
1583 let ResourceCycles = [1,1,2];
1584}
Craig Topperf4cd9082018-01-19 05:47:32 +00001585def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001586
1587def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001588 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001589 let NumMicroOps = 5;
1590 let ResourceCycles = [1,1,1,2];
1591}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001592def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1593 "RCL(8|16|32|64)mi",
1594 "RCR(8|16|32|64)m1",
1595 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001596
1597def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001598 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001599 let NumMicroOps = 5;
1600 let ResourceCycles = [1,1,2,1];
1601}
Craig Topper13a16502018-03-19 00:56:09 +00001602def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001603
1604def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001605 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001606 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001608}
Craig Topper9f834812018-04-01 21:54:24 +00001609def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001610
Gadi Haberd76f7b82017-08-28 10:04:16 +00001611def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001612 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001613 let NumMicroOps = 6;
1614 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001615}
Craig Topper9f834812018-04-01 21:54:24 +00001616def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001617 "CMPXCHG(8|16|32|64)rm",
1618 "ROL(8|16|32|64)mCL",
1619 "SAR(8|16|32|64)mCL",
1620 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001621 "SHL(8|16|32|64)mCL",
1622 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001623def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1624 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001625
Gadi Haberd76f7b82017-08-28 10:04:16 +00001626def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1627 let Latency = 4;
1628 let NumMicroOps = 2;
1629 let ResourceCycles = [1,1];
1630}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001631def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1632 "(V?)CVTSD2SIrr",
1633 "(V?)CVTSS2SI64rr",
1634 "(V?)CVTSS2SIrr",
1635 "(V?)CVTTSD2SI64rr",
1636 "(V?)CVTTSD2SIrr",
1637 "(V?)CVTTSS2SI64rr",
1638 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001639
1640def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1641 let Latency = 4;
1642 let NumMicroOps = 2;
1643 let ResourceCycles = [1,1];
1644}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001645def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1646 "VPSLLDYrr",
1647 "VPSLLQYrr",
1648 "VPSLLWYrr",
1649 "VPSRADYrr",
1650 "VPSRAWYrr",
1651 "VPSRLDYrr",
1652 "VPSRLQYrr",
1653 "VPSRLWYrr",
1654 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001655
1656def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1657 let Latency = 4;
1658 let NumMicroOps = 2;
1659 let ResourceCycles = [1,1];
1660}
1661def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1662
1663def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1664 let Latency = 4;
1665 let NumMicroOps = 2;
1666 let ResourceCycles = [1,1];
1667}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001668def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1669 "MMX_CVTPI2PDirr",
1670 "MMX_CVTPS2PIirr",
1671 "MMX_CVTTPD2PIirr",
1672 "MMX_CVTTPS2PIirr",
1673 "(V?)CVTDQ2PDrr",
1674 "(V?)CVTPD2DQrr",
1675 "(V?)CVTPD2PSrr",
1676 "VCVTPS2PHrr",
1677 "(V?)CVTSD2SSrr",
1678 "(V?)CVTSI642SDrr",
1679 "(V?)CVTSI2SDrr",
1680 "(V?)CVTSI2SSrr",
1681 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001682
1683def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1684 let Latency = 4;
1685 let NumMicroOps = 2;
1686 let ResourceCycles = [1,1];
1687}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001688def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001689
Craig Topperf846e2d2018-04-19 05:34:05 +00001690def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001691 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001692 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001693 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001694}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001695def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001696
Gadi Haberd76f7b82017-08-28 10:04:16 +00001697def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001698 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001699 let NumMicroOps = 3;
1700 let ResourceCycles = [2,1];
1701}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001702def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1703 "FICOM32m",
1704 "FICOMP16m",
1705 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001706
1707def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001708 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001709 let NumMicroOps = 3;
1710 let ResourceCycles = [1,1,1];
1711}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001712def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1713 "(V?)CVTSD2SIrm",
1714 "(V?)CVTSS2SI64rm",
1715 "(V?)CVTSS2SIrm",
1716 "(V?)CVTTSD2SI64rm",
1717 "(V?)CVTTSD2SIrm",
1718 "VCVTTSS2SI64rm",
1719 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001720
1721def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001722 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001723 let NumMicroOps = 3;
1724 let ResourceCycles = [1,1,1];
1725}
1726def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001727
1728def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1729 let Latency = 11;
1730 let NumMicroOps = 3;
1731 let ResourceCycles = [1,1,1];
1732}
1733def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001734
1735def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001736 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001737 let NumMicroOps = 3;
1738 let ResourceCycles = [1,1,1];
1739}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001740def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1741 "CVTPD2PSrm",
1742 "CVTTPD2DQrm",
1743 "MMX_CVTPD2PIirm",
1744 "MMX_CVTTPD2PIirm",
1745 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001746
1747def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1748 let Latency = 9;
1749 let NumMicroOps = 3;
1750 let ResourceCycles = [1,1,1];
1751}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001752def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1753 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001754
1755def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001756 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001757 let NumMicroOps = 3;
1758 let ResourceCycles = [1,1,1];
1759}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001760def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001761
1762def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001763 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001764 let NumMicroOps = 3;
1765 let ResourceCycles = [1,1,1];
1766}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001767def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1768 "VPBROADCASTBrm",
1769 "VPBROADCASTWYrm",
1770 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001771
1772def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1773 let Latency = 4;
1774 let NumMicroOps = 4;
1775 let ResourceCycles = [4];
1776}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001777def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001778
1779def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1780 let Latency = 4;
1781 let NumMicroOps = 4;
1782 let ResourceCycles = [1,3];
1783}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001784def: InstRW<[HWWriteResGroup82], (instrs VZEROUPPER)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001785
1786def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1787 let Latency = 4;
1788 let NumMicroOps = 4;
1789 let ResourceCycles = [1,1,2];
1790}
1791def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1792
1793def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001794 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001795 let NumMicroOps = 4;
1796 let ResourceCycles = [1,1,1,1];
1797}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001798def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1799 "VMASKMOVPS(Y?)mr",
1800 "VPMASKMOVD(Y?)mr",
1801 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001802
Gadi Haberd76f7b82017-08-28 10:04:16 +00001803def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001804 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805 let NumMicroOps = 4;
1806 let ResourceCycles = [1,1,1,1];
1807}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001808def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1809 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001810
1811def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001812 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001813 let NumMicroOps = 5;
1814 let ResourceCycles = [1,2,1,1];
1815}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001816def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1817 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001818
1819def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001820 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001821 let NumMicroOps = 6;
1822 let ResourceCycles = [1,1,4];
1823}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001824def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1825 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001826
1827def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001828 let Latency = 5;
1829 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001830 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001831}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001832def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001833
Gadi Haberd76f7b82017-08-28 10:04:16 +00001834def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001835 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001836 let NumMicroOps = 1;
1837 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001838}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001839def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1840 "(V?)MULPS(Y?)rr",
1841 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001842 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001843
Craig Topper8104f262018-04-02 05:33:28 +00001844def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001845 let Latency = 16;
1846 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001847 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001848}
1849def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1850
Craig Topper8104f262018-04-02 05:33:28 +00001851def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001852 let Latency = 18;
1853 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001854 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001855}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001856def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001857
1858def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1859 let Latency = 11;
1860 let NumMicroOps = 2;
1861 let ResourceCycles = [1,1];
1862}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001863def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001864 "(V?)PMADDUBSWrm",
1865 "(V?)PMADDWDrm",
1866 "(V?)PMULDQrm",
1867 "(V?)PMULHRSWrm",
1868 "(V?)PMULHUWrm",
1869 "(V?)PMULHWrm",
1870 "(V?)PMULLWrm",
1871 "(V?)PMULUDQrm",
1872 "(V?)PSADBWrm",
1873 "(V?)RCPPSm",
1874 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001875
1876def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1877 let Latency = 12;
1878 let NumMicroOps = 2;
1879 let ResourceCycles = [1,1];
1880}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001881def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F(32|64)m",
1882 "VPCMPGTQYrm",
1883 "VPMADDUBSWYrm",
1884 "VPMADDWDYrm",
1885 "VPMULDQYrm",
1886 "VPMULHRSWYrm",
1887 "VPMULHUWYrm",
1888 "VPMULHWYrm",
1889 "VPMULLWYrm",
1890 "VPMULUDQYrm",
1891 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001892
Gadi Haberd76f7b82017-08-28 10:04:16 +00001893def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001894 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001895 let NumMicroOps = 2;
1896 let ResourceCycles = [1,1];
1897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001898def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001899 "(V?)MULPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001900
1901def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1902 let Latency = 12;
1903 let NumMicroOps = 2;
1904 let ResourceCycles = [1,1];
1905}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001906def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001907 "VMULPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001908
1909def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
1910 let Latency = 10;
1911 let NumMicroOps = 2;
1912 let ResourceCycles = [1,1];
1913}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001914def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
Simon Pilgrim16299272018-04-24 14:47:11 +00001915 "(V?)MULSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001916
1917def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
1918 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001919 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001921}
Simon Pilgrim44278f62018-04-21 16:20:28 +00001922def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001923
Gadi Haberd76f7b82017-08-28 10:04:16 +00001924def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
1925 let Latency = 5;
1926 let NumMicroOps = 3;
1927 let ResourceCycles = [1,1,1];
1928}
1929def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
1930
1931def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001932 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001933 let NumMicroOps = 3;
1934 let ResourceCycles = [1,1,1];
1935}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001936def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937
Gadi Haberd76f7b82017-08-28 10:04:16 +00001938def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001939 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001940 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001941 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001942}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001943def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001944
Gadi Haberd76f7b82017-08-28 10:04:16 +00001945def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001946 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001947 let NumMicroOps = 4;
1948 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001949}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001950def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001951
Gadi Haberd76f7b82017-08-28 10:04:16 +00001952def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
1953 let Latency = 5;
1954 let NumMicroOps = 5;
1955 let ResourceCycles = [1,4];
1956}
1957def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
1958
1959def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
1960 let Latency = 5;
1961 let NumMicroOps = 5;
1962 let ResourceCycles = [1,4];
1963}
1964def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
1965
1966def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
1967 let Latency = 5;
1968 let NumMicroOps = 5;
1969 let ResourceCycles = [2,3];
1970}
Craig Topper13a16502018-03-19 00:56:09 +00001971def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001972
1973def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
1974 let Latency = 6;
1975 let NumMicroOps = 2;
1976 let ResourceCycles = [1,1];
1977}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001978def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
1979 "VCVTPD2DQYrr",
1980 "VCVTPD2PSYrr",
1981 "VCVTPS2PHYrr",
1982 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001983
1984def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001985 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001986 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001987 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001988}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001989def: InstRW<[HWWriteResGroup103], (instregex "(ADD|SUB|SUBR)_FI(16|32)m",
Craig Topper40d3b322018-03-22 21:55:20 +00001990 "VROUNDPDYm",
1991 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001992
Gadi Haber2cf601f2017-12-08 09:48:44 +00001993def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1994 let Latency = 12;
1995 let NumMicroOps = 3;
1996 let ResourceCycles = [2,1];
1997}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001998def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
1999 "(V?)ROUNDPSm",
2000 "(V?)ROUNDSDm",
2001 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002002
Gadi Haberd76f7b82017-08-28 10:04:16 +00002003def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002004 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002005 let NumMicroOps = 3;
2006 let ResourceCycles = [1,1,1];
2007}
2008def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2009
2010def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2011 let Latency = 6;
2012 let NumMicroOps = 4;
2013 let ResourceCycles = [1,1,2];
2014}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002015def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2016 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002017
2018def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002019 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002020 let NumMicroOps = 4;
2021 let ResourceCycles = [1,1,1,1];
2022}
2023def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2024
2025def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2026 let Latency = 6;
2027 let NumMicroOps = 4;
2028 let ResourceCycles = [1,1,1,1];
2029}
2030def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2031
2032def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2033 let Latency = 6;
2034 let NumMicroOps = 6;
2035 let ResourceCycles = [1,5];
2036}
2037def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2038
2039def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002040 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002041 let NumMicroOps = 6;
2042 let ResourceCycles = [1,1,1,1,2];
2043}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002044def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2045 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046
Gadi Haber2cf601f2017-12-08 09:48:44 +00002047def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2048 let Latency = 14;
2049 let NumMicroOps = 4;
2050 let ResourceCycles = [1,2,1];
2051}
2052def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2053
Gadi Haberd76f7b82017-08-28 10:04:16 +00002054def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2055 let Latency = 7;
2056 let NumMicroOps = 7;
2057 let ResourceCycles = [2,2,1,2];
2058}
Craig Topper2d451e72018-03-18 08:38:06 +00002059def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002060
2061def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002062 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002063 let NumMicroOps = 3;
2064 let ResourceCycles = [1,1,1];
2065}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002066def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002067
2068def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2069 let Latency = 9;
2070 let NumMicroOps = 3;
2071 let ResourceCycles = [1,1,1];
2072}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002073def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002074
2075def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002076 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002077 let NumMicroOps = 4;
2078 let ResourceCycles = [1,1,1,1];
2079}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002080def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002081
Gadi Haber2cf601f2017-12-08 09:48:44 +00002082def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2083 let Latency = 17;
2084 let NumMicroOps = 3;
2085 let ResourceCycles = [2,1];
2086}
2087def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2088
Gadi Haberd76f7b82017-08-28 10:04:16 +00002089def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002090 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002091 let NumMicroOps = 10;
2092 let ResourceCycles = [1,1,1,4,1,2];
2093}
Craig Topper13a16502018-03-19 00:56:09 +00002094def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002095
Craig Topper8104f262018-04-02 05:33:28 +00002096def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002097 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002098 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002099 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002100}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002101def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2102 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002103
Gadi Haberd76f7b82017-08-28 10:04:16 +00002104def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2105 let Latency = 11;
2106 let NumMicroOps = 3;
2107 let ResourceCycles = [2,1];
2108}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002109def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2110 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002111
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002113 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002114 let NumMicroOps = 4;
2115 let ResourceCycles = [2,1,1];
2116}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002117def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2118 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002119
2120def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2121 let Latency = 11;
2122 let NumMicroOps = 7;
2123 let ResourceCycles = [2,2,3];
2124}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002125def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2126 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002127
2128def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2129 let Latency = 11;
2130 let NumMicroOps = 9;
2131 let ResourceCycles = [1,4,1,3];
2132}
2133def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2134
2135def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2136 let Latency = 11;
2137 let NumMicroOps = 11;
2138 let ResourceCycles = [2,9];
2139}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002140def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002141
2142def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002143 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002144 let NumMicroOps = 14;
2145 let ResourceCycles = [1,1,1,4,2,5];
2146}
2147def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2148
Craig Topper8104f262018-04-02 05:33:28 +00002149def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002150 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002151 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002152 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002153}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002154def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2155 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002156
Craig Topper8104f262018-04-02 05:33:28 +00002157def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002158 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002159 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002160 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002161}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002162def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002163
2164def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002165 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002166 let NumMicroOps = 11;
2167 let ResourceCycles = [2,1,1,3,1,3];
2168}
Craig Topper13a16502018-03-19 00:56:09 +00002169def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002170
Craig Topper8104f262018-04-02 05:33:28 +00002171def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002172 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002173 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002174 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002175}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002176def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002177
Gadi Haberd76f7b82017-08-28 10:04:16 +00002178def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2179 let Latency = 14;
2180 let NumMicroOps = 4;
2181 let ResourceCycles = [2,1,1];
2182}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002183def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002184
2185def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002186 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002187 let NumMicroOps = 5;
2188 let ResourceCycles = [2,1,1,1];
2189}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002190def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002191
Gadi Haber2cf601f2017-12-08 09:48:44 +00002192def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2193 let Latency = 21;
2194 let NumMicroOps = 5;
2195 let ResourceCycles = [2,1,1,1];
2196}
2197def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2198
Gadi Haberd76f7b82017-08-28 10:04:16 +00002199def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2200 let Latency = 14;
2201 let NumMicroOps = 10;
2202 let ResourceCycles = [2,3,1,4];
2203}
2204def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2205
2206def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002207 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002208 let NumMicroOps = 15;
2209 let ResourceCycles = [1,14];
2210}
2211def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2212
2213def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002214 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002215 let NumMicroOps = 8;
2216 let ResourceCycles = [1,1,1,1,1,1,2];
2217}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002218def: InstRW<[HWWriteResGroup144], (instrs INSB, INSL, INSW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002219
2220def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2221 let Latency = 16;
2222 let NumMicroOps = 16;
2223 let ResourceCycles = [16];
2224}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002225def: InstRW<[HWWriteResGroup145], (instrs VZEROALL)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002226
2227def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002228 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002229 let NumMicroOps = 19;
2230 let ResourceCycles = [2,1,4,1,1,4,6];
2231}
2232def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2233
2234def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2235 let Latency = 17;
2236 let NumMicroOps = 15;
2237 let ResourceCycles = [2,1,2,4,2,4];
2238}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002239def: InstRW<[HWWriteResGroup147], (instrs XCH_F)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002240
Gadi Haberd76f7b82017-08-28 10:04:16 +00002241def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2242 let Latency = 18;
2243 let NumMicroOps = 8;
2244 let ResourceCycles = [1,1,1,5];
2245}
2246def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002247def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002248
Gadi Haberd76f7b82017-08-28 10:04:16 +00002249def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002250 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002251 let NumMicroOps = 19;
2252 let ResourceCycles = [3,1,15];
2253}
Craig Topper391c6f92017-12-10 01:24:08 +00002254def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002255
Gadi Haberd76f7b82017-08-28 10:04:16 +00002256def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2257 let Latency = 20;
2258 let NumMicroOps = 1;
2259 let ResourceCycles = [1];
2260}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002261def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2262 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002263 "DIV_FrST0")>;
2264
2265def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2266 let Latency = 20;
2267 let NumMicroOps = 1;
2268 let ResourceCycles = [1,14];
2269}
2270def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2271 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002272
2273def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002274 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002275 let NumMicroOps = 2;
2276 let ResourceCycles = [1,1];
2277}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002278def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F(32|64)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002279
Craig Topper8104f262018-04-02 05:33:28 +00002280def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002281 let Latency = 26;
2282 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002283 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002284}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002285def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002286
Craig Topper8104f262018-04-02 05:33:28 +00002287def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002288 let Latency = 21;
2289 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002290 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002291}
2292def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2293
Craig Topper8104f262018-04-02 05:33:28 +00002294def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002295 let Latency = 22;
2296 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002297 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002298}
2299def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2300
Craig Topper8104f262018-04-02 05:33:28 +00002301def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002302 let Latency = 25;
2303 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002304 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002305}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002306def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002307
2308def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2309 let Latency = 20;
2310 let NumMicroOps = 10;
2311 let ResourceCycles = [1,2,7];
2312}
2313def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2314
Craig Topper8104f262018-04-02 05:33:28 +00002315def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002316 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002317 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002318 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002319}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002320def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2321 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322
Craig Topper8104f262018-04-02 05:33:28 +00002323def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002324 let Latency = 21;
2325 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002326 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002327}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002328def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2329 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002330
Craig Topper8104f262018-04-02 05:33:28 +00002331def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002332 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002333 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002334 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002335}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002336def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2337 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002338
2339def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002340 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002341 let NumMicroOps = 3;
2342 let ResourceCycles = [1,1,1];
2343}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002344def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002345
2346def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2347 let Latency = 24;
2348 let NumMicroOps = 1;
2349 let ResourceCycles = [1];
2350}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002351def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2352 "DIVR_FST0r",
2353 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002354
2355def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002356 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002357 let NumMicroOps = 2;
2358 let ResourceCycles = [1,1];
2359}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002360def: InstRW<[HWWriteResGroup163], (instregex "DIV_F(32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002361
2362def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002363 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002364 let NumMicroOps = 27;
2365 let ResourceCycles = [1,5,1,1,19];
2366}
2367def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2368
2369def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002370 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002371 let NumMicroOps = 28;
2372 let ResourceCycles = [1,6,1,1,19];
2373}
Craig Topper2d451e72018-03-18 08:38:06 +00002374def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002375
2376def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002377 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002378 let NumMicroOps = 3;
2379 let ResourceCycles = [1,1,1];
2380}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002381def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002382
Gadi Haberd76f7b82017-08-28 10:04:16 +00002383def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002384 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002385 let NumMicroOps = 23;
2386 let ResourceCycles = [1,5,3,4,10];
2387}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002388def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2389 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002390
2391def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002392 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002393 let NumMicroOps = 23;
2394 let ResourceCycles = [1,5,2,1,4,10];
2395}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002396def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2397 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002398
2399def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2400 let Latency = 31;
2401 let NumMicroOps = 31;
2402 let ResourceCycles = [8,1,21,1];
2403}
2404def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2405
Craig Topper8104f262018-04-02 05:33:28 +00002406def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002407 let Latency = 35;
2408 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002409 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002410}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002411def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2412 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002413
Craig Topper8104f262018-04-02 05:33:28 +00002414def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002415 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002416 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002417 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002418}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002419def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2420 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002421
2422def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002423 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002424 let NumMicroOps = 18;
2425 let ResourceCycles = [1,1,2,3,1,1,1,8];
2426}
2427def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2428
2429def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2430 let Latency = 42;
2431 let NumMicroOps = 22;
2432 let ResourceCycles = [2,20];
2433}
Craig Topper2d451e72018-03-18 08:38:06 +00002434def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435
2436def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002437 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002438 let NumMicroOps = 64;
2439 let ResourceCycles = [2,2,8,1,10,2,39];
2440}
2441def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002442
2443def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002444 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002445 let NumMicroOps = 88;
2446 let ResourceCycles = [4,4,31,1,2,1,45];
2447}
Craig Topper2d451e72018-03-18 08:38:06 +00002448def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002449
2450def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002451 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002452 let NumMicroOps = 90;
2453 let ResourceCycles = [4,2,33,1,2,1,47];
2454}
Craig Topper2d451e72018-03-18 08:38:06 +00002455def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002456
2457def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2458 let Latency = 75;
2459 let NumMicroOps = 15;
2460 let ResourceCycles = [6,3,6];
2461}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002462def: InstRW<[HWWriteResGroup180], (instrs FNINIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002463
2464def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2465 let Latency = 98;
2466 let NumMicroOps = 32;
2467 let ResourceCycles = [7,7,3,3,1,11];
2468}
2469def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2470
2471def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2472 let Latency = 112;
2473 let NumMicroOps = 66;
2474 let ResourceCycles = [4,2,4,8,14,34];
2475}
2476def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2477
2478def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002479 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002480 let NumMicroOps = 100;
2481 let ResourceCycles = [9,9,11,8,1,11,21,30];
2482}
2483def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002484
Gadi Haber2cf601f2017-12-08 09:48:44 +00002485def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2486 let Latency = 26;
2487 let NumMicroOps = 12;
2488 let ResourceCycles = [2,2,1,3,2,2];
2489}
Craig Topper17a31182017-12-16 18:35:29 +00002490def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2491 VPGATHERDQrm,
2492 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002493
2494def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2495 let Latency = 24;
2496 let NumMicroOps = 22;
2497 let ResourceCycles = [5,3,4,1,5,4];
2498}
Craig Topper17a31182017-12-16 18:35:29 +00002499def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2500 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002501
2502def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2503 let Latency = 28;
2504 let NumMicroOps = 22;
2505 let ResourceCycles = [5,3,4,1,5,4];
2506}
Craig Topper17a31182017-12-16 18:35:29 +00002507def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002508
2509def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2510 let Latency = 25;
2511 let NumMicroOps = 22;
2512 let ResourceCycles = [5,3,4,1,5,4];
2513}
Craig Topper17a31182017-12-16 18:35:29 +00002514def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002515
2516def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2517 let Latency = 27;
2518 let NumMicroOps = 20;
2519 let ResourceCycles = [3,3,4,1,5,4];
2520}
Craig Topper17a31182017-12-16 18:35:29 +00002521def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2522 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002523
2524def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2525 let Latency = 27;
2526 let NumMicroOps = 34;
2527 let ResourceCycles = [5,3,8,1,9,8];
2528}
Craig Topper17a31182017-12-16 18:35:29 +00002529def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2530 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002531
2532def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2533 let Latency = 23;
2534 let NumMicroOps = 14;
2535 let ResourceCycles = [3,3,2,1,3,2];
2536}
Craig Topper17a31182017-12-16 18:35:29 +00002537def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2538 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002539
2540def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2541 let Latency = 28;
2542 let NumMicroOps = 15;
2543 let ResourceCycles = [3,3,2,1,4,2];
2544}
Craig Topper17a31182017-12-16 18:35:29 +00002545def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002546
2547def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2548 let Latency = 25;
2549 let NumMicroOps = 15;
2550 let ResourceCycles = [3,3,2,1,4,2];
2551}
Craig Topper17a31182017-12-16 18:35:29 +00002552def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2553 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002554
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002555} // SchedModel