blob: d21b9bdf2244e77a7126f5d9d4da21d3d7c98c2f [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell 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 Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
Simon Pilgrimf7d2a932018-04-24 13:21:41 +000015 // All x86 instructions are modeled as a single micro-op, and BW can decode 4
Gadi Haber323f2e12017-10-24 20:19:47 +000016 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000165defm : BWWriteResPair<WriteFMA, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFMAS, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add (Scalar).
167defm : BWWriteResPair<WriteFMAY, [BWPort01], 5, [1], 1, 6>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000168defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000169defm : BWWriteResPair<WriteFLogic, [BWPort5], 1, [1], 1, 5>; // Floating point and/or/xor logicals.
170defm : BWWriteResPair<WriteFLogicY, [BWPort5], 1, [1], 1, 6>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000171defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000172defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000174defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000175
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000176def : WriteRes<WriteCvtF2FSt, [BWPort1,BWPort4,BWPort237]> {
177 let Latency = 4;
178 let NumMicroOps = 3;
179 let ResourceCycles = [1,1,1];
180}
181
Gadi Haber323f2e12017-10-24 20:19:47 +0000182// FMA Scheduling helper class.
183// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
184
185// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000186def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
187def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
188def : WriteRes<WriteVecMove, [BWPort015]>;
189
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000190defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000191defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
193defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000194defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000196defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000197defm : BWWriteResPair<WriteBlend, [BWPort5], 1>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000198defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000199defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // Vector MPSAD.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000200defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
201defm : BWWriteResPair<WritePHMINPOS, [BWPort0], 5>; // Vector PHMINPOS.
Gadi Haber323f2e12017-10-24 20:19:47 +0000202
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000203// Vector insert/extract operations.
204def : WriteRes<WriteVecInsert, [BWPort5]> {
205 let Latency = 2;
206 let NumMicroOps = 2;
207 let ResourceCycles = [2];
208}
209def : WriteRes<WriteVecInsertLd, [BWPort5,BWPort23]> {
210 let Latency = 6;
211 let NumMicroOps = 2;
212}
213
214def : WriteRes<WriteVecExtract, [BWPort0,BWPort5]> {
215 let Latency = 2;
216 let NumMicroOps = 2;
217}
218def : WriteRes<WriteVecExtractSt, [BWPort4,BWPort5,BWPort237]> {
219 let Latency = 2;
220 let NumMicroOps = 3;
221}
222
Gadi Haber323f2e12017-10-24 20:19:47 +0000223// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000224defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
225defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
226defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000227
228// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229
Gadi Haber323f2e12017-10-24 20:19:47 +0000230// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000231def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232 let Latency = 11;
233 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000234 let ResourceCycles = [3];
235}
236def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237 let Latency = 16;
238 let NumMicroOps = 4;
239 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000240}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241
242// Packed Compare Explicit Length Strings, Return Mask
243def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
244 let Latency = 19;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
247}
248def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
249 let Latency = 24;
250 let NumMicroOps = 10;
251 let ResourceCycles = [4,3,1,1,1];
252}
253
254// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000255def : WriteRes<WritePCmpIStrI, [BWPort0]> {
256 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000257 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000258 let ResourceCycles = [3];
259}
260def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let Latency = 16;
262 let NumMicroOps = 4;
263 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000264}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265
266// Packed Compare Explicit Length Strings, Return Index
267def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
268 let Latency = 18;
269 let NumMicroOps = 8;
270 let ResourceCycles = [4,3,1];
271}
272def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
273 let Latency = 23;
274 let NumMicroOps = 9;
275 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000276}
277
Simon Pilgrima2f26782018-03-27 20:38:54 +0000278// MOVMSK Instructions.
279def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
280def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
281def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
282
Gadi Haber323f2e12017-10-24 20:19:47 +0000283// AES instructions.
284def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
285 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000286 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000287 let ResourceCycles = [1];
288}
289def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000290 let Latency = 12;
291 let NumMicroOps = 2;
292 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294
Gadi Haber323f2e12017-10-24 20:19:47 +0000295def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
296 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000297 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000298 let ResourceCycles = [2];
299}
300def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301 let Latency = 19;
302 let NumMicroOps = 3;
303 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305
306def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
307 let Latency = 29;
308 let NumMicroOps = 11;
309 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000310}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000311def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
312 let Latency = 33;
313 let NumMicroOps = 11;
314 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000315}
316
317// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000318defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Catch-all for expensive system instructions.
321def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
322
323// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000324defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000325defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000326defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000327defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000328defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000329
330// Old microcoded instructions that nobody use.
331def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
332
333// Fence instructions.
334def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
335
Craig Topper05242bf2018-04-21 18:07:36 +0000336// Load/store MXCSR.
337def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
338def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
339
Gadi Haber323f2e12017-10-24 20:19:47 +0000340// Nop, not very useful expect it provides a model for nops!
341def : WriteRes<WriteNop, []>;
342
343////////////////////////////////////////////////////////////////////////////////
344// Horizontal add/sub instructions.
345////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000346
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000347defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
348defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000349
350// Remaining instrs.
351
352def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
353 let Latency = 1;
354 let NumMicroOps = 1;
355 let ResourceCycles = [1];
356}
Craig Topper5a69a002018-03-21 06:28:42 +0000357def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
358 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000359 "(V?)MOVPDI2DIrr",
360 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000361 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000362 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000363 "VTESTPD(Y?)rr",
364 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000365
366def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
367 let Latency = 1;
368 let NumMicroOps = 1;
369 let ResourceCycles = [1];
370}
Craig Topper5a69a002018-03-21 06:28:42 +0000371def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
372 "COM_FST0r",
373 "UCOM_FPr",
374 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000375
376def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
377 let Latency = 1;
378 let NumMicroOps = 1;
379 let ResourceCycles = [1];
380}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000381def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000382 "MMX_MOVD64to64rr",
383 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000384 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000385 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000386 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000387 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000388
389def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
390 let Latency = 1;
391 let NumMicroOps = 1;
392 let ResourceCycles = [1];
393}
394def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
395
396def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
397 let Latency = 1;
398 let NumMicroOps = 1;
399 let ResourceCycles = [1];
400}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000401def: InstRW<[BWWriteResGroup5], (instrs FINCSTP, FNOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000402
403def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
404 let Latency = 1;
405 let NumMicroOps = 1;
406 let ResourceCycles = [1];
407}
Craig Topperfbe31322018-04-05 21:56:19 +0000408def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000409def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
410 "ADC(16|32|64)i",
411 "ADC(8|16|32|64)rr",
412 "ADCX(32|64)rr",
413 "ADOX(32|64)rr",
414 "BT(16|32|64)ri8",
415 "BT(16|32|64)rr",
416 "BTC(16|32|64)ri8",
417 "BTC(16|32|64)rr",
418 "BTR(16|32|64)ri8",
419 "BTR(16|32|64)rr",
420 "BTS(16|32|64)ri8",
421 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000422 "SBB(16|32|64)ri",
423 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000424 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000425
426def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
427 let Latency = 1;
428 let NumMicroOps = 1;
429 let ResourceCycles = [1];
430}
Craig Topper5a69a002018-03-21 06:28:42 +0000431def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
432 "BLSI(32|64)rr",
433 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000434 "BLSR(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000435
436def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
437 let Latency = 1;
438 let NumMicroOps = 1;
439 let ResourceCycles = [1];
440}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000441def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000442 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000443
444def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
445 let Latency = 1;
446 let NumMicroOps = 1;
447 let ResourceCycles = [1];
448}
Craig Topperdfccafe2018-04-18 06:41:25 +0000449def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000450 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000451 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000452 "SGDT64m",
453 "SIDT64m",
454 "SLDT64m",
455 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000456 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000457 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000458
459def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
460 let Latency = 1;
461 let NumMicroOps = 2;
462 let ResourceCycles = [1,1];
463}
Craig Topper5a69a002018-03-21 06:28:42 +0000464def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
465 "MMX_MOVD64from64rm",
466 "MMX_MOVD64mr",
467 "MMX_MOVNTQmr",
468 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000469 "MOVNTI_64mr",
470 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000471 "ST_FP32m",
472 "ST_FP64m",
473 "ST_FP80m",
474 "VEXTRACTF128mr",
475 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000476 "(V?)MOVAPD(Y?)mr",
477 "(V?)MOVAPS(Y?)mr",
478 "(V?)MOVDQA(Y?)mr",
479 "(V?)MOVDQU(Y?)mr",
480 "(V?)MOVHPDmr",
481 "(V?)MOVHPSmr",
482 "(V?)MOVLPDmr",
483 "(V?)MOVLPSmr",
484 "(V?)MOVNTDQ(V?)mr",
485 "(V?)MOVNTPD(V?)mr",
486 "(V?)MOVNTPS(V?)mr",
487 "(V?)MOVPDI2DImr",
488 "(V?)MOVPQI2QImr",
489 "(V?)MOVPQIto64mr",
490 "(V?)MOVSDmr",
491 "(V?)MOVSSmr",
492 "(V?)MOVUPD(Y?)mr",
493 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000494
Gadi Haber323f2e12017-10-24 20:19:47 +0000495def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
496 let Latency = 2;
497 let NumMicroOps = 2;
498 let ResourceCycles = [2];
499}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000500def: InstRW<[BWWriteResGroup12], (instrs FDECSTP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000501
502def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
503 let Latency = 2;
504 let NumMicroOps = 2;
505 let ResourceCycles = [2];
506}
Craig Topper5a69a002018-03-21 06:28:42 +0000507def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
508 "ROL(8|16|32|64)ri",
509 "ROR(8|16|32|64)r1",
510 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000511
512def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
513 let Latency = 2;
514 let NumMicroOps = 2;
515 let ResourceCycles = [2];
516}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000517def: InstRW<[BWWriteResGroup14], (instrs LFENCE,
518 MFENCE,
519 WAIT,
520 XGETBV)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000521
522def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
523 let Latency = 2;
524 let NumMicroOps = 2;
525 let ResourceCycles = [1,1];
526}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000527def: InstRW<[BWWriteResGroup15], (instregex "VCVTPH2PS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000528 "(V?)CVTPS2PDrr",
529 "(V?)CVTSS2SDrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000530 "(V?)PSLLDrr",
531 "(V?)PSLLQrr",
532 "(V?)PSLLWrr",
533 "(V?)PSRADrr",
534 "(V?)PSRAWrr",
535 "(V?)PSRLDrr",
536 "(V?)PSRLQrr",
537 "(V?)PSRLWrr",
538 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000539
540def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
541 let Latency = 2;
542 let NumMicroOps = 2;
543 let ResourceCycles = [1,1];
544}
545def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
546
547def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
548 let Latency = 2;
549 let NumMicroOps = 2;
550 let ResourceCycles = [1,1];
551}
552def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
553
554def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
555 let Latency = 2;
556 let NumMicroOps = 2;
557 let ResourceCycles = [1,1];
558}
559def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
560
561def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
562 let Latency = 2;
563 let NumMicroOps = 2;
564 let ResourceCycles = [1,1];
565}
Craig Topper498875f2018-04-04 17:54:19 +0000566def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
567
568def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
569 let Latency = 1;
570 let NumMicroOps = 1;
571 let ResourceCycles = [1];
572}
573def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000574
575def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
576 let Latency = 2;
577 let NumMicroOps = 2;
578 let ResourceCycles = [1,1];
579}
Craig Topper2d451e72018-03-18 08:38:06 +0000580def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000581def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000582def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
583 "ADC8ri",
584 "CMOV(A|BE)(16|32|64)rr",
585 "SBB8i8",
586 "SBB8ri",
587 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000588
Gadi Haber323f2e12017-10-24 20:19:47 +0000589def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
590 let Latency = 2;
591 let NumMicroOps = 3;
592 let ResourceCycles = [1,1,1];
593}
594def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
595
Gadi Haber323f2e12017-10-24 20:19:47 +0000596def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
597 let Latency = 2;
598 let NumMicroOps = 3;
599 let ResourceCycles = [1,1,1];
600}
601def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
602
603def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
604 let Latency = 2;
605 let NumMicroOps = 3;
606 let ResourceCycles = [1,1,1];
607}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000608def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r,
609 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000610def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000611 "PUSH64i8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000612
Gadi Haber323f2e12017-10-24 20:19:47 +0000613def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
614 let Latency = 3;
615 let NumMicroOps = 1;
616 let ResourceCycles = [1];
617}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000618def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000619 "PDEP(32|64)rr",
620 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000621 "SHLD(16|32|64)rri8",
622 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000623 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000624
625def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000626 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000627 let NumMicroOps = 2;
628 let ResourceCycles = [1,1];
629}
Clement Courbet327fac42018-03-07 08:14:02 +0000630def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000631
632def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
633 let Latency = 3;
634 let NumMicroOps = 1;
635 let ResourceCycles = [1];
636}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000637def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
638 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "VPMOVSXBDYrr",
640 "VPMOVSXBQYrr",
641 "VPMOVSXBWYrr",
642 "VPMOVSXDQYrr",
643 "VPMOVSXWDYrr",
644 "VPMOVSXWQYrr",
645 "VPMOVZXBDYrr",
646 "VPMOVZXBQYrr",
647 "VPMOVZXBWYrr",
648 "VPMOVZXDQYrr",
649 "VPMOVZXWDYrr",
650 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000651
652def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
653 let Latency = 3;
654 let NumMicroOps = 1;
655 let ResourceCycles = [1];
656}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000657def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
658 "(V?)MULPS(Y?)rr",
659 "(V?)MULSDrr",
660 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000661
662def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000663 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000664 let NumMicroOps = 3;
665 let ResourceCycles = [3];
666}
Craig Topperb5f26592018-04-19 18:00:17 +0000667def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
668 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
669 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000670
671def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
672 let Latency = 3;
673 let NumMicroOps = 3;
674 let ResourceCycles = [2,1];
675}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000676def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
677 "VPSRAVD(Y?)rr",
678 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000679
Gadi Haber323f2e12017-10-24 20:19:47 +0000680def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
681 let Latency = 3;
682 let NumMicroOps = 3;
683 let ResourceCycles = [2,1];
684}
Craig Topper5a69a002018-03-21 06:28:42 +0000685def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
686 "MMX_PACKSSWBirr",
687 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000688
689def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
690 let Latency = 3;
691 let NumMicroOps = 3;
692 let ResourceCycles = [1,2];
693}
694def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
695
696def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
697 let Latency = 3;
698 let NumMicroOps = 3;
699 let ResourceCycles = [1,2];
700}
Craig Topper5a69a002018-03-21 06:28:42 +0000701def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
702 "RCL(8|16|32|64)ri",
703 "RCR(8|16|32|64)r1",
704 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000705
706def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
707 let Latency = 3;
708 let NumMicroOps = 3;
709 let ResourceCycles = [2,1];
710}
Craig Topper5a69a002018-03-21 06:28:42 +0000711def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
712 "ROR(8|16|32|64)rCL",
713 "SAR(8|16|32|64)rCL",
714 "SHL(8|16|32|64)rCL",
715 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000716
717def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
718 let Latency = 3;
719 let NumMicroOps = 4;
720 let ResourceCycles = [1,1,1,1];
721}
722def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
723
724def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
725 let Latency = 3;
726 let NumMicroOps = 4;
727 let ResourceCycles = [1,1,1,1];
728}
Craig Topper5a69a002018-03-21 06:28:42 +0000729def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
730 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000731
732def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
733 let Latency = 4;
734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000737def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
738 "(V?)CVTSD2SIrr",
739 "(V?)CVTSS2SI64rr",
740 "(V?)CVTSS2SIrr",
741 "(V?)CVTTSD2SI64rr",
742 "(V?)CVTTSD2SIrr",
743 "(V?)CVTTSS2SI64rr",
744 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000745
746def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
747 let Latency = 4;
748 let NumMicroOps = 2;
749 let ResourceCycles = [1,1];
750}
Craig Topper5a69a002018-03-21 06:28:42 +0000751def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
752 "VPSLLDYrr",
753 "VPSLLQYrr",
754 "VPSLLWYrr",
755 "VPSRADYrr",
756 "VPSRAWYrr",
757 "VPSRLDYrr",
758 "VPSRLQYrr",
759 "VPSRLWYrr",
760 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000761
762def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
763 let Latency = 4;
764 let NumMicroOps = 2;
765 let ResourceCycles = [1,1];
766}
767def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
768
769def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
770 let Latency = 4;
771 let NumMicroOps = 2;
772 let ResourceCycles = [1,1];
773}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000774def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000775def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000776 "MMX_CVTPI2PDirr",
777 "MMX_CVTPS2PIirr",
778 "MMX_CVTTPD2PIirr",
779 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000780 "(V?)CVTDQ2PDrr",
781 "(V?)CVTPD2DQrr",
782 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000783 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000784 "(V?)CVTSD2SSrr",
785 "(V?)CVTSI642SDrr",
786 "(V?)CVTSI2SDrr",
787 "(V?)CVTSI2SSrr",
788 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000789
790def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
791 let Latency = 4;
792 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000793 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000794}
Craig Topper5a69a002018-03-21 06:28:42 +0000795def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000796
797def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
798 let Latency = 4;
799 let NumMicroOps = 3;
800 let ResourceCycles = [1,1,1];
801}
802def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
803
804def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
805 let Latency = 4;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,1,1];
808}
Craig Topper5a69a002018-03-21 06:28:42 +0000809def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
810 "ISTT_FP32m",
811 "ISTT_FP64m",
812 "IST_F16m",
813 "IST_F32m",
814 "IST_FP16m",
815 "IST_FP32m",
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000816 "IST_FP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000817
818def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
819 let Latency = 4;
820 let NumMicroOps = 4;
821 let ResourceCycles = [4];
822}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000823def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000824
825def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
826 let Latency = 4;
827 let NumMicroOps = 4;
828 let ResourceCycles = [1,3];
829}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000830def: InstRW<[BWWriteResGroup46], (instrs VZEROUPPER)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000831
832def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
833 let Latency = 5;
834 let NumMicroOps = 1;
835 let ResourceCycles = [1];
836}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000837def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000838
Gadi Haber323f2e12017-10-24 20:19:47 +0000839def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
840 let Latency = 5;
841 let NumMicroOps = 1;
842 let ResourceCycles = [1];
843}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000844def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000845 "MOVSX(16|32|64)rm32",
846 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000847 "MOVZX(16|32|64)rm16",
848 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000849 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000850 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000851 "(V?)MOVSHDUPrm",
852 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000853 "VPBROADCASTDrm",
854 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000855
856def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
857 let Latency = 5;
858 let NumMicroOps = 3;
859 let ResourceCycles = [1,2];
860}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000861def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000862
863def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
864 let Latency = 5;
865 let NumMicroOps = 3;
866 let ResourceCycles = [1,1,1];
867}
868def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
869
870def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000871 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000872 let NumMicroOps = 3;
873 let ResourceCycles = [1,1,1];
874}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000875def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000876
877def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
878 let Latency = 5;
879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,1,1];
881}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000882def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
883 "VMASKMOVPS(Y?)mr",
884 "VPMASKMOVD(Y?)mr",
885 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000886
887def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
888 let Latency = 5;
889 let NumMicroOps = 5;
890 let ResourceCycles = [1,4];
891}
892def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
893
894def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
895 let Latency = 5;
896 let NumMicroOps = 5;
897 let ResourceCycles = [1,4];
898}
899def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
900
901def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
902 let Latency = 5;
903 let NumMicroOps = 5;
904 let ResourceCycles = [2,3];
905}
Craig Topper5a69a002018-03-21 06:28:42 +0000906def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000907
908def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
909 let Latency = 5;
910 let NumMicroOps = 6;
911 let ResourceCycles = [1,1,4];
912}
Craig Topper5a69a002018-03-21 06:28:42 +0000913def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000914
915def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
916 let Latency = 6;
917 let NumMicroOps = 1;
918 let ResourceCycles = [1];
919}
Craig Topper5a69a002018-03-21 06:28:42 +0000920def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
921 "LD_F64m",
922 "LD_F80m",
923 "VBROADCASTF128",
924 "VBROADCASTI128",
925 "VBROADCASTSDYrm",
926 "VBROADCASTSSYrm",
927 "VLDDQUYrm",
928 "VMOVAPDYrm",
929 "VMOVAPSYrm",
930 "VMOVDDUPYrm",
931 "VMOVDQAYrm",
932 "VMOVDQUYrm",
933 "VMOVNTDQAYrm",
934 "VMOVSHDUPYrm",
935 "VMOVSLDUPYrm",
936 "VMOVUPDYrm",
937 "VMOVUPSYrm",
938 "VPBROADCASTDYrm",
939 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000940 "(V?)ROUNDPD(Y?)r",
941 "(V?)ROUNDPS(Y?)r",
942 "(V?)ROUNDSDr",
943 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000944
945def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
946 let Latency = 6;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000950def: InstRW<[BWWriteResGroup59], (instregex "VCVTPH2PS(Y?)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000951 "(V?)CVTPS2PDrm",
952 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000953 "VPSLLVQrm",
954 "VPSRLVQrm",
955 "VTESTPDrm",
956 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000957
958def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
959 let Latency = 6;
960 let NumMicroOps = 2;
961 let ResourceCycles = [1,1];
962}
Craig Topper5a69a002018-03-21 06:28:42 +0000963def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
964 "VCVTPD2DQYrr",
965 "VCVTPD2PSYrr",
966 "VCVTPS2PHYrr",
967 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000968
Gadi Haber323f2e12017-10-24 20:19:47 +0000969def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
970 let Latency = 6;
971 let NumMicroOps = 2;
972 let ResourceCycles = [1,1];
973}
Craig Topper5a69a002018-03-21 06:28:42 +0000974def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
975 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000976
977def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
978 let Latency = 6;
979 let NumMicroOps = 2;
980 let ResourceCycles = [1,1];
981}
Craig Topperdfccafe2018-04-18 06:41:25 +0000982def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +0000983def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
984 ADCX32rm, ADCX64rm,
985 ADOX32rm, ADOX64rm,
986 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000987
988def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
989 let Latency = 6;
990 let NumMicroOps = 2;
991 let ResourceCycles = [1,1];
992}
Craig Topper5a69a002018-03-21 06:28:42 +0000993def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
994 "BLSI(32|64)rm",
995 "BLSMSK(32|64)rm",
996 "BLSR(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000997 "MOVBE(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000998
999def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1000 let Latency = 6;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001004def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001005 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001006 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001007
1008def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1009 let Latency = 6;
1010 let NumMicroOps = 2;
1011 let ResourceCycles = [1,1];
1012}
Craig Topper2d451e72018-03-18 08:38:06 +00001013def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001014def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001015
1016def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1017 let Latency = 6;
1018 let NumMicroOps = 4;
1019 let ResourceCycles = [1,1,2];
1020}
Craig Topper5a69a002018-03-21 06:28:42 +00001021def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1022 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001023
1024def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1025 let Latency = 6;
1026 let NumMicroOps = 4;
1027 let ResourceCycles = [1,1,1,1];
1028}
1029def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1030
1031def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1032 let Latency = 6;
1033 let NumMicroOps = 4;
1034 let ResourceCycles = [1,1,1,1];
1035}
Craig Topper5a69a002018-03-21 06:28:42 +00001036def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1037 "BTR(16|32|64)mi8",
1038 "BTS(16|32|64)mi8",
1039 "SAR(8|16|32|64)m1",
1040 "SAR(8|16|32|64)mi",
1041 "SHL(8|16|32|64)m1",
1042 "SHL(8|16|32|64)mi",
1043 "SHR(8|16|32|64)m1",
1044 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001045
1046def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1047 let Latency = 6;
1048 let NumMicroOps = 4;
1049 let ResourceCycles = [1,1,1,1];
1050}
Craig Topperf0d04262018-04-06 16:16:48 +00001051def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1052 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001053
1054def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1055 let Latency = 6;
1056 let NumMicroOps = 6;
1057 let ResourceCycles = [1,5];
1058}
1059def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1060
Gadi Haber323f2e12017-10-24 20:19:47 +00001061def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1062 let Latency = 7;
1063 let NumMicroOps = 2;
1064 let ResourceCycles = [1,1];
1065}
Craig Topper5a69a002018-03-21 06:28:42 +00001066def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1067 "VPSLLQYrm",
1068 "VPSLLVQYrm",
1069 "VPSLLWYrm",
1070 "VPSRADYrm",
1071 "VPSRAWYrm",
1072 "VPSRLDYrm",
1073 "VPSRLQYrm",
1074 "VPSRLVQYrm",
1075 "VPSRLWYrm",
1076 "VTESTPDYrm",
1077 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001078
1079def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1080 let Latency = 7;
1081 let NumMicroOps = 2;
1082 let ResourceCycles = [1,1];
1083}
Craig Topper5a69a002018-03-21 06:28:42 +00001084def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1085 "FCOM64m",
1086 "FCOMP32m",
1087 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001088
1089def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1090 let Latency = 7;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001094def: InstRW<[BWWriteResGroup75], (instregex "VPACKSSDWYrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001095 "VPACKSSWBYrm",
1096 "VPACKUSDWYrm",
1097 "VPACKUSWBYrm",
1098 "VPALIGNRYrmi",
1099 "VPBLENDWYrmi",
1100 "VPERMILPDYmi",
1101 "VPERMILPDYrm",
1102 "VPERMILPSYmi",
1103 "VPERMILPSYrm",
1104 "VPSHUFBYrm",
1105 "VPSHUFDYmi",
1106 "VPSHUFHWYmi",
1107 "VPSHUFLWYmi",
1108 "VPUNPCKHBWYrm",
1109 "VPUNPCKHDQYrm",
1110 "VPUNPCKHQDQYrm",
1111 "VPUNPCKHWDYrm",
1112 "VPUNPCKLBWYrm",
1113 "VPUNPCKLDQYrm",
1114 "VPUNPCKLQDQYrm",
1115 "VPUNPCKLWDYrm",
1116 "VSHUFPDYrmi",
1117 "VSHUFPSYrmi",
1118 "VUNPCKHPDYrm",
1119 "VUNPCKHPSYrm",
1120 "VUNPCKLPDYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001121 "VUNPCKLPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001122
1123def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1124 let Latency = 7;
1125 let NumMicroOps = 2;
1126 let ResourceCycles = [1,1];
1127}
Craig Topper5a69a002018-03-21 06:28:42 +00001128def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1129 "VPABSDYrm",
1130 "VPABSWYrm",
1131 "VPADDBYrm",
1132 "VPADDDYrm",
1133 "VPADDQYrm",
1134 "VPADDSBYrm",
1135 "VPADDSWYrm",
1136 "VPADDUSBYrm",
1137 "VPADDUSWYrm",
1138 "VPADDWYrm",
1139 "VPAVGBYrm",
1140 "VPAVGWYrm",
1141 "VPCMPEQBYrm",
1142 "VPCMPEQDYrm",
1143 "VPCMPEQQYrm",
1144 "VPCMPEQWYrm",
1145 "VPCMPGTBYrm",
1146 "VPCMPGTDYrm",
1147 "VPCMPGTWYrm",
1148 "VPMAXSBYrm",
1149 "VPMAXSDYrm",
1150 "VPMAXSWYrm",
1151 "VPMAXUBYrm",
1152 "VPMAXUDYrm",
1153 "VPMAXUWYrm",
1154 "VPMINSBYrm",
1155 "VPMINSDYrm",
1156 "VPMINSWYrm",
1157 "VPMINUBYrm",
1158 "VPMINUDYrm",
1159 "VPMINUWYrm",
1160 "VPSIGNBYrm",
1161 "VPSIGNDYrm",
1162 "VPSIGNWYrm",
1163 "VPSUBBYrm",
1164 "VPSUBDYrm",
1165 "VPSUBQYrm",
1166 "VPSUBSBYrm",
1167 "VPSUBSWYrm",
1168 "VPSUBUSBYrm",
1169 "VPSUBUSWYrm",
1170 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001171
1172def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1173 let Latency = 7;
1174 let NumMicroOps = 2;
1175 let ResourceCycles = [1,1];
1176}
Craig Topper5a69a002018-03-21 06:28:42 +00001177def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1178 "VBLENDPSYrmi",
1179 "VPANDNYrm",
1180 "VPANDYrm",
1181 "VPBLENDDYrmi",
1182 "VPORYrm",
1183 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001184
Gadi Haber323f2e12017-10-24 20:19:47 +00001185def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1186 let Latency = 7;
1187 let NumMicroOps = 3;
1188 let ResourceCycles = [2,1];
1189}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001190def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001191 "MMX_PACKSSWBirm",
1192 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001193 "VMASKMOVPDrm",
1194 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001195 "VPMASKMOVDrm",
1196 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001197
1198def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1199 let Latency = 7;
1200 let NumMicroOps = 3;
1201 let ResourceCycles = [1,2];
1202}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001203def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1204 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001205
1206def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1207 let Latency = 7;
1208 let NumMicroOps = 3;
1209 let ResourceCycles = [1,1,1];
1210}
Craig Topper5a69a002018-03-21 06:28:42 +00001211def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1212 "PSLLQrm",
1213 "PSLLWrm",
1214 "PSRADrm",
1215 "PSRAWrm",
1216 "PSRLDrm",
1217 "PSRLQrm",
1218 "PSRLWrm",
1219 "PTESTrm",
1220 "VPSLLDrm",
1221 "VPSLLQrm",
1222 "VPSLLWrm",
1223 "VPSRADrm",
1224 "VPSRAWrm",
1225 "VPSRLDrm",
1226 "VPSRLQrm",
1227 "VPSRLWrm",
1228 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001229
1230def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1231 let Latency = 7;
1232 let NumMicroOps = 3;
1233 let ResourceCycles = [1,1,1];
1234}
1235def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1236
Gadi Haber323f2e12017-10-24 20:19:47 +00001237def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1238 let Latency = 7;
1239 let NumMicroOps = 3;
1240 let ResourceCycles = [1,1,1];
1241}
Craig Topper5a69a002018-03-21 06:28:42 +00001242def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1243 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001244
Gadi Haber323f2e12017-10-24 20:19:47 +00001245def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1246 let Latency = 7;
1247 let NumMicroOps = 3;
1248 let ResourceCycles = [1,1,1];
1249}
Craig Topperf4cd9082018-01-19 05:47:32 +00001250def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001251
1252def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1253 let Latency = 7;
1254 let NumMicroOps = 5;
1255 let ResourceCycles = [1,1,1,2];
1256}
Craig Topper5a69a002018-03-21 06:28:42 +00001257def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1258 "ROL(8|16|32|64)mi",
1259 "ROR(8|16|32|64)m1",
1260 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001261
1262def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1263 let Latency = 7;
1264 let NumMicroOps = 5;
1265 let ResourceCycles = [1,1,1,2];
1266}
Craig Topper5a69a002018-03-21 06:28:42 +00001267def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001268
1269def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1270 let Latency = 7;
1271 let NumMicroOps = 5;
1272 let ResourceCycles = [1,1,1,1,1];
1273}
Craig Topper5a69a002018-03-21 06:28:42 +00001274def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1275 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001276
1277def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1278 let Latency = 7;
1279 let NumMicroOps = 7;
1280 let ResourceCycles = [2,2,1,2];
1281}
Craig Topper2d451e72018-03-18 08:38:06 +00001282def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001283
1284def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1285 let Latency = 8;
1286 let NumMicroOps = 2;
1287 let ResourceCycles = [1,1];
1288}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001289def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001290 "PDEP(32|64)rm",
1291 "PEXT(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001292 "(V?)CVTDQ2PSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001293
1294def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001295 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001296 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001297 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001298}
Craig Topperf846e2d2018-04-19 05:34:05 +00001299def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001300
Craig Topperf846e2d2018-04-19 05:34:05 +00001301def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1302 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001303 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001304 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001305}
Craig Topper5a69a002018-03-21 06:28:42 +00001306def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001307
Gadi Haber323f2e12017-10-24 20:19:47 +00001308def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1309 let Latency = 8;
1310 let NumMicroOps = 2;
1311 let ResourceCycles = [1,1];
1312}
Craig Topper5a69a002018-03-21 06:28:42 +00001313def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1314 "VPMOVSXBQYrm",
1315 "VPMOVSXBWYrm",
1316 "VPMOVSXDQYrm",
1317 "VPMOVSXWDYrm",
1318 "VPMOVSXWQYrm",
1319 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001320
1321def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1322 let Latency = 8;
1323 let NumMicroOps = 2;
1324 let ResourceCycles = [1,1];
1325}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001326def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1327 "(V?)MULPSrm",
1328 "(V?)MULSDrm",
1329 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001330
1331def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1332 let Latency = 8;
1333 let NumMicroOps = 3;
1334 let ResourceCycles = [2,1];
1335}
Craig Topper5a69a002018-03-21 06:28:42 +00001336def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1337 "VBLENDVPSYrm",
1338 "VMASKMOVPDYrm",
1339 "VMASKMOVPSYrm",
1340 "VPBLENDVBYrm",
1341 "VPMASKMOVDYrm",
1342 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001343
1344def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1345 let Latency = 8;
1346 let NumMicroOps = 4;
1347 let ResourceCycles = [2,1,1];
1348}
Craig Topper5a69a002018-03-21 06:28:42 +00001349def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1350 "VPSRAVDrm",
1351 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001352
Gadi Haber323f2e12017-10-24 20:19:47 +00001353def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1354 let Latency = 8;
1355 let NumMicroOps = 5;
1356 let ResourceCycles = [1,1,1,2];
1357}
Craig Topper5a69a002018-03-21 06:28:42 +00001358def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1359 "RCL(8|16|32|64)mi",
1360 "RCR(8|16|32|64)m1",
1361 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001362
1363def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1364 let Latency = 8;
1365 let NumMicroOps = 5;
1366 let ResourceCycles = [1,1,2,1];
1367}
Craig Topper13a16502018-03-19 00:56:09 +00001368def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001369
1370def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1371 let Latency = 8;
1372 let NumMicroOps = 6;
1373 let ResourceCycles = [1,1,1,3];
1374}
Craig Topper9f834812018-04-01 21:54:24 +00001375def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001376
1377def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1378 let Latency = 8;
1379 let NumMicroOps = 6;
1380 let ResourceCycles = [1,1,1,2,1];
1381}
Craig Topper9f834812018-04-01 21:54:24 +00001382def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001383 "CMPXCHG(8|16|32|64)rm",
1384 "ROL(8|16|32|64)mCL",
1385 "SAR(8|16|32|64)mCL",
1386 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001387 "SHL(8|16|32|64)mCL",
1388 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001389def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1390 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001391
1392def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1393 let Latency = 9;
1394 let NumMicroOps = 2;
1395 let ResourceCycles = [1,1];
1396}
Craig Topper5a69a002018-03-21 06:28:42 +00001397def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1398 "ADD_F64m",
1399 "ILD_F16m",
1400 "ILD_F32m",
1401 "ILD_F64m",
1402 "SUBR_F32m",
1403 "SUBR_F64m",
1404 "SUB_F32m",
1405 "SUB_F64m",
1406 "VADDPDYrm",
1407 "VADDPSYrm",
1408 "VADDSUBPDYrm",
1409 "VADDSUBPSYrm",
1410 "VCMPPDYrmi",
1411 "VCMPPSYrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001412 "VCVTPS2DQYrm",
1413 "VCVTTPS2DQYrm",
1414 "VMAX(C?)PDYrm",
1415 "VMAX(C?)PSYrm",
1416 "VMIN(C?)PDYrm",
1417 "VMIN(C?)PSYrm",
1418 "VSUBPDYrm",
1419 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001420
1421def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1422 let Latency = 9;
1423 let NumMicroOps = 2;
1424 let ResourceCycles = [1,1];
1425}
Craig Topper5a69a002018-03-21 06:28:42 +00001426def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1427 "VPERM2I128rm",
1428 "VPERMDYrm",
1429 "VPERMPDYmi",
1430 "VPERMPSYrm",
1431 "VPERMQYmi",
1432 "VPMOVZXBDYrm",
1433 "VPMOVZXBQYrm",
1434 "VPMOVZXBWYrm",
1435 "VPMOVZXDQYrm",
1436 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001437
1438def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1439 let Latency = 9;
1440 let NumMicroOps = 2;
1441 let ResourceCycles = [1,1];
1442}
Craig Topper5a69a002018-03-21 06:28:42 +00001443def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1444 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001445
1446def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1447 let Latency = 9;
1448 let NumMicroOps = 3;
1449 let ResourceCycles = [1,1,1];
1450}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001451def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001452
1453def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1454 let Latency = 9;
1455 let NumMicroOps = 3;
1456 let ResourceCycles = [1,1,1];
1457}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001458def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1459 "(V?)CVTSD2SIrm",
1460 "(V?)CVTSS2SI64rm",
1461 "(V?)CVTSS2SIrm",
1462 "(V?)CVTTSD2SI64rm",
1463 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001464 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001465 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001466
1467def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1468 let Latency = 9;
1469 let NumMicroOps = 3;
1470 let ResourceCycles = [1,1,1];
1471}
1472def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1473
1474def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1475 let Latency = 9;
1476 let NumMicroOps = 3;
1477 let ResourceCycles = [1,1,1];
1478}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001479def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001480def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001481 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001482 "CVTTPD2DQrm",
1483 "MMX_CVTPD2PIirm",
1484 "MMX_CVTPI2PDirm",
1485 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001486 "(V?)CVTDQ2PDrm",
1487 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001488
1489def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1490 let Latency = 9;
1491 let NumMicroOps = 3;
1492 let ResourceCycles = [1,1,1];
1493}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001494def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1495 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001496
1497def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1498 let Latency = 9;
1499 let NumMicroOps = 4;
1500 let ResourceCycles = [2,1,1];
1501}
Craig Topper5a69a002018-03-21 06:28:42 +00001502def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1503 "VPSRAVDYrm",
1504 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001505
1506def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1507 let Latency = 9;
1508 let NumMicroOps = 4;
1509 let ResourceCycles = [2,1,1];
1510}
Craig Topper5a69a002018-03-21 06:28:42 +00001511def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1512 "VPHADDSWYrm",
1513 "VPHADDWYrm",
1514 "VPHSUBDYrm",
1515 "VPHSUBSWYrm",
1516 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001517
1518def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1519 let Latency = 9;
1520 let NumMicroOps = 4;
1521 let ResourceCycles = [1,1,1,1];
1522}
Craig Topper5a69a002018-03-21 06:28:42 +00001523def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1524 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001525
1526def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1527 let Latency = 9;
1528 let NumMicroOps = 5;
1529 let ResourceCycles = [1,1,3];
1530}
1531def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1532
1533def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1534 let Latency = 9;
1535 let NumMicroOps = 5;
1536 let ResourceCycles = [1,2,1,1];
1537}
Craig Topper5a69a002018-03-21 06:28:42 +00001538def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1539 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001540
Gadi Haber323f2e12017-10-24 20:19:47 +00001541def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1542 let Latency = 10;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001546def: InstRW<[BWWriteResGroup115], (instregex "(V?)PCMPGTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001547
Gadi Haber323f2e12017-10-24 20:19:47 +00001548def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1549 let Latency = 10;
1550 let NumMicroOps = 3;
1551 let ResourceCycles = [2,1];
1552}
Craig Topper5a69a002018-03-21 06:28:42 +00001553def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1554 "FICOM32m",
1555 "FICOMP16m",
1556 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001557
1558def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1559 let Latency = 10;
1560 let NumMicroOps = 3;
1561 let ResourceCycles = [1,1,1];
1562}
1563def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1564
Gadi Haber323f2e12017-10-24 20:19:47 +00001565def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1566 let Latency = 10;
1567 let NumMicroOps = 4;
1568 let ResourceCycles = [1,1,1,1];
1569}
1570def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1571
1572def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001573 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001574 let NumMicroOps = 4;
1575 let ResourceCycles = [1,1,1,1];
1576}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001577def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001578
Craig Topper8104f262018-04-02 05:33:28 +00001579def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001580 let Latency = 11;
1581 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001582 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001583}
Craig Topper8104f262018-04-02 05:33:28 +00001584def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1585
1586def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1587 let Latency = 11;
1588 let NumMicroOps = 1;
1589 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1590}
1591def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001592
1593def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1594 let Latency = 11;
1595 let NumMicroOps = 2;
1596 let ResourceCycles = [1,1];
1597}
Craig Topper5a69a002018-03-21 06:28:42 +00001598def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1599 "MUL_F64m",
1600 "VPCMPGTQYrm",
1601 "VPMADDUBSWYrm",
1602 "VPMADDWDYrm",
1603 "VPMULDQYrm",
1604 "VPMULHRSWYrm",
1605 "VPMULHUWYrm",
1606 "VPMULHWYrm",
1607 "VPMULLWYrm",
1608 "VPMULUDQYrm",
1609 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001610
Gadi Haber323f2e12017-10-24 20:19:47 +00001611def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1612 let Latency = 11;
1613 let NumMicroOps = 3;
1614 let ResourceCycles = [2,1];
1615}
Craig Topper5a69a002018-03-21 06:28:42 +00001616def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1617 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001618
1619def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1620 let Latency = 11;
1621 let NumMicroOps = 3;
1622 let ResourceCycles = [2,1];
1623}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001624def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1625 "(V?)ROUNDPSm",
1626 "(V?)ROUNDSDm",
1627 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001628
1629def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1630 let Latency = 11;
1631 let NumMicroOps = 3;
1632 let ResourceCycles = [1,1,1];
1633}
1634def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1635
1636def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1637 let Latency = 11;
1638 let NumMicroOps = 4;
1639 let ResourceCycles = [1,2,1];
1640}
Craig Topper5a69a002018-03-21 06:28:42 +00001641def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1642 "VHADDPSYrm",
1643 "VHSUBPDYrm",
1644 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001645
1646def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1647 let Latency = 11;
1648 let NumMicroOps = 6;
1649 let ResourceCycles = [1,1,1,1,2];
1650}
Craig Topper5a69a002018-03-21 06:28:42 +00001651def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1652 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001653
1654def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1655 let Latency = 11;
1656 let NumMicroOps = 7;
1657 let ResourceCycles = [2,2,3];
1658}
Craig Topper5a69a002018-03-21 06:28:42 +00001659def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1660 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001661
1662def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1663 let Latency = 11;
1664 let NumMicroOps = 9;
1665 let ResourceCycles = [1,4,1,3];
1666}
1667def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1668
1669def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1670 let Latency = 11;
1671 let NumMicroOps = 11;
1672 let ResourceCycles = [2,9];
1673}
Craig Topper2d451e72018-03-18 08:38:06 +00001674def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1675def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001676
Gadi Haber323f2e12017-10-24 20:19:47 +00001677def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1678 let Latency = 12;
1679 let NumMicroOps = 3;
1680 let ResourceCycles = [2,1];
1681}
Craig Topper5a69a002018-03-21 06:28:42 +00001682def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1683 "ADD_FI32m",
1684 "SUBR_FI16m",
1685 "SUBR_FI32m",
1686 "SUB_FI16m",
1687 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001688 "VROUNDPDYm",
1689 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001690
Craig Topper8104f262018-04-02 05:33:28 +00001691def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001692 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001693 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001694 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001695}
Craig Topper8104f262018-04-02 05:33:28 +00001696def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1697
1698def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1699 let Latency = 11;
1700 let NumMicroOps = 1;
1701 let ResourceCycles = [1,4];
1702}
1703def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001704
1705def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1706 let Latency = 13;
1707 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001708 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001709}
1710def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1711
Craig Topper8104f262018-04-02 05:33:28 +00001712def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001713 let Latency = 14;
1714 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001715 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001716}
Craig Topper8104f262018-04-02 05:33:28 +00001717def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1718
1719def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1720 let Latency = 14;
1721 let NumMicroOps = 1;
1722 let ResourceCycles = [1,4];
1723}
1724def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001725
Gadi Haber323f2e12017-10-24 20:19:47 +00001726def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1727 let Latency = 14;
1728 let NumMicroOps = 3;
1729 let ResourceCycles = [1,1,1];
1730}
Craig Topper5a69a002018-03-21 06:28:42 +00001731def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1732 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001733
1734def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1735 let Latency = 14;
1736 let NumMicroOps = 4;
1737 let ResourceCycles = [2,1,1];
1738}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001739def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001740
1741def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1742 let Latency = 14;
1743 let NumMicroOps = 4;
1744 let ResourceCycles = [1,1,1,1];
1745}
Craig Topper5a69a002018-03-21 06:28:42 +00001746def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001747
1748def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1749 let Latency = 14;
1750 let NumMicroOps = 8;
1751 let ResourceCycles = [2,2,1,3];
1752}
1753def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1754
1755def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1756 let Latency = 14;
1757 let NumMicroOps = 10;
1758 let ResourceCycles = [2,3,1,4];
1759}
1760def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1761
1762def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1763 let Latency = 14;
1764 let NumMicroOps = 12;
1765 let ResourceCycles = [2,1,4,5];
1766}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001767def: InstRW<[BWWriteResGroup146], (instrs XCH_F)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001768
1769def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1770 let Latency = 15;
1771 let NumMicroOps = 1;
1772 let ResourceCycles = [1];
1773}
Craig Topper5a69a002018-03-21 06:28:42 +00001774def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1775 "DIVR_FST0r",
1776 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001777
Gadi Haber323f2e12017-10-24 20:19:47 +00001778def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1779 let Latency = 15;
1780 let NumMicroOps = 10;
1781 let ResourceCycles = [1,1,1,4,1,2];
1782}
Craig Topper13a16502018-03-19 00:56:09 +00001783def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001784
Craig Topper8104f262018-04-02 05:33:28 +00001785def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001786 let Latency = 16;
1787 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001788 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001789}
Craig Topper5a69a002018-03-21 06:28:42 +00001790def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1791 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001792
1793def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1794 let Latency = 16;
1795 let NumMicroOps = 3;
1796 let ResourceCycles = [2,1];
1797}
1798def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1799
Gadi Haber323f2e12017-10-24 20:19:47 +00001800def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1801 let Latency = 16;
1802 let NumMicroOps = 14;
1803 let ResourceCycles = [1,1,1,4,2,5];
1804}
1805def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1806
1807def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1808 let Latency = 16;
1809 let NumMicroOps = 16;
1810 let ResourceCycles = [16];
1811}
Craig Topper5a69a002018-03-21 06:28:42 +00001812def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001813
Craig Topper8104f262018-04-02 05:33:28 +00001814def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001815 let Latency = 17;
1816 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001817 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001818}
1819def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1820
1821def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1822 let Latency = 17;
1823 let NumMicroOps = 4;
1824 let ResourceCycles = [2,1,1];
1825}
Craig Topper5a69a002018-03-21 06:28:42 +00001826def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
1827 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001828
Craig Topper8104f262018-04-02 05:33:28 +00001829def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001830 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001831 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001832 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001833}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001834def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
1835 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001836
Gadi Haber323f2e12017-10-24 20:19:47 +00001837def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
1838 let Latency = 18;
1839 let NumMicroOps = 8;
1840 let ResourceCycles = [1,1,1,5];
1841}
Craig Topper5a69a002018-03-21 06:28:42 +00001842def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00001843def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001844
1845def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1846 let Latency = 18;
1847 let NumMicroOps = 11;
1848 let ResourceCycles = [2,1,1,3,1,3];
1849}
Craig Topper13a16502018-03-19 00:56:09 +00001850def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001851
Craig Topper8104f262018-04-02 05:33:28 +00001852def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001853 let Latency = 19;
1854 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001855 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001856}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001857def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001858 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001859
Gadi Haber323f2e12017-10-24 20:19:47 +00001860def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1861 let Latency = 19;
1862 let NumMicroOps = 5;
1863 let ResourceCycles = [2,1,1,1];
1864}
Craig Topper5a69a002018-03-21 06:28:42 +00001865def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001866
Gadi Haber323f2e12017-10-24 20:19:47 +00001867def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
1868 let Latency = 20;
1869 let NumMicroOps = 1;
1870 let ResourceCycles = [1];
1871}
Craig Topper5a69a002018-03-21 06:28:42 +00001872def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
1873 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001874 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001875
1876def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1877 let Latency = 20;
1878 let NumMicroOps = 5;
1879 let ResourceCycles = [2,1,1,1];
1880}
1881def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
1882
1883def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1884 let Latency = 20;
1885 let NumMicroOps = 8;
1886 let ResourceCycles = [1,1,1,1,1,1,2];
1887}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001888def: InstRW<[BWWriteResGroup167], (instrs INSB, INSL, INSW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001889
Craig Topper8104f262018-04-02 05:33:28 +00001890def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001891 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001892 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001893 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001894}
Craig Topper8104f262018-04-02 05:33:28 +00001895def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
1896
1897def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1898 let Latency = 16;
1899 let NumMicroOps = 1;
1900 let ResourceCycles = [1,8];
1901}
1902def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001903
1904def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
1905 let Latency = 21;
1906 let NumMicroOps = 2;
1907 let ResourceCycles = [1,1];
1908}
Craig Topper5a69a002018-03-21 06:28:42 +00001909def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
1910 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001911
Craig Topper8104f262018-04-02 05:33:28 +00001912def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001913 let Latency = 21;
1914 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001915 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001916}
1917def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
1918
1919def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1920 let Latency = 21;
1921 let NumMicroOps = 19;
1922 let ResourceCycles = [2,1,4,1,1,4,6];
1923}
1924def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
1925
1926def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1927 let Latency = 22;
1928 let NumMicroOps = 18;
1929 let ResourceCycles = [1,1,16];
1930}
1931def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
1932
Craig Topper8104f262018-04-02 05:33:28 +00001933def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001934 let Latency = 23;
1935 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001936 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001937}
1938def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
1939
Craig Topper8104f262018-04-02 05:33:28 +00001940def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001941 let Latency = 23;
1942 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001943 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001944}
1945def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
1946
Gadi Haber323f2e12017-10-24 20:19:47 +00001947def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1948 let Latency = 23;
1949 let NumMicroOps = 19;
1950 let ResourceCycles = [3,1,15];
1951}
Craig Topper391c6f92017-12-10 01:24:08 +00001952def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001953
1954def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1955 let Latency = 24;
1956 let NumMicroOps = 3;
1957 let ResourceCycles = [1,1,1];
1958}
Craig Topper5a69a002018-03-21 06:28:42 +00001959def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
1960 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001961
Craig Topper8104f262018-04-02 05:33:28 +00001962def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001963 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00001964 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001965 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001966}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001967def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
1968 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001969
1970def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
1971 let Latency = 26;
1972 let NumMicroOps = 2;
1973 let ResourceCycles = [1,1];
1974}
Craig Topper5a69a002018-03-21 06:28:42 +00001975def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001976 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001977
Craig Topper8104f262018-04-02 05:33:28 +00001978def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001979 let Latency = 27;
1980 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001981 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001982}
1983def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
1984
1985def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1986 let Latency = 29;
1987 let NumMicroOps = 3;
1988 let ResourceCycles = [1,1,1];
1989}
Craig Topper5a69a002018-03-21 06:28:42 +00001990def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
1991 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001992
Craig Topper8104f262018-04-02 05:33:28 +00001993def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001994 let Latency = 29;
1995 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001996 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001997}
1998def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
1999
2000def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2001 let Latency = 22;
2002 let NumMicroOps = 7;
2003 let ResourceCycles = [1,3,2,1];
2004}
Craig Topper17a31182017-12-16 18:35:29 +00002005def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002006
2007def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2008 let Latency = 23;
2009 let NumMicroOps = 9;
2010 let ResourceCycles = [1,3,4,1];
2011}
Craig Topper17a31182017-12-16 18:35:29 +00002012def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002013
2014def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2015 let Latency = 24;
2016 let NumMicroOps = 9;
2017 let ResourceCycles = [1,5,2,1];
2018}
Craig Topper17a31182017-12-16 18:35:29 +00002019def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002020
2021def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2022 let Latency = 25;
2023 let NumMicroOps = 7;
2024 let ResourceCycles = [1,3,2,1];
2025}
Craig Topper17a31182017-12-16 18:35:29 +00002026def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2027 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002028
2029def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2030 let Latency = 26;
2031 let NumMicroOps = 9;
2032 let ResourceCycles = [1,5,2,1];
2033}
Craig Topper17a31182017-12-16 18:35:29 +00002034def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
2036def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2037 let Latency = 26;
2038 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002039 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002040}
Craig Topper17a31182017-12-16 18:35:29 +00002041def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002042
2043def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2044 let Latency = 27;
2045 let NumMicroOps = 9;
2046 let ResourceCycles = [1,5,2,1];
2047}
Craig Topper17a31182017-12-16 18:35:29 +00002048def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002049
Gadi Haber323f2e12017-10-24 20:19:47 +00002050def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2051 let Latency = 29;
2052 let NumMicroOps = 27;
2053 let ResourceCycles = [1,5,1,1,19];
2054}
2055def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2056
2057def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2058 let Latency = 30;
2059 let NumMicroOps = 28;
2060 let ResourceCycles = [1,6,1,1,19];
2061}
Craig Topper2d451e72018-03-18 08:38:06 +00002062def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002063
2064def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2065 let Latency = 31;
2066 let NumMicroOps = 31;
2067 let ResourceCycles = [8,1,21,1];
2068}
2069def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2070
Craig Topper8104f262018-04-02 05:33:28 +00002071def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2072 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002073 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002074 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002075}
2076def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2077
2078def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2079 let Latency = 34;
2080 let NumMicroOps = 8;
2081 let ResourceCycles = [2,2,2,1,1];
2082}
Craig Topper13a16502018-03-19 00:56:09 +00002083def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002084
2085def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2086 let Latency = 34;
2087 let NumMicroOps = 23;
2088 let ResourceCycles = [1,5,3,4,10];
2089}
Craig Topper5a69a002018-03-21 06:28:42 +00002090def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2091 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002092
2093def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2094 let Latency = 35;
2095 let NumMicroOps = 8;
2096 let ResourceCycles = [2,2,2,1,1];
2097}
Craig Topper13a16502018-03-19 00:56:09 +00002098def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002099
2100def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2101 let Latency = 35;
2102 let NumMicroOps = 23;
2103 let ResourceCycles = [1,5,2,1,4,10];
2104}
Craig Topper5a69a002018-03-21 06:28:42 +00002105def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2106 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002107
Craig Topper8104f262018-04-02 05:33:28 +00002108def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2109 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002110 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002111 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002112}
2113def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2114
2115def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2116 let Latency = 42;
2117 let NumMicroOps = 22;
2118 let ResourceCycles = [2,20];
2119}
Craig Topper2d451e72018-03-18 08:38:06 +00002120def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002121
2122def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2123 let Latency = 60;
2124 let NumMicroOps = 64;
2125 let ResourceCycles = [2,2,8,1,10,2,39];
2126}
2127def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128
2129def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2130 let Latency = 63;
2131 let NumMicroOps = 88;
2132 let ResourceCycles = [4,4,31,1,2,1,45];
2133}
Craig Topper2d451e72018-03-18 08:38:06 +00002134def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002135
2136def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2137 let Latency = 63;
2138 let NumMicroOps = 90;
2139 let ResourceCycles = [4,2,33,1,2,1,47];
2140}
Craig Topper2d451e72018-03-18 08:38:06 +00002141def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002142
2143def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2144 let Latency = 75;
2145 let NumMicroOps = 15;
2146 let ResourceCycles = [6,3,6];
2147}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002148def: InstRW<[BWWriteResGroup200], (instrs FNINIT)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002149
2150def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2151 let Latency = 80;
2152 let NumMicroOps = 32;
2153 let ResourceCycles = [7,7,3,3,1,11];
2154}
2155def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2156
2157def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2158 let Latency = 115;
2159 let NumMicroOps = 100;
2160 let ResourceCycles = [9,9,11,8,1,11,21,30];
2161}
2162def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002163
2164} // SchedModel
2165