blob: 4f9c67431d7b7711728d1c9c7b6ab330e8a0e03f [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 {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // 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.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000167defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000169defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000170
171// FMA Scheduling helper class.
172// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
173
174// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000175def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
176def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
177def : WriteRes<WriteVecMove, [BWPort015]>;
178
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
180defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
181defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
186defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
187defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000189
190// Vector bitwise operations.
191// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector and/or/xor.
Gadi Haber323f2e12017-10-24 20:19:47 +0000193
194// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
196defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
197defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000198
199// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200
Gadi Haber323f2e12017-10-24 20:19:47 +0000201// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000202def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000203 let Latency = 11;
204 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000205 let ResourceCycles = [3];
206}
207def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208 let Latency = 16;
209 let NumMicroOps = 4;
210 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212
213// Packed Compare Explicit Length Strings, Return Mask
214def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
215 let Latency = 19;
216 let NumMicroOps = 9;
217 let ResourceCycles = [4,3,1,1];
218}
219def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
220 let Latency = 24;
221 let NumMicroOps = 10;
222 let ResourceCycles = [4,3,1,1,1];
223}
224
225// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000226def : WriteRes<WritePCmpIStrI, [BWPort0]> {
227 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000229 let ResourceCycles = [3];
230}
231def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232 let Latency = 16;
233 let NumMicroOps = 4;
234 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236
237// Packed Compare Explicit Length Strings, Return Index
238def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
239 let Latency = 18;
240 let NumMicroOps = 8;
241 let ResourceCycles = [4,3,1];
242}
243def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
244 let Latency = 23;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000247}
248
Simon Pilgrima2f26782018-03-27 20:38:54 +0000249// MOVMSK Instructions.
250def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
252def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
253
Gadi Haber323f2e12017-10-24 20:19:47 +0000254// AES instructions.
255def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
256 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000257 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000258 let ResourceCycles = [1];
259}
260def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let Latency = 12;
262 let NumMicroOps = 2;
263 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000264}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265
Gadi Haber323f2e12017-10-24 20:19:47 +0000266def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
267 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000268 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000269 let ResourceCycles = [2];
270}
271def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272 let Latency = 19;
273 let NumMicroOps = 3;
274 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000275}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000276
277def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
278 let Latency = 29;
279 let NumMicroOps = 11;
280 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000281}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000282def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
283 let Latency = 33;
284 let NumMicroOps = 11;
285 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000286}
287
288// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000289defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000290
291// Catch-all for expensive system instructions.
292def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
293
294// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000295defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000296defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000297defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000298defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000299defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000300
301// Old microcoded instructions that nobody use.
302def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
303
304// Fence instructions.
305def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
306
307// Nop, not very useful expect it provides a model for nops!
308def : WriteRes<WriteNop, []>;
309
310////////////////////////////////////////////////////////////////////////////////
311// Horizontal add/sub instructions.
312////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000313
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000314defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
315defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
317// Remaining instrs.
318
319def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
320 let Latency = 1;
321 let NumMicroOps = 1;
322 let ResourceCycles = [1];
323}
Craig Topper5a69a002018-03-21 06:28:42 +0000324def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
325 "MMX_MOVD64grr",
Craig Topper5a69a002018-03-21 06:28:42 +0000326 "MMX_PSLLDri",
327 "MMX_PSLLDrr",
328 "MMX_PSLLQri",
329 "MMX_PSLLQrr",
330 "MMX_PSLLWri",
331 "MMX_PSLLWrr",
332 "MMX_PSRADri",
333 "MMX_PSRADrr",
334 "MMX_PSRAWri",
335 "MMX_PSRAWrr",
336 "MMX_PSRLDri",
337 "MMX_PSRLDrr",
338 "MMX_PSRLQri",
339 "MMX_PSRLQrr",
340 "MMX_PSRLWri",
341 "MMX_PSRLWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000342 "(V?)MOVPDI2DIrr",
343 "(V?)MOVPQIto64rr",
344 "(V?)PSLLD(Y?)ri",
345 "(V?)PSLLQ(Y?)ri",
346 "VPSLLVQ(Y?)rr",
347 "(V?)PSLLW(Y?)ri",
348 "(V?)PSRAD(Y?)ri",
349 "(V?)PSRAW(Y?)ri",
350 "(V?)PSRLD(Y?)ri",
351 "(V?)PSRLQ(Y?)ri",
352 "VPSRLVQ(Y?)rr",
353 "(V?)PSRLW(Y?)ri",
354 "VTESTPD(Y?)rr",
355 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000356
357def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
358 let Latency = 1;
359 let NumMicroOps = 1;
360 let ResourceCycles = [1];
361}
Craig Topper5a69a002018-03-21 06:28:42 +0000362def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
363 "COM_FST0r",
364 "UCOM_FPr",
365 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000366
367def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000372def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000373 "MMX_MOVD64to64rr",
374 "MMX_MOVQ2DQrr",
375 "MMX_PALIGNRrri",
Craig Topper5a69a002018-03-21 06:28:42 +0000376 "MMX_PSHUFWri",
377 "MMX_PUNPCKHBWirr",
378 "MMX_PUNPCKHDQirr",
379 "MMX_PUNPCKHWDirr",
380 "MMX_PUNPCKLBWirr",
381 "MMX_PUNPCKLDQirr",
382 "MMX_PUNPCKLWDirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000383 "(V?)ANDNPD(Y?)rr",
384 "(V?)ANDNPS(Y?)rr",
385 "(V?)ANDPD(Y?)rr",
386 "(V?)ANDPS(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000387 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000388 "(V?)INSERTPSrr",
389 "(V?)MOV64toPQIrr",
390 "(V?)MOVAPD(Y?)rr",
391 "(V?)MOVAPS(Y?)rr",
392 "(V?)MOVDDUP(Y?)rr",
393 "(V?)MOVDI2PDIrr",
394 "(V?)MOVHLPSrr",
395 "(V?)MOVLHPSrr",
396 "(V?)MOVSDrr",
397 "(V?)MOVSHDUP(Y?)rr",
398 "(V?)MOVSLDUP(Y?)rr",
399 "(V?)MOVSSrr",
400 "(V?)MOVUPD(Y?)rr",
401 "(V?)MOVUPS(Y?)rr",
402 "(V?)ORPD(Y?)rr",
403 "(V?)ORPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000404 "(V?)PALIGNR(Y?)rri",
405 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000406 "VPBROADCASTDrr",
407 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000408 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000409 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000410 "(V?)PMOVSXBDrr",
411 "(V?)PMOVSXBQrr",
412 "(V?)PMOVSXBWrr",
413 "(V?)PMOVSXDQrr",
414 "(V?)PMOVSXWDrr",
415 "(V?)PMOVSXWQrr",
416 "(V?)PMOVZXBDrr",
417 "(V?)PMOVZXBQrr",
418 "(V?)PMOVZXBWrr",
419 "(V?)PMOVZXDQrr",
420 "(V?)PMOVZXWDrr",
421 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000422 "(V?)PSHUFD(Y?)ri",
423 "(V?)PSHUFHW(Y?)ri",
424 "(V?)PSHUFLW(Y?)ri",
425 "(V?)PSLLDQ(Y?)ri",
426 "(V?)PSRLDQ(Y?)ri",
427 "(V?)PUNPCKHBW(Y?)rr",
428 "(V?)PUNPCKHDQ(Y?)rr",
429 "(V?)PUNPCKHQDQ(Y?)rr",
430 "(V?)PUNPCKHWD(Y?)rr",
431 "(V?)PUNPCKLBW(Y?)rr",
432 "(V?)PUNPCKLDQ(Y?)rr",
433 "(V?)PUNPCKLQDQ(Y?)rr",
434 "(V?)PUNPCKLWD(Y?)rr",
435 "(V?)SHUFPD(Y?)rri",
436 "(V?)SHUFPS(Y?)rri",
437 "(V?)UNPCKHPD(Y?)rr",
438 "(V?)UNPCKHPS(Y?)rr",
439 "(V?)UNPCKLPD(Y?)rr",
440 "(V?)UNPCKLPS(Y?)rr",
441 "(V?)XORPD(Y?)rr",
442 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000443
444def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
445 let Latency = 1;
446 let NumMicroOps = 1;
447 let ResourceCycles = [1];
448}
449def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
450
451def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
452 let Latency = 1;
453 let NumMicroOps = 1;
454 let ResourceCycles = [1];
455}
Craig Topper5a69a002018-03-21 06:28:42 +0000456def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
457 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000458
459def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
460 let Latency = 1;
461 let NumMicroOps = 1;
462 let ResourceCycles = [1];
463}
Craig Topperfbe31322018-04-05 21:56:19 +0000464def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000465def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
466 "ADC(16|32|64)i",
467 "ADC(8|16|32|64)rr",
468 "ADCX(32|64)rr",
469 "ADOX(32|64)rr",
470 "BT(16|32|64)ri8",
471 "BT(16|32|64)rr",
472 "BTC(16|32|64)ri8",
473 "BTC(16|32|64)rr",
474 "BTR(16|32|64)ri8",
475 "BTR(16|32|64)rr",
476 "BTS(16|32|64)ri8",
477 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000478 "SBB(16|32|64)ri",
479 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000480 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000481
482def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
483 let Latency = 1;
484 let NumMicroOps = 1;
485 let ResourceCycles = [1];
486}
Craig Topper5a69a002018-03-21 06:28:42 +0000487def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
488 "BLSI(32|64)rr",
489 "BLSMSK(32|64)rr",
490 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000491 "LEA(16|32|64)(_32)?r",
492 "MMX_PABSBrr",
493 "MMX_PABSDrr",
494 "MMX_PABSWrr",
495 "MMX_PADDBirr",
496 "MMX_PADDDirr",
497 "MMX_PADDQirr",
498 "MMX_PADDSBirr",
499 "MMX_PADDSWirr",
500 "MMX_PADDUSBirr",
501 "MMX_PADDUSWirr",
502 "MMX_PADDWirr",
503 "MMX_PAVGBirr",
504 "MMX_PAVGWirr",
505 "MMX_PCMPEQBirr",
506 "MMX_PCMPEQDirr",
507 "MMX_PCMPEQWirr",
508 "MMX_PCMPGTBirr",
509 "MMX_PCMPGTDirr",
510 "MMX_PCMPGTWirr",
511 "MMX_PMAXSWirr",
512 "MMX_PMAXUBirr",
513 "MMX_PMINSWirr",
514 "MMX_PMINUBirr",
515 "MMX_PSIGNBrr",
516 "MMX_PSIGNDrr",
517 "MMX_PSIGNWrr",
518 "MMX_PSUBBirr",
519 "MMX_PSUBDirr",
520 "MMX_PSUBQirr",
521 "MMX_PSUBSBirr",
522 "MMX_PSUBSWirr",
523 "MMX_PSUBUSBirr",
524 "MMX_PSUBUSWirr",
525 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000526 "(V?)PABSB(Y?)rr",
527 "(V?)PABSD(Y?)rr",
528 "(V?)PABSW(Y?)rr",
529 "(V?)PADDB(Y?)rr",
530 "(V?)PADDD(Y?)rr",
531 "(V?)PADDQ(Y?)rr",
532 "(V?)PADDSB(Y?)rr",
533 "(V?)PADDSW(Y?)rr",
534 "(V?)PADDUSB(Y?)rr",
535 "(V?)PADDUSW(Y?)rr",
536 "(V?)PADDW(Y?)rr",
537 "(V?)PAVGB(Y?)rr",
538 "(V?)PAVGW(Y?)rr",
539 "(V?)PCMPEQB(Y?)rr",
540 "(V?)PCMPEQD(Y?)rr",
541 "(V?)PCMPEQQ(Y?)rr",
542 "(V?)PCMPEQW(Y?)rr",
543 "(V?)PCMPGTB(Y?)rr",
544 "(V?)PCMPGTD(Y?)rr",
545 "(V?)PCMPGTW(Y?)rr",
546 "(V?)PMAXSB(Y?)rr",
547 "(V?)PMAXSD(Y?)rr",
548 "(V?)PMAXSW(Y?)rr",
549 "(V?)PMAXUB(Y?)rr",
550 "(V?)PMAXUD(Y?)rr",
551 "(V?)PMAXUW(Y?)rr",
552 "(V?)PMINSB(Y?)rr",
553 "(V?)PMINSD(Y?)rr",
554 "(V?)PMINSW(Y?)rr",
555 "(V?)PMINUB(Y?)rr",
556 "(V?)PMINUD(Y?)rr",
557 "(V?)PMINUW(Y?)rr",
558 "(V?)PSIGNB(Y?)rr",
559 "(V?)PSIGND(Y?)rr",
560 "(V?)PSIGNW(Y?)rr",
561 "(V?)PSUBB(Y?)rr",
562 "(V?)PSUBD(Y?)rr",
563 "(V?)PSUBQ(Y?)rr",
564 "(V?)PSUBSB(Y?)rr",
565 "(V?)PSUBSW(Y?)rr",
566 "(V?)PSUBUSB(Y?)rr",
567 "(V?)PSUBUSW(Y?)rr",
568 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000569
570def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
571 let Latency = 1;
572 let NumMicroOps = 1;
573 let ResourceCycles = [1];
574}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000575def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000576 "MMX_PANDNirr",
577 "MMX_PANDirr",
578 "MMX_PORirr",
579 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000580 "(V?)BLENDPD(Y?)rri",
581 "(V?)BLENDPS(Y?)rri",
582 "(V?)MOVDQA(Y?)rr",
583 "(V?)MOVDQU(Y?)rr",
584 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000585 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000586 "(V?)PANDN(Y?)rr",
587 "(V?)PAND(Y?)rr",
588 "VPBLENDD(Y?)rri",
589 "(V?)POR(Y?)rr",
590 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000591
592def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
593 let Latency = 1;
594 let NumMicroOps = 1;
595 let ResourceCycles = [1];
596}
Craig Topperdfccafe2018-04-18 06:41:25 +0000597def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000598 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000599 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000600 "SGDT64m",
601 "SIDT64m",
602 "SLDT64m",
603 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000604 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000605 "SYSCALL",
Craig Topperdfccafe2018-04-18 06:41:25 +0000606 "XCHG(16|32|64)rr")>; // FIXME: This isn't 1 uop, probably should match XCHG8rr.
Gadi Haber323f2e12017-10-24 20:19:47 +0000607
608def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
609 let Latency = 1;
610 let NumMicroOps = 2;
611 let ResourceCycles = [1,1];
612}
Craig Topper5a69a002018-03-21 06:28:42 +0000613def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
614 "MMX_MOVD64from64rm",
615 "MMX_MOVD64mr",
616 "MMX_MOVNTQmr",
617 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000618 "MOVNTI_64mr",
619 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000620 "ST_FP32m",
621 "ST_FP64m",
622 "ST_FP80m",
623 "VEXTRACTF128mr",
624 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000625 "(V?)MOVAPD(Y?)mr",
626 "(V?)MOVAPS(Y?)mr",
627 "(V?)MOVDQA(Y?)mr",
628 "(V?)MOVDQU(Y?)mr",
629 "(V?)MOVHPDmr",
630 "(V?)MOVHPSmr",
631 "(V?)MOVLPDmr",
632 "(V?)MOVLPSmr",
633 "(V?)MOVNTDQ(V?)mr",
634 "(V?)MOVNTPD(V?)mr",
635 "(V?)MOVNTPS(V?)mr",
636 "(V?)MOVPDI2DImr",
637 "(V?)MOVPQI2QImr",
638 "(V?)MOVPQIto64mr",
639 "(V?)MOVSDmr",
640 "(V?)MOVSSmr",
641 "(V?)MOVUPD(Y?)mr",
642 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000643
644def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
645 let Latency = 2;
646 let NumMicroOps = 2;
647 let ResourceCycles = [2];
648}
Craig Topper5a69a002018-03-21 06:28:42 +0000649def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
650 "BLENDVPSrr0",
651 "MMX_PINSRWrr",
652 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000653 "VBLENDVPD(Y?)rr",
654 "VBLENDVPS(Y?)rr",
655 "VPBLENDVB(Y?)rr",
656 "(V?)PINSRBrr",
657 "(V?)PINSRDrr",
658 "(V?)PINSRQrr",
659 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000660
661def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [2];
665}
666def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
667
668def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [2];
672}
Craig Topper5a69a002018-03-21 06:28:42 +0000673def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
674 "ROL(8|16|32|64)ri",
675 "ROR(8|16|32|64)r1",
676 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000677
678def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
679 let Latency = 2;
680 let NumMicroOps = 2;
681 let ResourceCycles = [2];
682}
Craig Topper5a69a002018-03-21 06:28:42 +0000683def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
684 "MFENCE",
685 "WAIT",
686 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000687
688def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
689 let Latency = 2;
690 let NumMicroOps = 2;
691 let ResourceCycles = [1,1];
692}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000693def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
694 "VCVTPH2PS(Y?)rr",
695 "(V?)CVTPS2PDrr",
696 "(V?)CVTSS2SDrr",
697 "(V?)EXTRACTPSrr",
698 "(V?)PEXTRBrr",
699 "(V?)PEXTRDrr",
700 "(V?)PEXTRQrr",
701 "(V?)PEXTRWrr",
702 "(V?)PSLLDrr",
703 "(V?)PSLLQrr",
704 "(V?)PSLLWrr",
705 "(V?)PSRADrr",
706 "(V?)PSRAWrr",
707 "(V?)PSRLDrr",
708 "(V?)PSRLQrr",
709 "(V?)PSRLWrr",
710 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000711
712def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
713 let Latency = 2;
714 let NumMicroOps = 2;
715 let ResourceCycles = [1,1];
716}
717def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
718
719def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
720 let Latency = 2;
721 let NumMicroOps = 2;
722 let ResourceCycles = [1,1];
723}
724def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
725
726def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
727 let Latency = 2;
728 let NumMicroOps = 2;
729 let ResourceCycles = [1,1];
730}
731def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
732
733def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
734 let Latency = 2;
735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
Craig Topper498875f2018-04-04 17:54:19 +0000738def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
739
740def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
741 let Latency = 1;
742 let NumMicroOps = 1;
743 let ResourceCycles = [1];
744}
745def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000746
747def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
748 let Latency = 2;
749 let NumMicroOps = 2;
750 let ResourceCycles = [1,1];
751}
Craig Topper2d451e72018-03-18 08:38:06 +0000752def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000753def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000754def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
755 "ADC8ri",
756 "CMOV(A|BE)(16|32|64)rr",
757 "SBB8i8",
758 "SBB8ri",
759 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000760
761def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
762 let Latency = 2;
763 let NumMicroOps = 3;
764 let ResourceCycles = [1,1,1];
765}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000766def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
767 "(V?)PEXTRBmr",
768 "(V?)PEXTRDmr",
769 "(V?)PEXTRQmr",
770 "(V?)PEXTRWmr",
771 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000772
773def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
774 let Latency = 2;
775 let NumMicroOps = 3;
776 let ResourceCycles = [1,1,1];
777}
778def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
779
Gadi Haber323f2e12017-10-24 20:19:47 +0000780def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
781 let Latency = 2;
782 let NumMicroOps = 3;
783 let ResourceCycles = [1,1,1];
784}
785def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
786
787def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
788 let Latency = 2;
789 let NumMicroOps = 3;
790 let ResourceCycles = [1,1,1];
791}
Craig Topper2d451e72018-03-18 08:38:06 +0000792def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000793def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
794 "PUSH64i8",
795 "STOSB",
796 "STOSL",
797 "STOSQ",
798 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000799
Gadi Haber323f2e12017-10-24 20:19:47 +0000800def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
801 let Latency = 3;
802 let NumMicroOps = 1;
803 let ResourceCycles = [1];
804}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000805def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000806 "ADD_FST0r",
807 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000808 "MMX_CVTPI2PSirr",
809 "PDEP(32|64)rr",
810 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000811 "SHLD(16|32|64)rri8",
812 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000813 "SUBR_FPrST0",
814 "SUBR_FST0r",
815 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000816 "SUB_FPrST0",
817 "SUB_FST0r",
818 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000819 "(V?)CVTDQ2PS(Y?)rr",
820 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000821 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000822
823def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperdfccafe2018-04-18 06:41:25 +0000824 let Latency = 3; // FIXME: I think this should be 4.
Gadi Haber323f2e12017-10-24 20:19:47 +0000825 let NumMicroOps = 2;
826 let ResourceCycles = [1,1];
827}
Clement Courbet327fac42018-03-07 08:14:02 +0000828def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000829
830def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
831 let Latency = 3;
832 let NumMicroOps = 1;
833 let ResourceCycles = [1];
834}
Craig Topper5a69a002018-03-21 06:28:42 +0000835def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
836 "VBROADCASTSSYrr",
837 "VEXTRACTF128rr",
838 "VEXTRACTI128rr",
839 "VINSERTF128rr",
840 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000841 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000842 "VPBROADCASTDYrr",
843 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000844 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000845 "VPERM2F128rr",
846 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000847 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000848 "VPERMQYri",
849 "VPMOVSXBDYrr",
850 "VPMOVSXBQYrr",
851 "VPMOVSXBWYrr",
852 "VPMOVSXDQYrr",
853 "VPMOVSXWDYrr",
854 "VPMOVSXWQYrr",
855 "VPMOVZXBDYrr",
856 "VPMOVZXBQYrr",
857 "VPMOVZXBWYrr",
858 "VPMOVZXDQYrr",
859 "VPMOVZXWDYrr",
860 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000861
862def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
863 let Latency = 3;
864 let NumMicroOps = 1;
865 let ResourceCycles = [1];
866}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000867def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
868 "(V?)MULPS(Y?)rr",
869 "(V?)MULSDrr",
870 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000871
872def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
873 let Latency = 3;
874 let NumMicroOps = 3;
875 let ResourceCycles = [3];
876}
Craig Topper5a69a002018-03-21 06:28:42 +0000877def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
878 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000879
880def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
881 let Latency = 3;
882 let NumMicroOps = 3;
883 let ResourceCycles = [2,1];
884}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000885def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
886 "VPSRAVD(Y?)rr",
887 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000888
889def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
890 let Latency = 3;
891 let NumMicroOps = 3;
892 let ResourceCycles = [2,1];
893}
Craig Topper5a69a002018-03-21 06:28:42 +0000894def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
895 "MMX_PHADDSWrr",
896 "MMX_PHADDWrr",
897 "MMX_PHSUBDrr",
898 "MMX_PHSUBSWrr",
899 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000900 "(V?)PHADDD(Y?)rr",
901 "(V?)PHADDSW(Y?)rr",
902 "(V?)PHADDW(Y?)rr",
903 "(V?)PHSUBD(Y?)rr",
904 "(V?)PHSUBSW(Y?)rr",
905 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000906
907def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
908 let Latency = 3;
909 let NumMicroOps = 3;
910 let ResourceCycles = [2,1];
911}
Craig Topper5a69a002018-03-21 06:28:42 +0000912def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
913 "MMX_PACKSSWBirr",
914 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000915
916def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
917 let Latency = 3;
918 let NumMicroOps = 3;
919 let ResourceCycles = [1,2];
920}
921def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
922
923def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
924 let Latency = 3;
925 let NumMicroOps = 3;
926 let ResourceCycles = [1,2];
927}
Craig Topper5a69a002018-03-21 06:28:42 +0000928def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
929 "RCL(8|16|32|64)ri",
930 "RCR(8|16|32|64)r1",
931 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000932
933def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
934 let Latency = 3;
935 let NumMicroOps = 3;
936 let ResourceCycles = [2,1];
937}
Craig Topper5a69a002018-03-21 06:28:42 +0000938def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
939 "ROR(8|16|32|64)rCL",
940 "SAR(8|16|32|64)rCL",
941 "SHL(8|16|32|64)rCL",
942 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000943
944def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
945 let Latency = 3;
946 let NumMicroOps = 4;
947 let ResourceCycles = [1,1,1,1];
948}
949def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
950
951def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
952 let Latency = 3;
953 let NumMicroOps = 4;
954 let ResourceCycles = [1,1,1,1];
955}
Craig Topper5a69a002018-03-21 06:28:42 +0000956def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
957 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000958
959def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
960 let Latency = 4;
961 let NumMicroOps = 2;
962 let ResourceCycles = [1,1];
963}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000964def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
965 "(V?)CVTSD2SIrr",
966 "(V?)CVTSS2SI64rr",
967 "(V?)CVTSS2SIrr",
968 "(V?)CVTTSD2SI64rr",
969 "(V?)CVTTSD2SIrr",
970 "(V?)CVTTSS2SI64rr",
971 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000972
973def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
974 let Latency = 4;
975 let NumMicroOps = 2;
976 let ResourceCycles = [1,1];
977}
Craig Topper5a69a002018-03-21 06:28:42 +0000978def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
979 "VPSLLDYrr",
980 "VPSLLQYrr",
981 "VPSLLWYrr",
982 "VPSRADYrr",
983 "VPSRAWYrr",
984 "VPSRLDYrr",
985 "VPSRLQYrr",
986 "VPSRLWYrr",
987 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000988
989def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
990 let Latency = 4;
991 let NumMicroOps = 2;
992 let ResourceCycles = [1,1];
993}
994def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
995
996def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
997 let Latency = 4;
998 let NumMicroOps = 2;
999 let ResourceCycles = [1,1];
1000}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001001def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001002def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001003 "MMX_CVTPI2PDirr",
1004 "MMX_CVTPS2PIirr",
1005 "MMX_CVTTPD2PIirr",
1006 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001007 "(V?)CVTDQ2PDrr",
1008 "(V?)CVTPD2DQrr",
1009 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001010 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001011 "(V?)CVTSD2SSrr",
1012 "(V?)CVTSI642SDrr",
1013 "(V?)CVTSI2SDrr",
1014 "(V?)CVTSI2SSrr",
1015 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001016
1017def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1018 let Latency = 4;
1019 let NumMicroOps = 4;
1020}
Craig Topper5a69a002018-03-21 06:28:42 +00001021def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001022
1023def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1024 let Latency = 4;
1025 let NumMicroOps = 3;
1026 let ResourceCycles = [1,1,1];
1027}
1028def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1029
1030def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1031 let Latency = 4;
1032 let NumMicroOps = 3;
1033 let ResourceCycles = [1,1,1];
1034}
Craig Topper5a69a002018-03-21 06:28:42 +00001035def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1036 "ISTT_FP32m",
1037 "ISTT_FP64m",
1038 "IST_F16m",
1039 "IST_F32m",
1040 "IST_FP16m",
1041 "IST_FP32m",
1042 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001043 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001044
1045def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1046 let Latency = 4;
1047 let NumMicroOps = 4;
1048 let ResourceCycles = [4];
1049}
1050def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1051
1052def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1053 let Latency = 4;
1054 let NumMicroOps = 4;
1055 let ResourceCycles = [1,3];
1056}
1057def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1058
1059def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1060 let Latency = 5;
1061 let NumMicroOps = 1;
1062 let ResourceCycles = [1];
1063}
Craig Topper5a69a002018-03-21 06:28:42 +00001064def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1065 "MMX_PMADDWDirr",
1066 "MMX_PMULHRSWrr",
1067 "MMX_PMULHUWirr",
1068 "MMX_PMULHWirr",
1069 "MMX_PMULLWirr",
1070 "MMX_PMULUDQirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001071 "MUL_FPrST0",
1072 "MUL_FST0r",
1073 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001074 "(V?)PCMPGTQ(Y?)rr",
1075 "(V?)PHMINPOSUWrr",
1076 "(V?)PMADDUBSW(Y?)rr",
1077 "(V?)PMADDWD(Y?)rr",
1078 "(V?)PMULDQ(Y?)rr",
1079 "(V?)PMULHRSW(Y?)rr",
1080 "(V?)PMULHUW(Y?)rr",
1081 "(V?)PMULHW(Y?)rr",
1082 "(V?)PMULLW(Y?)rr",
1083 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001084 "(V?)RCPPSr",
1085 "(V?)RCPSSr",
1086 "(V?)RSQRTPSr",
1087 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001088
1089def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1090 let Latency = 5;
1091 let NumMicroOps = 1;
1092 let ResourceCycles = [1];
1093}
Craig Topperf82867c2017-12-13 23:11:30 +00001094def: InstRW<[BWWriteResGroup48],
1095 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1096 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001097
1098def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1099 let Latency = 5;
1100 let NumMicroOps = 1;
1101 let ResourceCycles = [1];
1102}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001103def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001104 "MMX_MOVD64to64rm",
1105 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001106 "MOVSX(16|32|64)rm16",
1107 "MOVSX(16|32|64)rm32",
1108 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001109 "MOVZX(16|32|64)rm16",
1110 "MOVZX(16|32|64)rm8",
1111 "PREFETCHNTA",
1112 "PREFETCHT0",
1113 "PREFETCHT1",
1114 "PREFETCHT2",
1115 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001116 "(V?)LDDQUrm",
1117 "(V?)MOV64toPQIrm",
1118 "(V?)MOVAPDrm",
1119 "(V?)MOVAPSrm",
1120 "(V?)MOVDDUPrm",
1121 "(V?)MOVDI2PDIrm",
1122 "(V?)MOVDQArm",
1123 "(V?)MOVDQUrm",
1124 "(V?)MOVNTDQArm",
1125 "(V?)MOVQI2PQIrm",
1126 "(V?)MOVSDrm",
1127 "(V?)MOVSHDUPrm",
1128 "(V?)MOVSLDUPrm",
1129 "(V?)MOVSSrm",
1130 "(V?)MOVUPDrm",
1131 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001132 "VPBROADCASTDrm",
1133 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001134
1135def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1136 let Latency = 5;
1137 let NumMicroOps = 3;
1138 let ResourceCycles = [1,2];
1139}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001140def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1141 "(V?)HADDPD(Y?)rr",
1142 "(V?)HADDPS(Y?)rr",
1143 "(V?)HSUBPD(Y?)rr",
1144 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001145
1146def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1147 let Latency = 5;
1148 let NumMicroOps = 3;
1149 let ResourceCycles = [1,1,1];
1150}
1151def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1152
1153def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001154 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001155 let NumMicroOps = 3;
1156 let ResourceCycles = [1,1,1];
1157}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001158def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001159
1160def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1161 let Latency = 5;
1162 let NumMicroOps = 4;
1163 let ResourceCycles = [1,1,1,1];
1164}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001165def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1166 "VMASKMOVPS(Y?)mr",
1167 "VPMASKMOVD(Y?)mr",
1168 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001169
1170def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1171 let Latency = 5;
1172 let NumMicroOps = 5;
1173 let ResourceCycles = [1,4];
1174}
1175def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1176
1177def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1178 let Latency = 5;
1179 let NumMicroOps = 5;
1180 let ResourceCycles = [1,4];
1181}
1182def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1183
1184def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1185 let Latency = 5;
1186 let NumMicroOps = 5;
1187 let ResourceCycles = [2,3];
1188}
Craig Topper5a69a002018-03-21 06:28:42 +00001189def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001190
1191def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1192 let Latency = 5;
1193 let NumMicroOps = 6;
1194 let ResourceCycles = [1,1,4];
1195}
Craig Topper5a69a002018-03-21 06:28:42 +00001196def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001197
1198def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1199 let Latency = 6;
1200 let NumMicroOps = 1;
1201 let ResourceCycles = [1];
1202}
Craig Topper5a69a002018-03-21 06:28:42 +00001203def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1204 "LD_F64m",
1205 "LD_F80m",
1206 "VBROADCASTF128",
1207 "VBROADCASTI128",
1208 "VBROADCASTSDYrm",
1209 "VBROADCASTSSYrm",
1210 "VLDDQUYrm",
1211 "VMOVAPDYrm",
1212 "VMOVAPSYrm",
1213 "VMOVDDUPYrm",
1214 "VMOVDQAYrm",
1215 "VMOVDQUYrm",
1216 "VMOVNTDQAYrm",
1217 "VMOVSHDUPYrm",
1218 "VMOVSLDUPYrm",
1219 "VMOVUPDYrm",
1220 "VMOVUPSYrm",
1221 "VPBROADCASTDYrm",
1222 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001223 "(V?)ROUNDPD(Y?)r",
1224 "(V?)ROUNDPS(Y?)r",
1225 "(V?)ROUNDSDr",
1226 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001227
1228def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1229 let Latency = 6;
1230 let NumMicroOps = 2;
1231 let ResourceCycles = [1,1];
1232}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001233def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001234 "MMX_PSLLQrm",
1235 "MMX_PSLLWrm",
1236 "MMX_PSRADrm",
1237 "MMX_PSRAWrm",
1238 "MMX_PSRLDrm",
1239 "MMX_PSRLQrm",
1240 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001241 "VCVTPH2PS(Y?)rm",
1242 "(V?)CVTPS2PDrm",
1243 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001244 "VPSLLVQrm",
1245 "VPSRLVQrm",
1246 "VTESTPDrm",
1247 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001248
1249def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1250 let Latency = 6;
1251 let NumMicroOps = 2;
1252 let ResourceCycles = [1,1];
1253}
Craig Topper5a69a002018-03-21 06:28:42 +00001254def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1255 "VCVTPD2DQYrr",
1256 "VCVTPD2PSYrr",
1257 "VCVTPS2PHYrr",
1258 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001259
1260def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1261 let Latency = 6;
1262 let NumMicroOps = 2;
1263 let ResourceCycles = [1,1];
1264}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001265def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001266 "MMX_PINSRWrm",
1267 "MMX_PSHUFBrm",
1268 "MMX_PSHUFWmi",
1269 "MMX_PUNPCKHBWirm",
1270 "MMX_PUNPCKHDQirm",
1271 "MMX_PUNPCKHWDirm",
1272 "MMX_PUNPCKLBWirm",
1273 "MMX_PUNPCKLDQirm",
1274 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001275 "(V?)ANDNPDrm",
1276 "(V?)ANDNPSrm",
1277 "(V?)ANDPDrm",
1278 "(V?)ANDPSrm",
1279 "(V?)INSERTPSrm",
1280 "(V?)MOVHPDrm",
1281 "(V?)MOVHPSrm",
1282 "(V?)MOVLPDrm",
1283 "(V?)MOVLPSrm",
1284 "(V?)ORPDrm",
1285 "(V?)ORPSrm",
1286 "(V?)PACKSSDWrm",
1287 "(V?)PACKSSWBrm",
1288 "(V?)PACKUSDWrm",
1289 "(V?)PACKUSWBrm",
1290 "(V?)PALIGNRrmi",
1291 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001292 "VPERMILPDmi",
1293 "VPERMILPDrm",
1294 "VPERMILPSmi",
1295 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001296 "(V?)PINSRBrm",
1297 "(V?)PINSRDrm",
1298 "(V?)PINSRQrm",
1299 "(V?)PINSRWrm",
1300 "(V?)PMOVSXBDrm",
1301 "(V?)PMOVSXBQrm",
1302 "(V?)PMOVSXBWrm",
1303 "(V?)PMOVSXDQrm",
1304 "(V?)PMOVSXWDrm",
1305 "(V?)PMOVSXWQrm",
1306 "(V?)PMOVZXBDrm",
1307 "(V?)PMOVZXBQrm",
1308 "(V?)PMOVZXBWrm",
1309 "(V?)PMOVZXDQrm",
1310 "(V?)PMOVZXWDrm",
1311 "(V?)PMOVZXWQrm",
1312 "(V?)PSHUFBrm",
1313 "(V?)PSHUFDmi",
1314 "(V?)PSHUFHWmi",
1315 "(V?)PSHUFLWmi",
1316 "(V?)PUNPCKHBWrm",
1317 "(V?)PUNPCKHDQrm",
1318 "(V?)PUNPCKHQDQrm",
1319 "(V?)PUNPCKHWDrm",
1320 "(V?)PUNPCKLBWrm",
1321 "(V?)PUNPCKLDQrm",
1322 "(V?)PUNPCKLQDQrm",
1323 "(V?)PUNPCKLWDrm",
1324 "(V?)SHUFPDrmi",
1325 "(V?)SHUFPSrmi",
1326 "(V?)UNPCKHPDrm",
1327 "(V?)UNPCKHPSrm",
1328 "(V?)UNPCKLPDrm",
1329 "(V?)UNPCKLPSrm",
1330 "(V?)XORPDrm",
1331 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001332
1333def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1334 let Latency = 6;
1335 let NumMicroOps = 2;
1336 let ResourceCycles = [1,1];
1337}
Craig Topper5a69a002018-03-21 06:28:42 +00001338def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1339 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001340
1341def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1342 let Latency = 6;
1343 let NumMicroOps = 2;
1344 let ResourceCycles = [1,1];
1345}
Craig Topperdfccafe2018-04-18 06:41:25 +00001346def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001347def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1348 ADCX32rm, ADCX64rm,
1349 ADOX32rm, ADOX64rm,
1350 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001351
1352def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1353 let Latency = 6;
1354 let NumMicroOps = 2;
1355 let ResourceCycles = [1,1];
1356}
Craig Topper5a69a002018-03-21 06:28:42 +00001357def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1358 "BLSI(32|64)rm",
1359 "BLSMSK(32|64)rm",
1360 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001361 "MMX_PABSBrm",
1362 "MMX_PABSDrm",
1363 "MMX_PABSWrm",
1364 "MMX_PADDBirm",
1365 "MMX_PADDDirm",
1366 "MMX_PADDQirm",
1367 "MMX_PADDSBirm",
1368 "MMX_PADDSWirm",
1369 "MMX_PADDUSBirm",
1370 "MMX_PADDUSWirm",
1371 "MMX_PADDWirm",
1372 "MMX_PAVGBirm",
1373 "MMX_PAVGWirm",
1374 "MMX_PCMPEQBirm",
1375 "MMX_PCMPEQDirm",
1376 "MMX_PCMPEQWirm",
1377 "MMX_PCMPGTBirm",
1378 "MMX_PCMPGTDirm",
1379 "MMX_PCMPGTWirm",
1380 "MMX_PMAXSWirm",
1381 "MMX_PMAXUBirm",
1382 "MMX_PMINSWirm",
1383 "MMX_PMINUBirm",
1384 "MMX_PSIGNBrm",
1385 "MMX_PSIGNDrm",
1386 "MMX_PSIGNWrm",
1387 "MMX_PSUBBirm",
1388 "MMX_PSUBDirm",
1389 "MMX_PSUBQirm",
1390 "MMX_PSUBSBirm",
1391 "MMX_PSUBSWirm",
1392 "MMX_PSUBUSBirm",
1393 "MMX_PSUBUSWirm",
1394 "MMX_PSUBWirm",
1395 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001396 "(V?)PABSBrm",
1397 "(V?)PABSDrm",
1398 "(V?)PABSWrm",
1399 "(V?)PADDBrm",
1400 "(V?)PADDDrm",
1401 "(V?)PADDQrm",
1402 "(V?)PADDSBrm",
1403 "(V?)PADDSWrm",
1404 "(V?)PADDUSBrm",
1405 "(V?)PADDUSWrm",
1406 "(V?)PADDWrm",
1407 "(V?)PAVGBrm",
1408 "(V?)PAVGWrm",
1409 "(V?)PCMPEQBrm",
1410 "(V?)PCMPEQDrm",
1411 "(V?)PCMPEQQrm",
1412 "(V?)PCMPEQWrm",
1413 "(V?)PCMPGTBrm",
1414 "(V?)PCMPGTDrm",
1415 "(V?)PCMPGTWrm",
1416 "(V?)PMAXSBrm",
1417 "(V?)PMAXSDrm",
1418 "(V?)PMAXSWrm",
1419 "(V?)PMAXUBrm",
1420 "(V?)PMAXUDrm",
1421 "(V?)PMAXUWrm",
1422 "(V?)PMINSBrm",
1423 "(V?)PMINSDrm",
1424 "(V?)PMINSWrm",
1425 "(V?)PMINUBrm",
1426 "(V?)PMINUDrm",
1427 "(V?)PMINUWrm",
1428 "(V?)PSIGNBrm",
1429 "(V?)PSIGNDrm",
1430 "(V?)PSIGNWrm",
1431 "(V?)PSUBBrm",
1432 "(V?)PSUBDrm",
1433 "(V?)PSUBQrm",
1434 "(V?)PSUBSBrm",
1435 "(V?)PSUBSWrm",
1436 "(V?)PSUBUSBrm",
1437 "(V?)PSUBUSWrm",
1438 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001439
1440def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1441 let Latency = 6;
1442 let NumMicroOps = 2;
1443 let ResourceCycles = [1,1];
1444}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001445def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001446 "MMX_PANDirm",
1447 "MMX_PORirm",
1448 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001449 "(V?)BLENDPDrmi",
1450 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001451 "VINSERTF128rm",
1452 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001453 "(V?)PANDNrm",
1454 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001455 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001456 "(V?)PORrm",
1457 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001458
1459def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1460 let Latency = 6;
1461 let NumMicroOps = 2;
1462 let ResourceCycles = [1,1];
1463}
Craig Topper2d451e72018-03-18 08:38:06 +00001464def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001465def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001466
1467def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1468 let Latency = 6;
1469 let NumMicroOps = 4;
1470 let ResourceCycles = [1,1,2];
1471}
Craig Topper5a69a002018-03-21 06:28:42 +00001472def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1473 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001474
1475def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1476 let Latency = 6;
1477 let NumMicroOps = 4;
1478 let ResourceCycles = [1,1,1,1];
1479}
1480def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1481
1482def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1483 let Latency = 6;
1484 let NumMicroOps = 4;
1485 let ResourceCycles = [1,1,1,1];
1486}
Craig Topper5a69a002018-03-21 06:28:42 +00001487def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1488 "BTR(16|32|64)mi8",
1489 "BTS(16|32|64)mi8",
1490 "SAR(8|16|32|64)m1",
1491 "SAR(8|16|32|64)mi",
1492 "SHL(8|16|32|64)m1",
1493 "SHL(8|16|32|64)mi",
1494 "SHR(8|16|32|64)m1",
1495 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001496
1497def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1498 let Latency = 6;
1499 let NumMicroOps = 4;
1500 let ResourceCycles = [1,1,1,1];
1501}
Craig Topperf0d04262018-04-06 16:16:48 +00001502def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1503 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001504
1505def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1506 let Latency = 6;
1507 let NumMicroOps = 6;
1508 let ResourceCycles = [1,5];
1509}
1510def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1511
Gadi Haber323f2e12017-10-24 20:19:47 +00001512def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1513 let Latency = 7;
1514 let NumMicroOps = 2;
1515 let ResourceCycles = [1,1];
1516}
Craig Topper5a69a002018-03-21 06:28:42 +00001517def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1518 "VPSLLQYrm",
1519 "VPSLLVQYrm",
1520 "VPSLLWYrm",
1521 "VPSRADYrm",
1522 "VPSRAWYrm",
1523 "VPSRLDYrm",
1524 "VPSRLQYrm",
1525 "VPSRLVQYrm",
1526 "VPSRLWYrm",
1527 "VTESTPDYrm",
1528 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001529
1530def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1531 let Latency = 7;
1532 let NumMicroOps = 2;
1533 let ResourceCycles = [1,1];
1534}
Craig Topper5a69a002018-03-21 06:28:42 +00001535def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1536 "FCOM64m",
1537 "FCOMP32m",
1538 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001539
1540def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1541 let Latency = 7;
1542 let NumMicroOps = 2;
1543 let ResourceCycles = [1,1];
1544}
Craig Topper5a69a002018-03-21 06:28:42 +00001545def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1546 "VANDNPSYrm",
1547 "VANDPDYrm",
1548 "VANDPSYrm",
1549 "VORPDYrm",
1550 "VORPSYrm",
1551 "VPACKSSDWYrm",
1552 "VPACKSSWBYrm",
1553 "VPACKUSDWYrm",
1554 "VPACKUSWBYrm",
1555 "VPALIGNRYrmi",
1556 "VPBLENDWYrmi",
1557 "VPERMILPDYmi",
1558 "VPERMILPDYrm",
1559 "VPERMILPSYmi",
1560 "VPERMILPSYrm",
1561 "VPSHUFBYrm",
1562 "VPSHUFDYmi",
1563 "VPSHUFHWYmi",
1564 "VPSHUFLWYmi",
1565 "VPUNPCKHBWYrm",
1566 "VPUNPCKHDQYrm",
1567 "VPUNPCKHQDQYrm",
1568 "VPUNPCKHWDYrm",
1569 "VPUNPCKLBWYrm",
1570 "VPUNPCKLDQYrm",
1571 "VPUNPCKLQDQYrm",
1572 "VPUNPCKLWDYrm",
1573 "VSHUFPDYrmi",
1574 "VSHUFPSYrmi",
1575 "VUNPCKHPDYrm",
1576 "VUNPCKHPSYrm",
1577 "VUNPCKLPDYrm",
1578 "VUNPCKLPSYrm",
1579 "VXORPDYrm",
1580 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001581
1582def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1583 let Latency = 7;
1584 let NumMicroOps = 2;
1585 let ResourceCycles = [1,1];
1586}
Craig Topper5a69a002018-03-21 06:28:42 +00001587def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1588 "VPABSDYrm",
1589 "VPABSWYrm",
1590 "VPADDBYrm",
1591 "VPADDDYrm",
1592 "VPADDQYrm",
1593 "VPADDSBYrm",
1594 "VPADDSWYrm",
1595 "VPADDUSBYrm",
1596 "VPADDUSWYrm",
1597 "VPADDWYrm",
1598 "VPAVGBYrm",
1599 "VPAVGWYrm",
1600 "VPCMPEQBYrm",
1601 "VPCMPEQDYrm",
1602 "VPCMPEQQYrm",
1603 "VPCMPEQWYrm",
1604 "VPCMPGTBYrm",
1605 "VPCMPGTDYrm",
1606 "VPCMPGTWYrm",
1607 "VPMAXSBYrm",
1608 "VPMAXSDYrm",
1609 "VPMAXSWYrm",
1610 "VPMAXUBYrm",
1611 "VPMAXUDYrm",
1612 "VPMAXUWYrm",
1613 "VPMINSBYrm",
1614 "VPMINSDYrm",
1615 "VPMINSWYrm",
1616 "VPMINUBYrm",
1617 "VPMINUDYrm",
1618 "VPMINUWYrm",
1619 "VPSIGNBYrm",
1620 "VPSIGNDYrm",
1621 "VPSIGNWYrm",
1622 "VPSUBBYrm",
1623 "VPSUBDYrm",
1624 "VPSUBQYrm",
1625 "VPSUBSBYrm",
1626 "VPSUBSWYrm",
1627 "VPSUBUSBYrm",
1628 "VPSUBUSWYrm",
1629 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001630
1631def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1632 let Latency = 7;
1633 let NumMicroOps = 2;
1634 let ResourceCycles = [1,1];
1635}
Craig Topper5a69a002018-03-21 06:28:42 +00001636def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1637 "VBLENDPSYrmi",
1638 "VPANDNYrm",
1639 "VPANDYrm",
1640 "VPBLENDDYrmi",
1641 "VPORYrm",
1642 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001643
1644def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1645 let Latency = 7;
1646 let NumMicroOps = 3;
1647 let ResourceCycles = [1,2];
1648}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001649def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001650
1651def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1652 let Latency = 7;
1653 let NumMicroOps = 3;
1654 let ResourceCycles = [2,1];
1655}
Craig Topper5a69a002018-03-21 06:28:42 +00001656def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1657 "BLENDVPSrm0",
1658 "MMX_PACKSSDWirm",
1659 "MMX_PACKSSWBirm",
1660 "MMX_PACKUSWBirm",
1661 "PBLENDVBrm0",
1662 "VBLENDVPDrm",
1663 "VBLENDVPSrm",
1664 "VMASKMOVPDrm",
1665 "VMASKMOVPSrm",
1666 "VPBLENDVBrm",
1667 "VPMASKMOVDrm",
1668 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001669
1670def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1671 let Latency = 7;
1672 let NumMicroOps = 3;
1673 let ResourceCycles = [1,2];
1674}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001675def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1676 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001677
1678def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1679 let Latency = 7;
1680 let NumMicroOps = 3;
1681 let ResourceCycles = [1,1,1];
1682}
Craig Topper5a69a002018-03-21 06:28:42 +00001683def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1684 "PSLLQrm",
1685 "PSLLWrm",
1686 "PSRADrm",
1687 "PSRAWrm",
1688 "PSRLDrm",
1689 "PSRLQrm",
1690 "PSRLWrm",
1691 "PTESTrm",
1692 "VPSLLDrm",
1693 "VPSLLQrm",
1694 "VPSLLWrm",
1695 "VPSRADrm",
1696 "VPSRAWrm",
1697 "VPSRLDrm",
1698 "VPSRLQrm",
1699 "VPSRLWrm",
1700 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001701
1702def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1703 let Latency = 7;
1704 let NumMicroOps = 3;
1705 let ResourceCycles = [1,1,1];
1706}
1707def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1708
1709def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1710 let Latency = 7;
1711 let NumMicroOps = 3;
1712 let ResourceCycles = [1,1,1];
1713}
Craig Topper5a69a002018-03-21 06:28:42 +00001714def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001715
1716def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1717 let Latency = 7;
1718 let NumMicroOps = 3;
1719 let ResourceCycles = [1,1,1];
1720}
Craig Topper5a69a002018-03-21 06:28:42 +00001721def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1722 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001723
Gadi Haber323f2e12017-10-24 20:19:47 +00001724def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1725 let Latency = 7;
1726 let NumMicroOps = 3;
1727 let ResourceCycles = [1,1,1];
1728}
Craig Topperf4cd9082018-01-19 05:47:32 +00001729def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001730
1731def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1732 let Latency = 7;
1733 let NumMicroOps = 5;
1734 let ResourceCycles = [1,1,1,2];
1735}
Craig Topper5a69a002018-03-21 06:28:42 +00001736def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1737 "ROL(8|16|32|64)mi",
1738 "ROR(8|16|32|64)m1",
1739 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001740
1741def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1742 let Latency = 7;
1743 let NumMicroOps = 5;
1744 let ResourceCycles = [1,1,1,2];
1745}
Craig Topper5a69a002018-03-21 06:28:42 +00001746def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001747
1748def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1749 let Latency = 7;
1750 let NumMicroOps = 5;
1751 let ResourceCycles = [1,1,1,1,1];
1752}
Craig Topper5a69a002018-03-21 06:28:42 +00001753def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1754 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001755
1756def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1757 let Latency = 7;
1758 let NumMicroOps = 7;
1759 let ResourceCycles = [2,2,1,2];
1760}
Craig Topper2d451e72018-03-18 08:38:06 +00001761def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001762
1763def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1764 let Latency = 8;
1765 let NumMicroOps = 2;
1766 let ResourceCycles = [1,1];
1767}
Craig Topper5a69a002018-03-21 06:28:42 +00001768def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001769def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001770 "MMX_CVTPS2PIirm",
1771 "MMX_CVTTPS2PIirm",
1772 "PDEP(32|64)rm",
1773 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001774 "(V?)ADDPDrm",
1775 "(V?)ADDPSrm",
1776 "(V?)ADDSDrm",
1777 "(V?)ADDSSrm",
1778 "(V?)ADDSUBPDrm",
1779 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001780 "(V?)CVTDQ2PSrm",
1781 "(V?)CVTPS2DQrm",
1782 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001783 "(V?)SUBPDrm",
1784 "(V?)SUBPSrm",
1785 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001786 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001787
1788def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperdfccafe2018-04-18 06:41:25 +00001789 let Latency = 8; // FIXME: I think this should be 9
Gadi Haber323f2e12017-10-24 20:19:47 +00001790 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001791 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001792}
Craig Topperdfccafe2018-04-18 06:41:25 +00001793def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>; // TODO: Is IMUL16rm really 3 uops?
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
1795def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1796 let Latency = 8;
1797 let NumMicroOps = 5;
1798}
Craig Topper5a69a002018-03-21 06:28:42 +00001799def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001800
Gadi Haber323f2e12017-10-24 20:19:47 +00001801def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1802 let Latency = 8;
1803 let NumMicroOps = 2;
1804 let ResourceCycles = [1,1];
1805}
Craig Topper5a69a002018-03-21 06:28:42 +00001806def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1807 "VPMOVSXBQYrm",
1808 "VPMOVSXBWYrm",
1809 "VPMOVSXDQYrm",
1810 "VPMOVSXWDYrm",
1811 "VPMOVSXWQYrm",
1812 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001813
1814def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1815 let Latency = 8;
1816 let NumMicroOps = 2;
1817 let ResourceCycles = [1,1];
1818}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001819def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1820 "(V?)MULPSrm",
1821 "(V?)MULSDrm",
1822 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001823
1824def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1825 let Latency = 8;
1826 let NumMicroOps = 3;
1827 let ResourceCycles = [2,1];
1828}
Craig Topper5a69a002018-03-21 06:28:42 +00001829def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1830 "VBLENDVPSYrm",
1831 "VMASKMOVPDYrm",
1832 "VMASKMOVPSYrm",
1833 "VPBLENDVBYrm",
1834 "VPMASKMOVDYrm",
1835 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001836
1837def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1838 let Latency = 8;
1839 let NumMicroOps = 4;
1840 let ResourceCycles = [2,1,1];
1841}
Craig Topper5a69a002018-03-21 06:28:42 +00001842def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1843 "VPSRAVDrm",
1844 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001845
1846def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1847 let Latency = 8;
1848 let NumMicroOps = 4;
1849 let ResourceCycles = [2,1,1];
1850}
Craig Topper5a69a002018-03-21 06:28:42 +00001851def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1852 "MMX_PHADDSWrm",
1853 "MMX_PHADDWrm",
1854 "MMX_PHSUBDrm",
1855 "MMX_PHSUBSWrm",
1856 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001857 "(V?)PHADDDrm",
1858 "(V?)PHADDSWrm",
1859 "(V?)PHADDWrm",
1860 "(V?)PHSUBDrm",
1861 "(V?)PHSUBSWrm",
1862 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001863
1864def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1865 let Latency = 8;
1866 let NumMicroOps = 5;
1867 let ResourceCycles = [1,1,1,2];
1868}
Craig Topper5a69a002018-03-21 06:28:42 +00001869def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1870 "RCL(8|16|32|64)mi",
1871 "RCR(8|16|32|64)m1",
1872 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001873
1874def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1875 let Latency = 8;
1876 let NumMicroOps = 5;
1877 let ResourceCycles = [1,1,2,1];
1878}
Craig Topper13a16502018-03-19 00:56:09 +00001879def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001880
1881def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1882 let Latency = 8;
1883 let NumMicroOps = 6;
1884 let ResourceCycles = [1,1,1,3];
1885}
Craig Topper9f834812018-04-01 21:54:24 +00001886def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001887
1888def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1889 let Latency = 8;
1890 let NumMicroOps = 6;
1891 let ResourceCycles = [1,1,1,2,1];
1892}
Craig Topper9f834812018-04-01 21:54:24 +00001893def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001894 "CMPXCHG(8|16|32|64)rm",
1895 "ROL(8|16|32|64)mCL",
1896 "SAR(8|16|32|64)mCL",
1897 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001898 "SHL(8|16|32|64)mCL",
1899 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001900def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1901 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001902
1903def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1904 let Latency = 9;
1905 let NumMicroOps = 2;
1906 let ResourceCycles = [1,1];
1907}
Craig Topper5a69a002018-03-21 06:28:42 +00001908def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1909 "ADD_F64m",
1910 "ILD_F16m",
1911 "ILD_F32m",
1912 "ILD_F64m",
1913 "SUBR_F32m",
1914 "SUBR_F64m",
1915 "SUB_F32m",
1916 "SUB_F64m",
1917 "VADDPDYrm",
1918 "VADDPSYrm",
1919 "VADDSUBPDYrm",
1920 "VADDSUBPSYrm",
1921 "VCMPPDYrmi",
1922 "VCMPPSYrmi",
1923 "VCVTDQ2PSYrm",
1924 "VCVTPS2DQYrm",
1925 "VCVTTPS2DQYrm",
1926 "VMAX(C?)PDYrm",
1927 "VMAX(C?)PSYrm",
1928 "VMIN(C?)PDYrm",
1929 "VMIN(C?)PSYrm",
1930 "VSUBPDYrm",
1931 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001932
1933def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1934 let Latency = 9;
1935 let NumMicroOps = 2;
1936 let ResourceCycles = [1,1];
1937}
Craig Topper5a69a002018-03-21 06:28:42 +00001938def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1939 "VPERM2I128rm",
1940 "VPERMDYrm",
1941 "VPERMPDYmi",
1942 "VPERMPSYrm",
1943 "VPERMQYmi",
1944 "VPMOVZXBDYrm",
1945 "VPMOVZXBQYrm",
1946 "VPMOVZXBWYrm",
1947 "VPMOVZXDQYrm",
1948 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001949
1950def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1951 let Latency = 9;
1952 let NumMicroOps = 2;
1953 let ResourceCycles = [1,1];
1954}
Craig Topper5a69a002018-03-21 06:28:42 +00001955def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1956 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001957
1958def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1959 let Latency = 9;
1960 let NumMicroOps = 3;
1961 let ResourceCycles = [1,1,1];
1962}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001963def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001964
1965def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1966 let Latency = 9;
1967 let NumMicroOps = 3;
1968 let ResourceCycles = [1,1,1];
1969}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001970def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1971 "(V?)CVTSD2SIrm",
1972 "(V?)CVTSS2SI64rm",
1973 "(V?)CVTSS2SIrm",
1974 "(V?)CVTTSD2SI64rm",
1975 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001976 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001977 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001978
1979def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1980 let Latency = 9;
1981 let NumMicroOps = 3;
1982 let ResourceCycles = [1,1,1];
1983}
1984def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1985
1986def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1987 let Latency = 9;
1988 let NumMicroOps = 3;
1989 let ResourceCycles = [1,1,1];
1990}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001991def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001992def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001993 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001994 "CVTTPD2DQrm",
1995 "MMX_CVTPD2PIirm",
1996 "MMX_CVTPI2PDirm",
1997 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001998 "(V?)CVTDQ2PDrm",
1999 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002000
2001def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2002 let Latency = 9;
2003 let NumMicroOps = 3;
2004 let ResourceCycles = [1,1,1];
2005}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002006def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2007 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002008
2009def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2010 let Latency = 9;
2011 let NumMicroOps = 4;
2012 let ResourceCycles = [2,1,1];
2013}
Craig Topper5a69a002018-03-21 06:28:42 +00002014def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2015 "VPSRAVDYrm",
2016 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002017
2018def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2019 let Latency = 9;
2020 let NumMicroOps = 4;
2021 let ResourceCycles = [2,1,1];
2022}
Craig Topper5a69a002018-03-21 06:28:42 +00002023def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2024 "VPHADDSWYrm",
2025 "VPHADDWYrm",
2026 "VPHSUBDYrm",
2027 "VPHSUBSWYrm",
2028 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002029
2030def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2031 let Latency = 9;
2032 let NumMicroOps = 4;
2033 let ResourceCycles = [1,1,1,1];
2034}
Craig Topper5a69a002018-03-21 06:28:42 +00002035def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2036 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002037
2038def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2039 let Latency = 9;
2040 let NumMicroOps = 5;
2041 let ResourceCycles = [1,1,3];
2042}
2043def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2044
2045def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2046 let Latency = 9;
2047 let NumMicroOps = 5;
2048 let ResourceCycles = [1,2,1,1];
2049}
Craig Topper5a69a002018-03-21 06:28:42 +00002050def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2051 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002052
Gadi Haber323f2e12017-10-24 20:19:47 +00002053def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2054 let Latency = 10;
2055 let NumMicroOps = 2;
2056 let ResourceCycles = [1,1];
2057}
Craig Topper5a69a002018-03-21 06:28:42 +00002058def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2059 "MMX_PMADDWDirm",
2060 "MMX_PMULHRSWrm",
2061 "MMX_PMULHUWirm",
2062 "MMX_PMULHWirm",
2063 "MMX_PMULLWirm",
2064 "MMX_PMULUDQirm",
2065 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002066 "(V?)PCMPGTQrm",
2067 "(V?)PHMINPOSUWrm",
2068 "(V?)PMADDUBSWrm",
2069 "(V?)PMADDWDrm",
2070 "(V?)PMULDQrm",
2071 "(V?)PMULHRSWrm",
2072 "(V?)PMULHUWrm",
2073 "(V?)PMULHWrm",
2074 "(V?)PMULLWrm",
2075 "(V?)PMULUDQrm",
2076 "(V?)PSADBWrm",
2077 "(V?)RCPPSm",
2078 "(V?)RCPSSm",
2079 "(V?)RSQRTPSm",
2080 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002081
2082def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2083 let Latency = 10;
2084 let NumMicroOps = 2;
2085 let ResourceCycles = [1,1];
2086}
Craig Topperf82867c2017-12-13 23:11:30 +00002087def: InstRW<[BWWriteResGroup116],
2088 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2089 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002090
2091def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2092 let Latency = 10;
2093 let NumMicroOps = 3;
2094 let ResourceCycles = [2,1];
2095}
Craig Topper5a69a002018-03-21 06:28:42 +00002096def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2097 "FICOM32m",
2098 "FICOMP16m",
2099 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002100
2101def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2102 let Latency = 10;
2103 let NumMicroOps = 3;
2104 let ResourceCycles = [1,1,1];
2105}
2106def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2107
2108def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2109 let Latency = 10;
2110 let NumMicroOps = 4;
2111 let ResourceCycles = [1,2,1];
2112}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002113def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2114 "(V?)HADDPSrm",
2115 "(V?)HSUBPDrm",
2116 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002117
2118def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2119 let Latency = 10;
2120 let NumMicroOps = 4;
2121 let ResourceCycles = [1,1,1,1];
2122}
2123def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2124
2125def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002126 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002127 let NumMicroOps = 4;
2128 let ResourceCycles = [1,1,1,1];
2129}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002130def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002131
Craig Topper8104f262018-04-02 05:33:28 +00002132def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002133 let Latency = 11;
2134 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002135 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002136}
Craig Topper8104f262018-04-02 05:33:28 +00002137def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2138
2139def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2140 let Latency = 11;
2141 let NumMicroOps = 1;
2142 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2143}
2144def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002145
2146def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2147 let Latency = 11;
2148 let NumMicroOps = 2;
2149 let ResourceCycles = [1,1];
2150}
Craig Topper5a69a002018-03-21 06:28:42 +00002151def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2152 "MUL_F64m",
2153 "VPCMPGTQYrm",
2154 "VPMADDUBSWYrm",
2155 "VPMADDWDYrm",
2156 "VPMULDQYrm",
2157 "VPMULHRSWYrm",
2158 "VPMULHUWYrm",
2159 "VPMULHWYrm",
2160 "VPMULLWYrm",
2161 "VPMULUDQYrm",
2162 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002163
2164def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2165 let Latency = 11;
2166 let NumMicroOps = 2;
2167 let ResourceCycles = [1,1];
2168}
Craig Topperf82867c2017-12-13 23:11:30 +00002169def: InstRW<[BWWriteResGroup124],
2170 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002171
Gadi Haber323f2e12017-10-24 20:19:47 +00002172def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2173 let Latency = 11;
2174 let NumMicroOps = 3;
2175 let ResourceCycles = [2,1];
2176}
Craig Topper5a69a002018-03-21 06:28:42 +00002177def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2178 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002179
2180def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2181 let Latency = 11;
2182 let NumMicroOps = 3;
2183 let ResourceCycles = [2,1];
2184}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002185def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2186 "(V?)ROUNDPSm",
2187 "(V?)ROUNDSDm",
2188 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002189
2190def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2191 let Latency = 11;
2192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,1,1];
2194}
2195def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2196
2197def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2198 let Latency = 11;
2199 let NumMicroOps = 4;
2200 let ResourceCycles = [1,2,1];
2201}
Craig Topper5a69a002018-03-21 06:28:42 +00002202def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2203 "VHADDPSYrm",
2204 "VHSUBPDYrm",
2205 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002206
2207def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2208 let Latency = 11;
2209 let NumMicroOps = 6;
2210 let ResourceCycles = [1,1,1,1,2];
2211}
Craig Topper5a69a002018-03-21 06:28:42 +00002212def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2213 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002214
2215def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2216 let Latency = 11;
2217 let NumMicroOps = 7;
2218 let ResourceCycles = [2,2,3];
2219}
Craig Topper5a69a002018-03-21 06:28:42 +00002220def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2221 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002222
2223def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2224 let Latency = 11;
2225 let NumMicroOps = 9;
2226 let ResourceCycles = [1,4,1,3];
2227}
2228def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2229
2230def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2231 let Latency = 11;
2232 let NumMicroOps = 11;
2233 let ResourceCycles = [2,9];
2234}
Craig Topper2d451e72018-03-18 08:38:06 +00002235def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2236def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002237
Gadi Haber323f2e12017-10-24 20:19:47 +00002238def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2239 let Latency = 12;
2240 let NumMicroOps = 3;
2241 let ResourceCycles = [2,1];
2242}
Craig Topper5a69a002018-03-21 06:28:42 +00002243def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2244 "ADD_FI32m",
2245 "SUBR_FI16m",
2246 "SUBR_FI32m",
2247 "SUB_FI16m",
2248 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002249 "VROUNDPDYm",
2250 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002251
2252def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2253 let Latency = 12;
2254 let NumMicroOps = 4;
2255 let ResourceCycles = [1,2,1];
2256}
Craig Topper5a69a002018-03-21 06:28:42 +00002257def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002258
Craig Topper8104f262018-04-02 05:33:28 +00002259def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002260 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002261 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002262 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002263}
Craig Topper8104f262018-04-02 05:33:28 +00002264def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2265
2266def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2267 let Latency = 11;
2268 let NumMicroOps = 1;
2269 let ResourceCycles = [1,4];
2270}
2271def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002272
2273def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2274 let Latency = 13;
2275 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002276 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002277}
2278def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2279
Craig Topper8104f262018-04-02 05:33:28 +00002280def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002281 let Latency = 14;
2282 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002283 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002284}
Craig Topper8104f262018-04-02 05:33:28 +00002285def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2286
2287def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2288 let Latency = 14;
2289 let NumMicroOps = 1;
2290 let ResourceCycles = [1,4];
2291}
2292def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002293
Gadi Haber323f2e12017-10-24 20:19:47 +00002294def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2295 let Latency = 14;
2296 let NumMicroOps = 3;
2297 let ResourceCycles = [1,1,1];
2298}
Craig Topper5a69a002018-03-21 06:28:42 +00002299def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2300 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002301
2302def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2303 let Latency = 14;
2304 let NumMicroOps = 4;
2305 let ResourceCycles = [2,1,1];
2306}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002307def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002308
2309def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2310 let Latency = 14;
2311 let NumMicroOps = 4;
2312 let ResourceCycles = [1,1,1,1];
2313}
Craig Topper5a69a002018-03-21 06:28:42 +00002314def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002315
2316def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2317 let Latency = 14;
2318 let NumMicroOps = 8;
2319 let ResourceCycles = [2,2,1,3];
2320}
2321def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2322
2323def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2324 let Latency = 14;
2325 let NumMicroOps = 10;
2326 let ResourceCycles = [2,3,1,4];
2327}
2328def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2329
2330def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2331 let Latency = 14;
2332 let NumMicroOps = 12;
2333 let ResourceCycles = [2,1,4,5];
2334}
2335def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2336
2337def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2338 let Latency = 15;
2339 let NumMicroOps = 1;
2340 let ResourceCycles = [1];
2341}
Craig Topper5a69a002018-03-21 06:28:42 +00002342def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2343 "DIVR_FST0r",
2344 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002345
Gadi Haber323f2e12017-10-24 20:19:47 +00002346def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2347 let Latency = 15;
2348 let NumMicroOps = 10;
2349 let ResourceCycles = [1,1,1,4,1,2];
2350}
Craig Topper13a16502018-03-19 00:56:09 +00002351def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002352
Craig Topper8104f262018-04-02 05:33:28 +00002353def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002354 let Latency = 16;
2355 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002356 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002357}
Craig Topper5a69a002018-03-21 06:28:42 +00002358def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2359 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002360
2361def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2362 let Latency = 16;
2363 let NumMicroOps = 3;
2364 let ResourceCycles = [2,1];
2365}
2366def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2367
Gadi Haber323f2e12017-10-24 20:19:47 +00002368def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2369 let Latency = 16;
2370 let NumMicroOps = 14;
2371 let ResourceCycles = [1,1,1,4,2,5];
2372}
2373def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2374
2375def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2376 let Latency = 16;
2377 let NumMicroOps = 16;
2378 let ResourceCycles = [16];
2379}
Craig Topper5a69a002018-03-21 06:28:42 +00002380def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002381
Craig Topper8104f262018-04-02 05:33:28 +00002382def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002383 let Latency = 17;
2384 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002385 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002386}
2387def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2388
2389def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2390 let Latency = 17;
2391 let NumMicroOps = 4;
2392 let ResourceCycles = [2,1,1];
2393}
Craig Topper5a69a002018-03-21 06:28:42 +00002394def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2395 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002396
Craig Topper8104f262018-04-02 05:33:28 +00002397def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002398 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002399 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002400 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002401}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002402def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2403 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002404
Gadi Haber323f2e12017-10-24 20:19:47 +00002405def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2406 let Latency = 18;
2407 let NumMicroOps = 8;
2408 let ResourceCycles = [1,1,1,5];
2409}
Craig Topper5a69a002018-03-21 06:28:42 +00002410def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002411def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002412
2413def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2414 let Latency = 18;
2415 let NumMicroOps = 11;
2416 let ResourceCycles = [2,1,1,3,1,3];
2417}
Craig Topper13a16502018-03-19 00:56:09 +00002418def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002419
Craig Topper8104f262018-04-02 05:33:28 +00002420def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002421 let Latency = 19;
2422 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002423 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002424}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002425def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002426 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002427
Gadi Haber323f2e12017-10-24 20:19:47 +00002428def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2429 let Latency = 19;
2430 let NumMicroOps = 5;
2431 let ResourceCycles = [2,1,1,1];
2432}
Craig Topper5a69a002018-03-21 06:28:42 +00002433def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002434
Gadi Haber323f2e12017-10-24 20:19:47 +00002435def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2436 let Latency = 20;
2437 let NumMicroOps = 1;
2438 let ResourceCycles = [1];
2439}
Craig Topper5a69a002018-03-21 06:28:42 +00002440def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2441 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002442 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002443
2444def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2445 let Latency = 20;
2446 let NumMicroOps = 5;
2447 let ResourceCycles = [2,1,1,1];
2448}
2449def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2450
2451def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2452 let Latency = 20;
2453 let NumMicroOps = 8;
2454 let ResourceCycles = [1,1,1,1,1,1,2];
2455}
Craig Topper5a69a002018-03-21 06:28:42 +00002456def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2457 "INSL",
2458 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002459
Craig Topper8104f262018-04-02 05:33:28 +00002460def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002461 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002462 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002463 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002464}
Craig Topper8104f262018-04-02 05:33:28 +00002465def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2466
2467def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2468 let Latency = 16;
2469 let NumMicroOps = 1;
2470 let ResourceCycles = [1,8];
2471}
2472def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002473
2474def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2475 let Latency = 21;
2476 let NumMicroOps = 2;
2477 let ResourceCycles = [1,1];
2478}
Craig Topper5a69a002018-03-21 06:28:42 +00002479def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2480 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002481
Craig Topper8104f262018-04-02 05:33:28 +00002482def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002483 let Latency = 21;
2484 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002485 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002486}
2487def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2488
2489def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2490 let Latency = 21;
2491 let NumMicroOps = 19;
2492 let ResourceCycles = [2,1,4,1,1,4,6];
2493}
2494def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2495
2496def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2497 let Latency = 22;
2498 let NumMicroOps = 18;
2499 let ResourceCycles = [1,1,16];
2500}
2501def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2502
Craig Topper8104f262018-04-02 05:33:28 +00002503def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002504 let Latency = 23;
2505 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002506 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002507}
2508def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2509
Craig Topper8104f262018-04-02 05:33:28 +00002510def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002511 let Latency = 23;
2512 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002513 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002514}
2515def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2516
Gadi Haber323f2e12017-10-24 20:19:47 +00002517def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2518 let Latency = 23;
2519 let NumMicroOps = 19;
2520 let ResourceCycles = [3,1,15];
2521}
Craig Topper391c6f92017-12-10 01:24:08 +00002522def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002523
2524def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2525 let Latency = 24;
2526 let NumMicroOps = 3;
2527 let ResourceCycles = [1,1,1];
2528}
Craig Topper5a69a002018-03-21 06:28:42 +00002529def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2530 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002531
Craig Topper8104f262018-04-02 05:33:28 +00002532def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002533 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002534 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002535 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002536}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002537def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2538 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002539
2540def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2541 let Latency = 26;
2542 let NumMicroOps = 2;
2543 let ResourceCycles = [1,1];
2544}
Craig Topper5a69a002018-03-21 06:28:42 +00002545def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002546 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002547
Craig Topper8104f262018-04-02 05:33:28 +00002548def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002549 let Latency = 27;
2550 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002551 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002552}
2553def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2554
2555def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2556 let Latency = 29;
2557 let NumMicroOps = 3;
2558 let ResourceCycles = [1,1,1];
2559}
Craig Topper5a69a002018-03-21 06:28:42 +00002560def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2561 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002562
Craig Topper8104f262018-04-02 05:33:28 +00002563def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002564 let Latency = 29;
2565 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002566 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002567}
2568def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2569
2570def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2571 let Latency = 22;
2572 let NumMicroOps = 7;
2573 let ResourceCycles = [1,3,2,1];
2574}
Craig Topper17a31182017-12-16 18:35:29 +00002575def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002576
2577def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2578 let Latency = 23;
2579 let NumMicroOps = 9;
2580 let ResourceCycles = [1,3,4,1];
2581}
Craig Topper17a31182017-12-16 18:35:29 +00002582def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002583
2584def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2585 let Latency = 24;
2586 let NumMicroOps = 9;
2587 let ResourceCycles = [1,5,2,1];
2588}
Craig Topper17a31182017-12-16 18:35:29 +00002589def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002590
2591def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2592 let Latency = 25;
2593 let NumMicroOps = 7;
2594 let ResourceCycles = [1,3,2,1];
2595}
Craig Topper17a31182017-12-16 18:35:29 +00002596def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2597 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002598
2599def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2600 let Latency = 26;
2601 let NumMicroOps = 9;
2602 let ResourceCycles = [1,5,2,1];
2603}
Craig Topper17a31182017-12-16 18:35:29 +00002604def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002605
2606def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2607 let Latency = 26;
2608 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002609 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002610}
Craig Topper17a31182017-12-16 18:35:29 +00002611def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002612
2613def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2614 let Latency = 27;
2615 let NumMicroOps = 9;
2616 let ResourceCycles = [1,5,2,1];
2617}
Craig Topper17a31182017-12-16 18:35:29 +00002618def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002619
Gadi Haber323f2e12017-10-24 20:19:47 +00002620def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2621 let Latency = 29;
2622 let NumMicroOps = 27;
2623 let ResourceCycles = [1,5,1,1,19];
2624}
2625def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2626
2627def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2628 let Latency = 30;
2629 let NumMicroOps = 28;
2630 let ResourceCycles = [1,6,1,1,19];
2631}
Craig Topper2d451e72018-03-18 08:38:06 +00002632def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002633
2634def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2635 let Latency = 31;
2636 let NumMicroOps = 31;
2637 let ResourceCycles = [8,1,21,1];
2638}
2639def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2640
Craig Topper8104f262018-04-02 05:33:28 +00002641def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2642 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002643 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002644 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002645}
2646def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2647
2648def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2649 let Latency = 34;
2650 let NumMicroOps = 8;
2651 let ResourceCycles = [2,2,2,1,1];
2652}
Craig Topper13a16502018-03-19 00:56:09 +00002653def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002654
2655def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2656 let Latency = 34;
2657 let NumMicroOps = 23;
2658 let ResourceCycles = [1,5,3,4,10];
2659}
Craig Topper5a69a002018-03-21 06:28:42 +00002660def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2661 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002662
2663def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2664 let Latency = 35;
2665 let NumMicroOps = 8;
2666 let ResourceCycles = [2,2,2,1,1];
2667}
Craig Topper13a16502018-03-19 00:56:09 +00002668def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002669
2670def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2671 let Latency = 35;
2672 let NumMicroOps = 23;
2673 let ResourceCycles = [1,5,2,1,4,10];
2674}
Craig Topper5a69a002018-03-21 06:28:42 +00002675def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2676 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002677
Craig Topper8104f262018-04-02 05:33:28 +00002678def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2679 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002680 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002681 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002682}
2683def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2684
2685def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2686 let Latency = 42;
2687 let NumMicroOps = 22;
2688 let ResourceCycles = [2,20];
2689}
Craig Topper2d451e72018-03-18 08:38:06 +00002690def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002691
2692def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2693 let Latency = 60;
2694 let NumMicroOps = 64;
2695 let ResourceCycles = [2,2,8,1,10,2,39];
2696}
2697def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002698
2699def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2700 let Latency = 63;
2701 let NumMicroOps = 88;
2702 let ResourceCycles = [4,4,31,1,2,1,45];
2703}
Craig Topper2d451e72018-03-18 08:38:06 +00002704def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002705
2706def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2707 let Latency = 63;
2708 let NumMicroOps = 90;
2709 let ResourceCycles = [4,2,33,1,2,1,47];
2710}
Craig Topper2d451e72018-03-18 08:38:06 +00002711def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002712
2713def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2714 let Latency = 75;
2715 let NumMicroOps = 15;
2716 let ResourceCycles = [6,3,6];
2717}
2718def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2719
2720def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2721 let Latency = 80;
2722 let NumMicroOps = 32;
2723 let ResourceCycles = [7,7,3,3,1,11];
2724}
2725def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2726
2727def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2728 let Latency = 115;
2729 let NumMicroOps = 100;
2730 let ResourceCycles = [9,9,11,8,1,11,21,30];
2731}
2732def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002733
2734} // SchedModel
2735