blob: 5139f978fb563fdfc87ec14ccde11e58d77fd93b [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",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000492 "MMX_PABS(B|D|W)rr",
493 "MMX_PADD(B|D|Q|W)irr",
494 "MMX_PADDS(B|W)irr",
495 "MMX_PADDUS(B|W)irr",
496 "MMX_PAVG(B|W)irr",
497 "MMX_PCMPEQ(B|D|W)irr",
498 "MMX_PCMPGT(B|D|W)irr",
499 "MMX_P(MAX|MIN)SWirr",
500 "MMX_P(MAX|MIN)UBirr",
501 "MMX_PSIGN(B|D|W)rr",
502 "MMX_PSUB(B|D|Q|W)irr",
503 "MMX_PSUBS(B|W)irr",
504 "MMX_PSUBUS(B|W)irr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000505 "(V?)PABSB(Y?)rr",
506 "(V?)PABSD(Y?)rr",
507 "(V?)PABSW(Y?)rr",
508 "(V?)PADDB(Y?)rr",
509 "(V?)PADDD(Y?)rr",
510 "(V?)PADDQ(Y?)rr",
511 "(V?)PADDSB(Y?)rr",
512 "(V?)PADDSW(Y?)rr",
513 "(V?)PADDUSB(Y?)rr",
514 "(V?)PADDUSW(Y?)rr",
515 "(V?)PADDW(Y?)rr",
516 "(V?)PAVGB(Y?)rr",
517 "(V?)PAVGW(Y?)rr",
518 "(V?)PCMPEQB(Y?)rr",
519 "(V?)PCMPEQD(Y?)rr",
520 "(V?)PCMPEQQ(Y?)rr",
521 "(V?)PCMPEQW(Y?)rr",
522 "(V?)PCMPGTB(Y?)rr",
523 "(V?)PCMPGTD(Y?)rr",
524 "(V?)PCMPGTW(Y?)rr",
525 "(V?)PMAXSB(Y?)rr",
526 "(V?)PMAXSD(Y?)rr",
527 "(V?)PMAXSW(Y?)rr",
528 "(V?)PMAXUB(Y?)rr",
529 "(V?)PMAXUD(Y?)rr",
530 "(V?)PMAXUW(Y?)rr",
531 "(V?)PMINSB(Y?)rr",
532 "(V?)PMINSD(Y?)rr",
533 "(V?)PMINSW(Y?)rr",
534 "(V?)PMINUB(Y?)rr",
535 "(V?)PMINUD(Y?)rr",
536 "(V?)PMINUW(Y?)rr",
537 "(V?)PSIGNB(Y?)rr",
538 "(V?)PSIGND(Y?)rr",
539 "(V?)PSIGNW(Y?)rr",
540 "(V?)PSUBB(Y?)rr",
541 "(V?)PSUBD(Y?)rr",
542 "(V?)PSUBQ(Y?)rr",
543 "(V?)PSUBSB(Y?)rr",
544 "(V?)PSUBSW(Y?)rr",
545 "(V?)PSUBUSB(Y?)rr",
546 "(V?)PSUBUSW(Y?)rr",
547 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000548
549def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
550 let Latency = 1;
551 let NumMicroOps = 1;
552 let ResourceCycles = [1];
553}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000554def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000555 "MMX_PANDNirr",
556 "MMX_PANDirr",
557 "MMX_PORirr",
558 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000559 "(V?)BLENDPD(Y?)rri",
560 "(V?)BLENDPS(Y?)rri",
561 "(V?)MOVDQA(Y?)rr",
562 "(V?)MOVDQU(Y?)rr",
563 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000564 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000565 "(V?)PANDN(Y?)rr",
566 "(V?)PAND(Y?)rr",
567 "VPBLENDD(Y?)rri",
568 "(V?)POR(Y?)rr",
569 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000570
571def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
572 let Latency = 1;
573 let NumMicroOps = 1;
574 let ResourceCycles = [1];
575}
Craig Topperdfccafe2018-04-18 06:41:25 +0000576def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000577 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000578 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000579 "SGDT64m",
580 "SIDT64m",
581 "SLDT64m",
582 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000583 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000584 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000585
586def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
587 let Latency = 1;
588 let NumMicroOps = 2;
589 let ResourceCycles = [1,1];
590}
Craig Topper5a69a002018-03-21 06:28:42 +0000591def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
592 "MMX_MOVD64from64rm",
593 "MMX_MOVD64mr",
594 "MMX_MOVNTQmr",
595 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000596 "MOVNTI_64mr",
597 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000598 "ST_FP32m",
599 "ST_FP64m",
600 "ST_FP80m",
601 "VEXTRACTF128mr",
602 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000603 "(V?)MOVAPD(Y?)mr",
604 "(V?)MOVAPS(Y?)mr",
605 "(V?)MOVDQA(Y?)mr",
606 "(V?)MOVDQU(Y?)mr",
607 "(V?)MOVHPDmr",
608 "(V?)MOVHPSmr",
609 "(V?)MOVLPDmr",
610 "(V?)MOVLPSmr",
611 "(V?)MOVNTDQ(V?)mr",
612 "(V?)MOVNTPD(V?)mr",
613 "(V?)MOVNTPS(V?)mr",
614 "(V?)MOVPDI2DImr",
615 "(V?)MOVPQI2QImr",
616 "(V?)MOVPQIto64mr",
617 "(V?)MOVSDmr",
618 "(V?)MOVSSmr",
619 "(V?)MOVUPD(Y?)mr",
620 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000621
622def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
623 let Latency = 2;
624 let NumMicroOps = 2;
625 let ResourceCycles = [2];
626}
Craig Topper5a69a002018-03-21 06:28:42 +0000627def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
628 "BLENDVPSrr0",
629 "MMX_PINSRWrr",
630 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000631 "VBLENDVPD(Y?)rr",
632 "VBLENDVPS(Y?)rr",
633 "VPBLENDVB(Y?)rr",
634 "(V?)PINSRBrr",
635 "(V?)PINSRDrr",
636 "(V?)PINSRQrr",
637 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000638
639def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
640 let Latency = 2;
641 let NumMicroOps = 2;
642 let ResourceCycles = [2];
643}
644def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
645
646def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
647 let Latency = 2;
648 let NumMicroOps = 2;
649 let ResourceCycles = [2];
650}
Craig Topper5a69a002018-03-21 06:28:42 +0000651def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
652 "ROL(8|16|32|64)ri",
653 "ROR(8|16|32|64)r1",
654 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000655
656def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
657 let Latency = 2;
658 let NumMicroOps = 2;
659 let ResourceCycles = [2];
660}
Craig Topper5a69a002018-03-21 06:28:42 +0000661def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
662 "MFENCE",
663 "WAIT",
664 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000665
666def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
667 let Latency = 2;
668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000671def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
672 "VCVTPH2PS(Y?)rr",
673 "(V?)CVTPS2PDrr",
674 "(V?)CVTSS2SDrr",
675 "(V?)EXTRACTPSrr",
676 "(V?)PEXTRBrr",
677 "(V?)PEXTRDrr",
678 "(V?)PEXTRQrr",
679 "(V?)PEXTRWrr",
680 "(V?)PSLLDrr",
681 "(V?)PSLLQrr",
682 "(V?)PSLLWrr",
683 "(V?)PSRADrr",
684 "(V?)PSRAWrr",
685 "(V?)PSRLDrr",
686 "(V?)PSRLQrr",
687 "(V?)PSRLWrr",
688 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000689
690def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
691 let Latency = 2;
692 let NumMicroOps = 2;
693 let ResourceCycles = [1,1];
694}
695def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
696
697def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
698 let Latency = 2;
699 let NumMicroOps = 2;
700 let ResourceCycles = [1,1];
701}
702def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
703
704def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
705 let Latency = 2;
706 let NumMicroOps = 2;
707 let ResourceCycles = [1,1];
708}
709def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
710
711def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
712 let Latency = 2;
713 let NumMicroOps = 2;
714 let ResourceCycles = [1,1];
715}
Craig Topper498875f2018-04-04 17:54:19 +0000716def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
717
718def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
719 let Latency = 1;
720 let NumMicroOps = 1;
721 let ResourceCycles = [1];
722}
723def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000724
725def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
726 let Latency = 2;
727 let NumMicroOps = 2;
728 let ResourceCycles = [1,1];
729}
Craig Topper2d451e72018-03-18 08:38:06 +0000730def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000731def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000732def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
733 "ADC8ri",
734 "CMOV(A|BE)(16|32|64)rr",
735 "SBB8i8",
736 "SBB8ri",
737 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000738
739def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
740 let Latency = 2;
741 let NumMicroOps = 3;
742 let ResourceCycles = [1,1,1];
743}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000744def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
745 "(V?)PEXTRBmr",
746 "(V?)PEXTRDmr",
747 "(V?)PEXTRQmr",
748 "(V?)PEXTRWmr",
749 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000750
751def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
752 let Latency = 2;
753 let NumMicroOps = 3;
754 let ResourceCycles = [1,1,1];
755}
756def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
757
Gadi Haber323f2e12017-10-24 20:19:47 +0000758def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
759 let Latency = 2;
760 let NumMicroOps = 3;
761 let ResourceCycles = [1,1,1];
762}
763def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
764
765def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
766 let Latency = 2;
767 let NumMicroOps = 3;
768 let ResourceCycles = [1,1,1];
769}
Craig Topper2d451e72018-03-18 08:38:06 +0000770def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000771def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
772 "PUSH64i8",
773 "STOSB",
774 "STOSL",
775 "STOSQ",
776 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000777
Gadi Haber323f2e12017-10-24 20:19:47 +0000778def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
779 let Latency = 3;
780 let NumMicroOps = 1;
781 let ResourceCycles = [1];
782}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000783def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000784 "ADD_FST0r",
785 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000786 "MMX_CVTPI2PSirr",
787 "PDEP(32|64)rr",
788 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000789 "SHLD(16|32|64)rri8",
790 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000791 "SUBR_FPrST0",
792 "SUBR_FST0r",
793 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000794 "SUB_FPrST0",
795 "SUB_FST0r",
796 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000797 "(V?)CVTDQ2PS(Y?)rr",
798 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000799 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000800
801def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000802 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000803 let NumMicroOps = 2;
804 let ResourceCycles = [1,1];
805}
Clement Courbet327fac42018-03-07 08:14:02 +0000806def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000807
808def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
809 let Latency = 3;
810 let NumMicroOps = 1;
811 let ResourceCycles = [1];
812}
Craig Topper5a69a002018-03-21 06:28:42 +0000813def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
814 "VBROADCASTSSYrr",
815 "VEXTRACTF128rr",
816 "VEXTRACTI128rr",
817 "VINSERTF128rr",
818 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000819 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000820 "VPBROADCASTDYrr",
821 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000822 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000823 "VPERM2F128rr",
824 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000825 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000826 "VPERMQYri",
827 "VPMOVSXBDYrr",
828 "VPMOVSXBQYrr",
829 "VPMOVSXBWYrr",
830 "VPMOVSXDQYrr",
831 "VPMOVSXWDYrr",
832 "VPMOVSXWQYrr",
833 "VPMOVZXBDYrr",
834 "VPMOVZXBQYrr",
835 "VPMOVZXBWYrr",
836 "VPMOVZXDQYrr",
837 "VPMOVZXWDYrr",
838 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000839
840def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
841 let Latency = 3;
842 let NumMicroOps = 1;
843 let ResourceCycles = [1];
844}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000845def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
846 "(V?)MULPS(Y?)rr",
847 "(V?)MULSDrr",
848 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000849
850def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000851 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000852 let NumMicroOps = 3;
853 let ResourceCycles = [3];
854}
Craig Topperb5f26592018-04-19 18:00:17 +0000855def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
856 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
857 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000858
859def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
860 let Latency = 3;
861 let NumMicroOps = 3;
862 let ResourceCycles = [2,1];
863}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000864def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
865 "VPSRAVD(Y?)rr",
866 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000867
868def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
869 let Latency = 3;
870 let NumMicroOps = 3;
871 let ResourceCycles = [2,1];
872}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000873def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000874 "(V?)PHADDD(Y?)rr",
875 "(V?)PHADDSW(Y?)rr",
876 "(V?)PHADDW(Y?)rr",
877 "(V?)PHSUBD(Y?)rr",
878 "(V?)PHSUBSW(Y?)rr",
879 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000880
881def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
882 let Latency = 3;
883 let NumMicroOps = 3;
884 let ResourceCycles = [2,1];
885}
Craig Topper5a69a002018-03-21 06:28:42 +0000886def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
887 "MMX_PACKSSWBirr",
888 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000889
890def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
891 let Latency = 3;
892 let NumMicroOps = 3;
893 let ResourceCycles = [1,2];
894}
895def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
896
897def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
898 let Latency = 3;
899 let NumMicroOps = 3;
900 let ResourceCycles = [1,2];
901}
Craig Topper5a69a002018-03-21 06:28:42 +0000902def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
903 "RCL(8|16|32|64)ri",
904 "RCR(8|16|32|64)r1",
905 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000906
907def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
908 let Latency = 3;
909 let NumMicroOps = 3;
910 let ResourceCycles = [2,1];
911}
Craig Topper5a69a002018-03-21 06:28:42 +0000912def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
913 "ROR(8|16|32|64)rCL",
914 "SAR(8|16|32|64)rCL",
915 "SHL(8|16|32|64)rCL",
916 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000917
918def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
919 let Latency = 3;
920 let NumMicroOps = 4;
921 let ResourceCycles = [1,1,1,1];
922}
923def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
924
925def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
926 let Latency = 3;
927 let NumMicroOps = 4;
928 let ResourceCycles = [1,1,1,1];
929}
Craig Topper5a69a002018-03-21 06:28:42 +0000930def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
931 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000932
933def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
934 let Latency = 4;
935 let NumMicroOps = 2;
936 let ResourceCycles = [1,1];
937}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000938def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
939 "(V?)CVTSD2SIrr",
940 "(V?)CVTSS2SI64rr",
941 "(V?)CVTSS2SIrr",
942 "(V?)CVTTSD2SI64rr",
943 "(V?)CVTTSD2SIrr",
944 "(V?)CVTTSS2SI64rr",
945 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000946
947def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
948 let Latency = 4;
949 let NumMicroOps = 2;
950 let ResourceCycles = [1,1];
951}
Craig Topper5a69a002018-03-21 06:28:42 +0000952def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
953 "VPSLLDYrr",
954 "VPSLLQYrr",
955 "VPSLLWYrr",
956 "VPSRADYrr",
957 "VPSRAWYrr",
958 "VPSRLDYrr",
959 "VPSRLQYrr",
960 "VPSRLWYrr",
961 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000962
963def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
964 let Latency = 4;
965 let NumMicroOps = 2;
966 let ResourceCycles = [1,1];
967}
968def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
969
970def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
971 let Latency = 4;
972 let NumMicroOps = 2;
973 let ResourceCycles = [1,1];
974}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000975def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000976def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000977 "MMX_CVTPI2PDirr",
978 "MMX_CVTPS2PIirr",
979 "MMX_CVTTPD2PIirr",
980 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000981 "(V?)CVTDQ2PDrr",
982 "(V?)CVTPD2DQrr",
983 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000984 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000985 "(V?)CVTSD2SSrr",
986 "(V?)CVTSI642SDrr",
987 "(V?)CVTSI2SDrr",
988 "(V?)CVTSI2SSrr",
989 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000990
991def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
992 let Latency = 4;
993 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000994 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000995}
Craig Topper5a69a002018-03-21 06:28:42 +0000996def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000997
998def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
999 let Latency = 4;
1000 let NumMicroOps = 3;
1001 let ResourceCycles = [1,1,1];
1002}
1003def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1004
1005def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1006 let Latency = 4;
1007 let NumMicroOps = 3;
1008 let ResourceCycles = [1,1,1];
1009}
Craig Topper5a69a002018-03-21 06:28:42 +00001010def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1011 "ISTT_FP32m",
1012 "ISTT_FP64m",
1013 "IST_F16m",
1014 "IST_F32m",
1015 "IST_FP16m",
1016 "IST_FP32m",
1017 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001018 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001019
1020def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1021 let Latency = 4;
1022 let NumMicroOps = 4;
1023 let ResourceCycles = [4];
1024}
1025def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1026
1027def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1028 let Latency = 4;
1029 let NumMicroOps = 4;
1030 let ResourceCycles = [1,3];
1031}
1032def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1033
1034def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1035 let Latency = 5;
1036 let NumMicroOps = 1;
1037 let ResourceCycles = [1];
1038}
Craig Topper5a69a002018-03-21 06:28:42 +00001039def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1040 "MMX_PMADDWDirr",
1041 "MMX_PMULHRSWrr",
1042 "MMX_PMULHUWirr",
1043 "MMX_PMULHWirr",
1044 "MMX_PMULLWirr",
1045 "MMX_PMULUDQirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001046 "MUL_FPrST0",
1047 "MUL_FST0r",
1048 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001049 "(V?)PCMPGTQ(Y?)rr",
1050 "(V?)PHMINPOSUWrr",
1051 "(V?)PMADDUBSW(Y?)rr",
1052 "(V?)PMADDWD(Y?)rr",
1053 "(V?)PMULDQ(Y?)rr",
1054 "(V?)PMULHRSW(Y?)rr",
1055 "(V?)PMULHUW(Y?)rr",
1056 "(V?)PMULHW(Y?)rr",
1057 "(V?)PMULLW(Y?)rr",
1058 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001059 "(V?)RCPPSr",
1060 "(V?)RCPSSr",
1061 "(V?)RSQRTPSr",
1062 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001063
Gadi Haber323f2e12017-10-24 20:19:47 +00001064def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1065 let Latency = 5;
1066 let NumMicroOps = 1;
1067 let ResourceCycles = [1];
1068}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001069def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001070 "MMX_MOVD64to64rm",
1071 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001072 "MOVSX(16|32|64)rm16",
1073 "MOVSX(16|32|64)rm32",
1074 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001075 "MOVZX(16|32|64)rm16",
1076 "MOVZX(16|32|64)rm8",
1077 "PREFETCHNTA",
1078 "PREFETCHT0",
1079 "PREFETCHT1",
1080 "PREFETCHT2",
1081 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001082 "(V?)LDDQUrm",
1083 "(V?)MOV64toPQIrm",
1084 "(V?)MOVAPDrm",
1085 "(V?)MOVAPSrm",
1086 "(V?)MOVDDUPrm",
1087 "(V?)MOVDI2PDIrm",
1088 "(V?)MOVDQArm",
1089 "(V?)MOVDQUrm",
1090 "(V?)MOVNTDQArm",
1091 "(V?)MOVQI2PQIrm",
1092 "(V?)MOVSDrm",
1093 "(V?)MOVSHDUPrm",
1094 "(V?)MOVSLDUPrm",
1095 "(V?)MOVSSrm",
1096 "(V?)MOVUPDrm",
1097 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001098 "VPBROADCASTDrm",
1099 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001100
1101def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1102 let Latency = 5;
1103 let NumMicroOps = 3;
1104 let ResourceCycles = [1,2];
1105}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001106def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1107 "(V?)HADDPD(Y?)rr",
1108 "(V?)HADDPS(Y?)rr",
1109 "(V?)HSUBPD(Y?)rr",
1110 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001111
1112def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1113 let Latency = 5;
1114 let NumMicroOps = 3;
1115 let ResourceCycles = [1,1,1];
1116}
1117def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1118
1119def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001120 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001121 let NumMicroOps = 3;
1122 let ResourceCycles = [1,1,1];
1123}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001124def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001125
1126def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1127 let Latency = 5;
1128 let NumMicroOps = 4;
1129 let ResourceCycles = [1,1,1,1];
1130}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001131def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1132 "VMASKMOVPS(Y?)mr",
1133 "VPMASKMOVD(Y?)mr",
1134 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001135
1136def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1137 let Latency = 5;
1138 let NumMicroOps = 5;
1139 let ResourceCycles = [1,4];
1140}
1141def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1142
1143def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1144 let Latency = 5;
1145 let NumMicroOps = 5;
1146 let ResourceCycles = [1,4];
1147}
1148def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1149
1150def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1151 let Latency = 5;
1152 let NumMicroOps = 5;
1153 let ResourceCycles = [2,3];
1154}
Craig Topper5a69a002018-03-21 06:28:42 +00001155def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001156
1157def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1158 let Latency = 5;
1159 let NumMicroOps = 6;
1160 let ResourceCycles = [1,1,4];
1161}
Craig Topper5a69a002018-03-21 06:28:42 +00001162def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001163
1164def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1165 let Latency = 6;
1166 let NumMicroOps = 1;
1167 let ResourceCycles = [1];
1168}
Craig Topper5a69a002018-03-21 06:28:42 +00001169def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1170 "LD_F64m",
1171 "LD_F80m",
1172 "VBROADCASTF128",
1173 "VBROADCASTI128",
1174 "VBROADCASTSDYrm",
1175 "VBROADCASTSSYrm",
1176 "VLDDQUYrm",
1177 "VMOVAPDYrm",
1178 "VMOVAPSYrm",
1179 "VMOVDDUPYrm",
1180 "VMOVDQAYrm",
1181 "VMOVDQUYrm",
1182 "VMOVNTDQAYrm",
1183 "VMOVSHDUPYrm",
1184 "VMOVSLDUPYrm",
1185 "VMOVUPDYrm",
1186 "VMOVUPSYrm",
1187 "VPBROADCASTDYrm",
1188 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001189 "(V?)ROUNDPD(Y?)r",
1190 "(V?)ROUNDPS(Y?)r",
1191 "(V?)ROUNDSDr",
1192 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001193
1194def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1195 let Latency = 6;
1196 let NumMicroOps = 2;
1197 let ResourceCycles = [1,1];
1198}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001199def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001200 "MMX_PSLLQrm",
1201 "MMX_PSLLWrm",
1202 "MMX_PSRADrm",
1203 "MMX_PSRAWrm",
1204 "MMX_PSRLDrm",
1205 "MMX_PSRLQrm",
1206 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001207 "VCVTPH2PS(Y?)rm",
1208 "(V?)CVTPS2PDrm",
1209 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001210 "VPSLLVQrm",
1211 "VPSRLVQrm",
1212 "VTESTPDrm",
1213 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001214
1215def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1216 let Latency = 6;
1217 let NumMicroOps = 2;
1218 let ResourceCycles = [1,1];
1219}
Craig Topper5a69a002018-03-21 06:28:42 +00001220def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1221 "VCVTPD2DQYrr",
1222 "VCVTPD2PSYrr",
1223 "VCVTPS2PHYrr",
1224 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001225
1226def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1227 let Latency = 6;
1228 let NumMicroOps = 2;
1229 let ResourceCycles = [1,1];
1230}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001231def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001232 "MMX_PINSRWrm",
1233 "MMX_PSHUFBrm",
1234 "MMX_PSHUFWmi",
1235 "MMX_PUNPCKHBWirm",
1236 "MMX_PUNPCKHDQirm",
1237 "MMX_PUNPCKHWDirm",
1238 "MMX_PUNPCKLBWirm",
1239 "MMX_PUNPCKLDQirm",
1240 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001241 "(V?)ANDNPDrm",
1242 "(V?)ANDNPSrm",
1243 "(V?)ANDPDrm",
1244 "(V?)ANDPSrm",
1245 "(V?)INSERTPSrm",
1246 "(V?)MOVHPDrm",
1247 "(V?)MOVHPSrm",
1248 "(V?)MOVLPDrm",
1249 "(V?)MOVLPSrm",
1250 "(V?)ORPDrm",
1251 "(V?)ORPSrm",
1252 "(V?)PACKSSDWrm",
1253 "(V?)PACKSSWBrm",
1254 "(V?)PACKUSDWrm",
1255 "(V?)PACKUSWBrm",
1256 "(V?)PALIGNRrmi",
1257 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001258 "VPERMILPDmi",
1259 "VPERMILPDrm",
1260 "VPERMILPSmi",
1261 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001262 "(V?)PINSRBrm",
1263 "(V?)PINSRDrm",
1264 "(V?)PINSRQrm",
1265 "(V?)PINSRWrm",
1266 "(V?)PMOVSXBDrm",
1267 "(V?)PMOVSXBQrm",
1268 "(V?)PMOVSXBWrm",
1269 "(V?)PMOVSXDQrm",
1270 "(V?)PMOVSXWDrm",
1271 "(V?)PMOVSXWQrm",
1272 "(V?)PMOVZXBDrm",
1273 "(V?)PMOVZXBQrm",
1274 "(V?)PMOVZXBWrm",
1275 "(V?)PMOVZXDQrm",
1276 "(V?)PMOVZXWDrm",
1277 "(V?)PMOVZXWQrm",
1278 "(V?)PSHUFBrm",
1279 "(V?)PSHUFDmi",
1280 "(V?)PSHUFHWmi",
1281 "(V?)PSHUFLWmi",
1282 "(V?)PUNPCKHBWrm",
1283 "(V?)PUNPCKHDQrm",
1284 "(V?)PUNPCKHQDQrm",
1285 "(V?)PUNPCKHWDrm",
1286 "(V?)PUNPCKLBWrm",
1287 "(V?)PUNPCKLDQrm",
1288 "(V?)PUNPCKLQDQrm",
1289 "(V?)PUNPCKLWDrm",
1290 "(V?)SHUFPDrmi",
1291 "(V?)SHUFPSrmi",
1292 "(V?)UNPCKHPDrm",
1293 "(V?)UNPCKHPSrm",
1294 "(V?)UNPCKLPDrm",
1295 "(V?)UNPCKLPSrm",
1296 "(V?)XORPDrm",
1297 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001298
1299def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1300 let Latency = 6;
1301 let NumMicroOps = 2;
1302 let ResourceCycles = [1,1];
1303}
Craig Topper5a69a002018-03-21 06:28:42 +00001304def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1305 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001306
1307def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1308 let Latency = 6;
1309 let NumMicroOps = 2;
1310 let ResourceCycles = [1,1];
1311}
Craig Topperdfccafe2018-04-18 06:41:25 +00001312def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001313def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1314 ADCX32rm, ADCX64rm,
1315 ADOX32rm, ADOX64rm,
1316 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001317
1318def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1319 let Latency = 6;
1320 let NumMicroOps = 2;
1321 let ResourceCycles = [1,1];
1322}
Craig Topper5a69a002018-03-21 06:28:42 +00001323def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1324 "BLSI(32|64)rm",
1325 "BLSMSK(32|64)rm",
1326 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001327 "MMX_PABS(B|D|W)rm",
1328 "MMX_PADD(B|D|Q|W)irm",
1329 "MMX_PADDS(B|W)irm",
1330 "MMX_PADDUS(B|W)irm",
1331 "MMX_PAVG(B|W)irm",
1332 "MMX_PCMPEQ(B|D|W)irm",
1333 "MMX_PCMPGT(B|D|W)irm",
1334 "MMX_P(MAX|MIN)SWirm",
1335 "MMX_P(MAX|MIN)UBirm",
1336 "MMX_PSIGN(B|D|W)rm",
1337 "MMX_PSUB(B|D|Q|W)irm",
1338 "MMX_PSUBS(B|W)irm",
1339 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001340 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001341 "(V?)PABSBrm",
1342 "(V?)PABSDrm",
1343 "(V?)PABSWrm",
1344 "(V?)PADDBrm",
1345 "(V?)PADDDrm",
1346 "(V?)PADDQrm",
1347 "(V?)PADDSBrm",
1348 "(V?)PADDSWrm",
1349 "(V?)PADDUSBrm",
1350 "(V?)PADDUSWrm",
1351 "(V?)PADDWrm",
1352 "(V?)PAVGBrm",
1353 "(V?)PAVGWrm",
1354 "(V?)PCMPEQBrm",
1355 "(V?)PCMPEQDrm",
1356 "(V?)PCMPEQQrm",
1357 "(V?)PCMPEQWrm",
1358 "(V?)PCMPGTBrm",
1359 "(V?)PCMPGTDrm",
1360 "(V?)PCMPGTWrm",
1361 "(V?)PMAXSBrm",
1362 "(V?)PMAXSDrm",
1363 "(V?)PMAXSWrm",
1364 "(V?)PMAXUBrm",
1365 "(V?)PMAXUDrm",
1366 "(V?)PMAXUWrm",
1367 "(V?)PMINSBrm",
1368 "(V?)PMINSDrm",
1369 "(V?)PMINSWrm",
1370 "(V?)PMINUBrm",
1371 "(V?)PMINUDrm",
1372 "(V?)PMINUWrm",
1373 "(V?)PSIGNBrm",
1374 "(V?)PSIGNDrm",
1375 "(V?)PSIGNWrm",
1376 "(V?)PSUBBrm",
1377 "(V?)PSUBDrm",
1378 "(V?)PSUBQrm",
1379 "(V?)PSUBSBrm",
1380 "(V?)PSUBSWrm",
1381 "(V?)PSUBUSBrm",
1382 "(V?)PSUBUSWrm",
1383 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001384
1385def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1386 let Latency = 6;
1387 let NumMicroOps = 2;
1388 let ResourceCycles = [1,1];
1389}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001390def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001391 "MMX_PANDirm",
1392 "MMX_PORirm",
1393 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001394 "(V?)BLENDPDrmi",
1395 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001396 "VINSERTF128rm",
1397 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001398 "(V?)PANDNrm",
1399 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001400 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001401 "(V?)PORrm",
1402 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001403
1404def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1405 let Latency = 6;
1406 let NumMicroOps = 2;
1407 let ResourceCycles = [1,1];
1408}
Craig Topper2d451e72018-03-18 08:38:06 +00001409def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001410def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001411
1412def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1413 let Latency = 6;
1414 let NumMicroOps = 4;
1415 let ResourceCycles = [1,1,2];
1416}
Craig Topper5a69a002018-03-21 06:28:42 +00001417def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1418 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001419
1420def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1421 let Latency = 6;
1422 let NumMicroOps = 4;
1423 let ResourceCycles = [1,1,1,1];
1424}
1425def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1426
1427def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1428 let Latency = 6;
1429 let NumMicroOps = 4;
1430 let ResourceCycles = [1,1,1,1];
1431}
Craig Topper5a69a002018-03-21 06:28:42 +00001432def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1433 "BTR(16|32|64)mi8",
1434 "BTS(16|32|64)mi8",
1435 "SAR(8|16|32|64)m1",
1436 "SAR(8|16|32|64)mi",
1437 "SHL(8|16|32|64)m1",
1438 "SHL(8|16|32|64)mi",
1439 "SHR(8|16|32|64)m1",
1440 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001441
1442def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1443 let Latency = 6;
1444 let NumMicroOps = 4;
1445 let ResourceCycles = [1,1,1,1];
1446}
Craig Topperf0d04262018-04-06 16:16:48 +00001447def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1448 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001449
1450def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1451 let Latency = 6;
1452 let NumMicroOps = 6;
1453 let ResourceCycles = [1,5];
1454}
1455def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1456
Gadi Haber323f2e12017-10-24 20:19:47 +00001457def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1458 let Latency = 7;
1459 let NumMicroOps = 2;
1460 let ResourceCycles = [1,1];
1461}
Craig Topper5a69a002018-03-21 06:28:42 +00001462def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1463 "VPSLLQYrm",
1464 "VPSLLVQYrm",
1465 "VPSLLWYrm",
1466 "VPSRADYrm",
1467 "VPSRAWYrm",
1468 "VPSRLDYrm",
1469 "VPSRLQYrm",
1470 "VPSRLVQYrm",
1471 "VPSRLWYrm",
1472 "VTESTPDYrm",
1473 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001474
1475def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1476 let Latency = 7;
1477 let NumMicroOps = 2;
1478 let ResourceCycles = [1,1];
1479}
Craig Topper5a69a002018-03-21 06:28:42 +00001480def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1481 "FCOM64m",
1482 "FCOMP32m",
1483 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001484
1485def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1486 let Latency = 7;
1487 let NumMicroOps = 2;
1488 let ResourceCycles = [1,1];
1489}
Craig Topper5a69a002018-03-21 06:28:42 +00001490def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1491 "VANDNPSYrm",
1492 "VANDPDYrm",
1493 "VANDPSYrm",
1494 "VORPDYrm",
1495 "VORPSYrm",
1496 "VPACKSSDWYrm",
1497 "VPACKSSWBYrm",
1498 "VPACKUSDWYrm",
1499 "VPACKUSWBYrm",
1500 "VPALIGNRYrmi",
1501 "VPBLENDWYrmi",
1502 "VPERMILPDYmi",
1503 "VPERMILPDYrm",
1504 "VPERMILPSYmi",
1505 "VPERMILPSYrm",
1506 "VPSHUFBYrm",
1507 "VPSHUFDYmi",
1508 "VPSHUFHWYmi",
1509 "VPSHUFLWYmi",
1510 "VPUNPCKHBWYrm",
1511 "VPUNPCKHDQYrm",
1512 "VPUNPCKHQDQYrm",
1513 "VPUNPCKHWDYrm",
1514 "VPUNPCKLBWYrm",
1515 "VPUNPCKLDQYrm",
1516 "VPUNPCKLQDQYrm",
1517 "VPUNPCKLWDYrm",
1518 "VSHUFPDYrmi",
1519 "VSHUFPSYrmi",
1520 "VUNPCKHPDYrm",
1521 "VUNPCKHPSYrm",
1522 "VUNPCKLPDYrm",
1523 "VUNPCKLPSYrm",
1524 "VXORPDYrm",
1525 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001526
1527def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1528 let Latency = 7;
1529 let NumMicroOps = 2;
1530 let ResourceCycles = [1,1];
1531}
Craig Topper5a69a002018-03-21 06:28:42 +00001532def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1533 "VPABSDYrm",
1534 "VPABSWYrm",
1535 "VPADDBYrm",
1536 "VPADDDYrm",
1537 "VPADDQYrm",
1538 "VPADDSBYrm",
1539 "VPADDSWYrm",
1540 "VPADDUSBYrm",
1541 "VPADDUSWYrm",
1542 "VPADDWYrm",
1543 "VPAVGBYrm",
1544 "VPAVGWYrm",
1545 "VPCMPEQBYrm",
1546 "VPCMPEQDYrm",
1547 "VPCMPEQQYrm",
1548 "VPCMPEQWYrm",
1549 "VPCMPGTBYrm",
1550 "VPCMPGTDYrm",
1551 "VPCMPGTWYrm",
1552 "VPMAXSBYrm",
1553 "VPMAXSDYrm",
1554 "VPMAXSWYrm",
1555 "VPMAXUBYrm",
1556 "VPMAXUDYrm",
1557 "VPMAXUWYrm",
1558 "VPMINSBYrm",
1559 "VPMINSDYrm",
1560 "VPMINSWYrm",
1561 "VPMINUBYrm",
1562 "VPMINUDYrm",
1563 "VPMINUWYrm",
1564 "VPSIGNBYrm",
1565 "VPSIGNDYrm",
1566 "VPSIGNWYrm",
1567 "VPSUBBYrm",
1568 "VPSUBDYrm",
1569 "VPSUBQYrm",
1570 "VPSUBSBYrm",
1571 "VPSUBSWYrm",
1572 "VPSUBUSBYrm",
1573 "VPSUBUSWYrm",
1574 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001575
1576def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1577 let Latency = 7;
1578 let NumMicroOps = 2;
1579 let ResourceCycles = [1,1];
1580}
Craig Topper5a69a002018-03-21 06:28:42 +00001581def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1582 "VBLENDPSYrmi",
1583 "VPANDNYrm",
1584 "VPANDYrm",
1585 "VPBLENDDYrmi",
1586 "VPORYrm",
1587 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001588
1589def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1590 let Latency = 7;
1591 let NumMicroOps = 3;
1592 let ResourceCycles = [1,2];
1593}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001594def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001595
1596def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1597 let Latency = 7;
1598 let NumMicroOps = 3;
1599 let ResourceCycles = [2,1];
1600}
Craig Topper5a69a002018-03-21 06:28:42 +00001601def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1602 "BLENDVPSrm0",
1603 "MMX_PACKSSDWirm",
1604 "MMX_PACKSSWBirm",
1605 "MMX_PACKUSWBirm",
1606 "PBLENDVBrm0",
1607 "VBLENDVPDrm",
1608 "VBLENDVPSrm",
1609 "VMASKMOVPDrm",
1610 "VMASKMOVPSrm",
1611 "VPBLENDVBrm",
1612 "VPMASKMOVDrm",
1613 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001614
1615def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1616 let Latency = 7;
1617 let NumMicroOps = 3;
1618 let ResourceCycles = [1,2];
1619}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001620def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1621 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001622
1623def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1624 let Latency = 7;
1625 let NumMicroOps = 3;
1626 let ResourceCycles = [1,1,1];
1627}
Craig Topper5a69a002018-03-21 06:28:42 +00001628def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1629 "PSLLQrm",
1630 "PSLLWrm",
1631 "PSRADrm",
1632 "PSRAWrm",
1633 "PSRLDrm",
1634 "PSRLQrm",
1635 "PSRLWrm",
1636 "PTESTrm",
1637 "VPSLLDrm",
1638 "VPSLLQrm",
1639 "VPSLLWrm",
1640 "VPSRADrm",
1641 "VPSRAWrm",
1642 "VPSRLDrm",
1643 "VPSRLQrm",
1644 "VPSRLWrm",
1645 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001646
1647def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1648 let Latency = 7;
1649 let NumMicroOps = 3;
1650 let ResourceCycles = [1,1,1];
1651}
1652def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1653
1654def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1655 let Latency = 7;
1656 let NumMicroOps = 3;
1657 let ResourceCycles = [1,1,1];
1658}
Craig Topper5a69a002018-03-21 06:28:42 +00001659def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001660
1661def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1662 let Latency = 7;
1663 let NumMicroOps = 3;
1664 let ResourceCycles = [1,1,1];
1665}
Craig Topper5a69a002018-03-21 06:28:42 +00001666def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1667 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001668
Gadi Haber323f2e12017-10-24 20:19:47 +00001669def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1670 let Latency = 7;
1671 let NumMicroOps = 3;
1672 let ResourceCycles = [1,1,1];
1673}
Craig Topperf4cd9082018-01-19 05:47:32 +00001674def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001675
1676def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1677 let Latency = 7;
1678 let NumMicroOps = 5;
1679 let ResourceCycles = [1,1,1,2];
1680}
Craig Topper5a69a002018-03-21 06:28:42 +00001681def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1682 "ROL(8|16|32|64)mi",
1683 "ROR(8|16|32|64)m1",
1684 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001685
1686def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1687 let Latency = 7;
1688 let NumMicroOps = 5;
1689 let ResourceCycles = [1,1,1,2];
1690}
Craig Topper5a69a002018-03-21 06:28:42 +00001691def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001692
1693def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1694 let Latency = 7;
1695 let NumMicroOps = 5;
1696 let ResourceCycles = [1,1,1,1,1];
1697}
Craig Topper5a69a002018-03-21 06:28:42 +00001698def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1699 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001700
1701def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1702 let Latency = 7;
1703 let NumMicroOps = 7;
1704 let ResourceCycles = [2,2,1,2];
1705}
Craig Topper2d451e72018-03-18 08:38:06 +00001706def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001707
1708def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1709 let Latency = 8;
1710 let NumMicroOps = 2;
1711 let ResourceCycles = [1,1];
1712}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001713def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001714 "MMX_CVTPS2PIirm",
1715 "MMX_CVTTPS2PIirm",
1716 "PDEP(32|64)rm",
1717 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001718 "(V?)ADDPDrm",
1719 "(V?)ADDPSrm",
1720 "(V?)ADDSDrm",
1721 "(V?)ADDSSrm",
1722 "(V?)ADDSUBPDrm",
1723 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001724 "(V?)CVTDQ2PSrm",
1725 "(V?)CVTPS2DQrm",
1726 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001727 "(V?)SUBPDrm",
1728 "(V?)SUBPSrm",
1729 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001730 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001731
1732def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001733 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001734 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001735 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001736}
Craig Topperf846e2d2018-04-19 05:34:05 +00001737def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001738
Craig Topperf846e2d2018-04-19 05:34:05 +00001739def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1740 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001741 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001742 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001743}
Craig Topper5a69a002018-03-21 06:28:42 +00001744def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001745
Gadi Haber323f2e12017-10-24 20:19:47 +00001746def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1747 let Latency = 8;
1748 let NumMicroOps = 2;
1749 let ResourceCycles = [1,1];
1750}
Craig Topper5a69a002018-03-21 06:28:42 +00001751def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1752 "VPMOVSXBQYrm",
1753 "VPMOVSXBWYrm",
1754 "VPMOVSXDQYrm",
1755 "VPMOVSXWDYrm",
1756 "VPMOVSXWQYrm",
1757 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001758
1759def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1760 let Latency = 8;
1761 let NumMicroOps = 2;
1762 let ResourceCycles = [1,1];
1763}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001764def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1765 "(V?)MULPSrm",
1766 "(V?)MULSDrm",
1767 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001768
1769def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1770 let Latency = 8;
1771 let NumMicroOps = 3;
1772 let ResourceCycles = [2,1];
1773}
Craig Topper5a69a002018-03-21 06:28:42 +00001774def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1775 "VBLENDVPSYrm",
1776 "VMASKMOVPDYrm",
1777 "VMASKMOVPSYrm",
1778 "VPBLENDVBYrm",
1779 "VPMASKMOVDYrm",
1780 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001781
1782def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1783 let Latency = 8;
1784 let NumMicroOps = 4;
1785 let ResourceCycles = [2,1,1];
1786}
Craig Topper5a69a002018-03-21 06:28:42 +00001787def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1788 "VPSRAVDrm",
1789 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001790
1791def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1792 let Latency = 8;
1793 let NumMicroOps = 4;
1794 let ResourceCycles = [2,1,1];
1795}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001796def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001797 "(V?)PHADDDrm",
1798 "(V?)PHADDSWrm",
1799 "(V?)PHADDWrm",
1800 "(V?)PHSUBDrm",
1801 "(V?)PHSUBSWrm",
1802 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001803
1804def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1805 let Latency = 8;
1806 let NumMicroOps = 5;
1807 let ResourceCycles = [1,1,1,2];
1808}
Craig Topper5a69a002018-03-21 06:28:42 +00001809def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1810 "RCL(8|16|32|64)mi",
1811 "RCR(8|16|32|64)m1",
1812 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001813
1814def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1815 let Latency = 8;
1816 let NumMicroOps = 5;
1817 let ResourceCycles = [1,1,2,1];
1818}
Craig Topper13a16502018-03-19 00:56:09 +00001819def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001820
1821def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1822 let Latency = 8;
1823 let NumMicroOps = 6;
1824 let ResourceCycles = [1,1,1,3];
1825}
Craig Topper9f834812018-04-01 21:54:24 +00001826def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001827
1828def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1829 let Latency = 8;
1830 let NumMicroOps = 6;
1831 let ResourceCycles = [1,1,1,2,1];
1832}
Craig Topper9f834812018-04-01 21:54:24 +00001833def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001834 "CMPXCHG(8|16|32|64)rm",
1835 "ROL(8|16|32|64)mCL",
1836 "SAR(8|16|32|64)mCL",
1837 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001838 "SHL(8|16|32|64)mCL",
1839 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001840def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1841 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001842
1843def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1844 let Latency = 9;
1845 let NumMicroOps = 2;
1846 let ResourceCycles = [1,1];
1847}
Craig Topper5a69a002018-03-21 06:28:42 +00001848def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1849 "ADD_F64m",
1850 "ILD_F16m",
1851 "ILD_F32m",
1852 "ILD_F64m",
1853 "SUBR_F32m",
1854 "SUBR_F64m",
1855 "SUB_F32m",
1856 "SUB_F64m",
1857 "VADDPDYrm",
1858 "VADDPSYrm",
1859 "VADDSUBPDYrm",
1860 "VADDSUBPSYrm",
1861 "VCMPPDYrmi",
1862 "VCMPPSYrmi",
1863 "VCVTDQ2PSYrm",
1864 "VCVTPS2DQYrm",
1865 "VCVTTPS2DQYrm",
1866 "VMAX(C?)PDYrm",
1867 "VMAX(C?)PSYrm",
1868 "VMIN(C?)PDYrm",
1869 "VMIN(C?)PSYrm",
1870 "VSUBPDYrm",
1871 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001872
1873def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1874 let Latency = 9;
1875 let NumMicroOps = 2;
1876 let ResourceCycles = [1,1];
1877}
Craig Topper5a69a002018-03-21 06:28:42 +00001878def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1879 "VPERM2I128rm",
1880 "VPERMDYrm",
1881 "VPERMPDYmi",
1882 "VPERMPSYrm",
1883 "VPERMQYmi",
1884 "VPMOVZXBDYrm",
1885 "VPMOVZXBQYrm",
1886 "VPMOVZXBWYrm",
1887 "VPMOVZXDQYrm",
1888 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001889
1890def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1891 let Latency = 9;
1892 let NumMicroOps = 2;
1893 let ResourceCycles = [1,1];
1894}
Craig Topper5a69a002018-03-21 06:28:42 +00001895def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1896 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001897
1898def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1899 let Latency = 9;
1900 let NumMicroOps = 3;
1901 let ResourceCycles = [1,1,1];
1902}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001903def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001904
1905def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1906 let Latency = 9;
1907 let NumMicroOps = 3;
1908 let ResourceCycles = [1,1,1];
1909}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001910def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1911 "(V?)CVTSD2SIrm",
1912 "(V?)CVTSS2SI64rm",
1913 "(V?)CVTSS2SIrm",
1914 "(V?)CVTTSD2SI64rm",
1915 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001916 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001917 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001918
1919def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1920 let Latency = 9;
1921 let NumMicroOps = 3;
1922 let ResourceCycles = [1,1,1];
1923}
1924def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1925
1926def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1927 let Latency = 9;
1928 let NumMicroOps = 3;
1929 let ResourceCycles = [1,1,1];
1930}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001931def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001932def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001933 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001934 "CVTTPD2DQrm",
1935 "MMX_CVTPD2PIirm",
1936 "MMX_CVTPI2PDirm",
1937 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001938 "(V?)CVTDQ2PDrm",
1939 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001940
1941def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1942 let Latency = 9;
1943 let NumMicroOps = 3;
1944 let ResourceCycles = [1,1,1];
1945}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001946def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1947 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001948
1949def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1950 let Latency = 9;
1951 let NumMicroOps = 4;
1952 let ResourceCycles = [2,1,1];
1953}
Craig Topper5a69a002018-03-21 06:28:42 +00001954def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1955 "VPSRAVDYrm",
1956 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001957
1958def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1959 let Latency = 9;
1960 let NumMicroOps = 4;
1961 let ResourceCycles = [2,1,1];
1962}
Craig Topper5a69a002018-03-21 06:28:42 +00001963def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1964 "VPHADDSWYrm",
1965 "VPHADDWYrm",
1966 "VPHSUBDYrm",
1967 "VPHSUBSWYrm",
1968 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001969
1970def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1971 let Latency = 9;
1972 let NumMicroOps = 4;
1973 let ResourceCycles = [1,1,1,1];
1974}
Craig Topper5a69a002018-03-21 06:28:42 +00001975def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1976 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001977
1978def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1979 let Latency = 9;
1980 let NumMicroOps = 5;
1981 let ResourceCycles = [1,1,3];
1982}
1983def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1984
1985def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1986 let Latency = 9;
1987 let NumMicroOps = 5;
1988 let ResourceCycles = [1,2,1,1];
1989}
Craig Topper5a69a002018-03-21 06:28:42 +00001990def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1991 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001992
Gadi Haber323f2e12017-10-24 20:19:47 +00001993def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1994 let Latency = 10;
1995 let NumMicroOps = 2;
1996 let ResourceCycles = [1,1];
1997}
Craig Topper5a69a002018-03-21 06:28:42 +00001998def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1999 "MMX_PMADDWDirm",
2000 "MMX_PMULHRSWrm",
2001 "MMX_PMULHUWirm",
2002 "MMX_PMULHWirm",
2003 "MMX_PMULLWirm",
2004 "MMX_PMULUDQirm",
2005 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002006 "(V?)PCMPGTQrm",
2007 "(V?)PHMINPOSUWrm",
2008 "(V?)PMADDUBSWrm",
2009 "(V?)PMADDWDrm",
2010 "(V?)PMULDQrm",
2011 "(V?)PMULHRSWrm",
2012 "(V?)PMULHUWrm",
2013 "(V?)PMULHWrm",
2014 "(V?)PMULLWrm",
2015 "(V?)PMULUDQrm",
2016 "(V?)PSADBWrm",
2017 "(V?)RCPPSm",
2018 "(V?)RCPSSm",
2019 "(V?)RSQRTPSm",
2020 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002021
2022def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2023 let Latency = 10;
2024 let NumMicroOps = 2;
2025 let ResourceCycles = [1,1];
2026}
Craig Topperf82867c2017-12-13 23:11:30 +00002027def: InstRW<[BWWriteResGroup116],
2028 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2029 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002030
2031def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2032 let Latency = 10;
2033 let NumMicroOps = 3;
2034 let ResourceCycles = [2,1];
2035}
Craig Topper5a69a002018-03-21 06:28:42 +00002036def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2037 "FICOM32m",
2038 "FICOMP16m",
2039 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002040
2041def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2042 let Latency = 10;
2043 let NumMicroOps = 3;
2044 let ResourceCycles = [1,1,1];
2045}
2046def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2047
2048def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2049 let Latency = 10;
2050 let NumMicroOps = 4;
2051 let ResourceCycles = [1,2,1];
2052}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002053def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2054 "(V?)HADDPSrm",
2055 "(V?)HSUBPDrm",
2056 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002057
2058def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2059 let Latency = 10;
2060 let NumMicroOps = 4;
2061 let ResourceCycles = [1,1,1,1];
2062}
2063def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2064
2065def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002066 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002067 let NumMicroOps = 4;
2068 let ResourceCycles = [1,1,1,1];
2069}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002070def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002071
Craig Topper8104f262018-04-02 05:33:28 +00002072def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002073 let Latency = 11;
2074 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002075 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002076}
Craig Topper8104f262018-04-02 05:33:28 +00002077def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2078
2079def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2080 let Latency = 11;
2081 let NumMicroOps = 1;
2082 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2083}
2084def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002085
2086def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2087 let Latency = 11;
2088 let NumMicroOps = 2;
2089 let ResourceCycles = [1,1];
2090}
Craig Topper5a69a002018-03-21 06:28:42 +00002091def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2092 "MUL_F64m",
2093 "VPCMPGTQYrm",
2094 "VPMADDUBSWYrm",
2095 "VPMADDWDYrm",
2096 "VPMULDQYrm",
2097 "VPMULHRSWYrm",
2098 "VPMULHUWYrm",
2099 "VPMULHWYrm",
2100 "VPMULLWYrm",
2101 "VPMULUDQYrm",
2102 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002103
2104def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2105 let Latency = 11;
2106 let NumMicroOps = 2;
2107 let ResourceCycles = [1,1];
2108}
Craig Topperf82867c2017-12-13 23:11:30 +00002109def: InstRW<[BWWriteResGroup124],
2110 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002111
Gadi Haber323f2e12017-10-24 20:19:47 +00002112def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2113 let Latency = 11;
2114 let NumMicroOps = 3;
2115 let ResourceCycles = [2,1];
2116}
Craig Topper5a69a002018-03-21 06:28:42 +00002117def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2118 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002119
2120def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2121 let Latency = 11;
2122 let NumMicroOps = 3;
2123 let ResourceCycles = [2,1];
2124}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002125def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2126 "(V?)ROUNDPSm",
2127 "(V?)ROUNDSDm",
2128 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002129
2130def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2131 let Latency = 11;
2132 let NumMicroOps = 3;
2133 let ResourceCycles = [1,1,1];
2134}
2135def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2136
2137def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2138 let Latency = 11;
2139 let NumMicroOps = 4;
2140 let ResourceCycles = [1,2,1];
2141}
Craig Topper5a69a002018-03-21 06:28:42 +00002142def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2143 "VHADDPSYrm",
2144 "VHSUBPDYrm",
2145 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002146
2147def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2148 let Latency = 11;
2149 let NumMicroOps = 6;
2150 let ResourceCycles = [1,1,1,1,2];
2151}
Craig Topper5a69a002018-03-21 06:28:42 +00002152def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2153 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002154
2155def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2156 let Latency = 11;
2157 let NumMicroOps = 7;
2158 let ResourceCycles = [2,2,3];
2159}
Craig Topper5a69a002018-03-21 06:28:42 +00002160def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2161 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002162
2163def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2164 let Latency = 11;
2165 let NumMicroOps = 9;
2166 let ResourceCycles = [1,4,1,3];
2167}
2168def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2169
2170def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2171 let Latency = 11;
2172 let NumMicroOps = 11;
2173 let ResourceCycles = [2,9];
2174}
Craig Topper2d451e72018-03-18 08:38:06 +00002175def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2176def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002177
Gadi Haber323f2e12017-10-24 20:19:47 +00002178def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2179 let Latency = 12;
2180 let NumMicroOps = 3;
2181 let ResourceCycles = [2,1];
2182}
Craig Topper5a69a002018-03-21 06:28:42 +00002183def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2184 "ADD_FI32m",
2185 "SUBR_FI16m",
2186 "SUBR_FI32m",
2187 "SUB_FI16m",
2188 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002189 "VROUNDPDYm",
2190 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002191
2192def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2193 let Latency = 12;
2194 let NumMicroOps = 4;
2195 let ResourceCycles = [1,2,1];
2196}
Craig Topper5a69a002018-03-21 06:28:42 +00002197def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198
Craig Topper8104f262018-04-02 05:33:28 +00002199def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002200 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002201 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002202 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002203}
Craig Topper8104f262018-04-02 05:33:28 +00002204def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2205
2206def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2207 let Latency = 11;
2208 let NumMicroOps = 1;
2209 let ResourceCycles = [1,4];
2210}
2211def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002212
2213def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2214 let Latency = 13;
2215 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002216 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002217}
2218def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2219
Craig Topper8104f262018-04-02 05:33:28 +00002220def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002221 let Latency = 14;
2222 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002223 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002224}
Craig Topper8104f262018-04-02 05:33:28 +00002225def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2226
2227def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2228 let Latency = 14;
2229 let NumMicroOps = 1;
2230 let ResourceCycles = [1,4];
2231}
2232def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002233
Gadi Haber323f2e12017-10-24 20:19:47 +00002234def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2235 let Latency = 14;
2236 let NumMicroOps = 3;
2237 let ResourceCycles = [1,1,1];
2238}
Craig Topper5a69a002018-03-21 06:28:42 +00002239def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2240 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002241
2242def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2243 let Latency = 14;
2244 let NumMicroOps = 4;
2245 let ResourceCycles = [2,1,1];
2246}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002247def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002248
2249def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2250 let Latency = 14;
2251 let NumMicroOps = 4;
2252 let ResourceCycles = [1,1,1,1];
2253}
Craig Topper5a69a002018-03-21 06:28:42 +00002254def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002255
2256def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2257 let Latency = 14;
2258 let NumMicroOps = 8;
2259 let ResourceCycles = [2,2,1,3];
2260}
2261def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2262
2263def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2264 let Latency = 14;
2265 let NumMicroOps = 10;
2266 let ResourceCycles = [2,3,1,4];
2267}
2268def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2269
2270def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2271 let Latency = 14;
2272 let NumMicroOps = 12;
2273 let ResourceCycles = [2,1,4,5];
2274}
2275def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2276
2277def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2278 let Latency = 15;
2279 let NumMicroOps = 1;
2280 let ResourceCycles = [1];
2281}
Craig Topper5a69a002018-03-21 06:28:42 +00002282def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2283 "DIVR_FST0r",
2284 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002285
Gadi Haber323f2e12017-10-24 20:19:47 +00002286def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2287 let Latency = 15;
2288 let NumMicroOps = 10;
2289 let ResourceCycles = [1,1,1,4,1,2];
2290}
Craig Topper13a16502018-03-19 00:56:09 +00002291def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002292
Craig Topper8104f262018-04-02 05:33:28 +00002293def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002294 let Latency = 16;
2295 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002296 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002297}
Craig Topper5a69a002018-03-21 06:28:42 +00002298def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2299 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002300
2301def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2302 let Latency = 16;
2303 let NumMicroOps = 3;
2304 let ResourceCycles = [2,1];
2305}
2306def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2307
Gadi Haber323f2e12017-10-24 20:19:47 +00002308def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2309 let Latency = 16;
2310 let NumMicroOps = 14;
2311 let ResourceCycles = [1,1,1,4,2,5];
2312}
2313def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2314
2315def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2316 let Latency = 16;
2317 let NumMicroOps = 16;
2318 let ResourceCycles = [16];
2319}
Craig Topper5a69a002018-03-21 06:28:42 +00002320def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002321
Craig Topper8104f262018-04-02 05:33:28 +00002322def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002323 let Latency = 17;
2324 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002325 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002326}
2327def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2328
2329def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2330 let Latency = 17;
2331 let NumMicroOps = 4;
2332 let ResourceCycles = [2,1,1];
2333}
Craig Topper5a69a002018-03-21 06:28:42 +00002334def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2335 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002336
Craig Topper8104f262018-04-02 05:33:28 +00002337def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002338 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002339 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002340 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002341}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002342def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2343 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002344
Gadi Haber323f2e12017-10-24 20:19:47 +00002345def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2346 let Latency = 18;
2347 let NumMicroOps = 8;
2348 let ResourceCycles = [1,1,1,5];
2349}
Craig Topper5a69a002018-03-21 06:28:42 +00002350def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002351def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002352
2353def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2354 let Latency = 18;
2355 let NumMicroOps = 11;
2356 let ResourceCycles = [2,1,1,3,1,3];
2357}
Craig Topper13a16502018-03-19 00:56:09 +00002358def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002359
Craig Topper8104f262018-04-02 05:33:28 +00002360def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002361 let Latency = 19;
2362 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002363 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002364}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002365def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002366 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002367
Gadi Haber323f2e12017-10-24 20:19:47 +00002368def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2369 let Latency = 19;
2370 let NumMicroOps = 5;
2371 let ResourceCycles = [2,1,1,1];
2372}
Craig Topper5a69a002018-03-21 06:28:42 +00002373def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002374
Gadi Haber323f2e12017-10-24 20:19:47 +00002375def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2376 let Latency = 20;
2377 let NumMicroOps = 1;
2378 let ResourceCycles = [1];
2379}
Craig Topper5a69a002018-03-21 06:28:42 +00002380def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2381 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002382 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002383
2384def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2385 let Latency = 20;
2386 let NumMicroOps = 5;
2387 let ResourceCycles = [2,1,1,1];
2388}
2389def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2390
2391def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2392 let Latency = 20;
2393 let NumMicroOps = 8;
2394 let ResourceCycles = [1,1,1,1,1,1,2];
2395}
Craig Topper5a69a002018-03-21 06:28:42 +00002396def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2397 "INSL",
2398 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002399
Craig Topper8104f262018-04-02 05:33:28 +00002400def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002401 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002402 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002403 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002404}
Craig Topper8104f262018-04-02 05:33:28 +00002405def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2406
2407def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2408 let Latency = 16;
2409 let NumMicroOps = 1;
2410 let ResourceCycles = [1,8];
2411}
2412def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002413
2414def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2415 let Latency = 21;
2416 let NumMicroOps = 2;
2417 let ResourceCycles = [1,1];
2418}
Craig Topper5a69a002018-03-21 06:28:42 +00002419def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2420 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002421
Craig Topper8104f262018-04-02 05:33:28 +00002422def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002423 let Latency = 21;
2424 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002425 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002426}
2427def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2428
2429def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2430 let Latency = 21;
2431 let NumMicroOps = 19;
2432 let ResourceCycles = [2,1,4,1,1,4,6];
2433}
2434def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2435
2436def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2437 let Latency = 22;
2438 let NumMicroOps = 18;
2439 let ResourceCycles = [1,1,16];
2440}
2441def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2442
Craig Topper8104f262018-04-02 05:33:28 +00002443def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002444 let Latency = 23;
2445 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002446 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002447}
2448def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2449
Craig Topper8104f262018-04-02 05:33:28 +00002450def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002451 let Latency = 23;
2452 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002453 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002454}
2455def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2456
Gadi Haber323f2e12017-10-24 20:19:47 +00002457def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2458 let Latency = 23;
2459 let NumMicroOps = 19;
2460 let ResourceCycles = [3,1,15];
2461}
Craig Topper391c6f92017-12-10 01:24:08 +00002462def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002463
2464def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2465 let Latency = 24;
2466 let NumMicroOps = 3;
2467 let ResourceCycles = [1,1,1];
2468}
Craig Topper5a69a002018-03-21 06:28:42 +00002469def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2470 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002471
Craig Topper8104f262018-04-02 05:33:28 +00002472def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002473 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002474 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002475 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002476}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002477def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2478 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002479
2480def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2481 let Latency = 26;
2482 let NumMicroOps = 2;
2483 let ResourceCycles = [1,1];
2484}
Craig Topper5a69a002018-03-21 06:28:42 +00002485def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002486 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002487
Craig Topper8104f262018-04-02 05:33:28 +00002488def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002489 let Latency = 27;
2490 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002491 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002492}
2493def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2494
2495def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2496 let Latency = 29;
2497 let NumMicroOps = 3;
2498 let ResourceCycles = [1,1,1];
2499}
Craig Topper5a69a002018-03-21 06:28:42 +00002500def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2501 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002502
Craig Topper8104f262018-04-02 05:33:28 +00002503def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002504 let Latency = 29;
2505 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002506 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002507}
2508def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2509
2510def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2511 let Latency = 22;
2512 let NumMicroOps = 7;
2513 let ResourceCycles = [1,3,2,1];
2514}
Craig Topper17a31182017-12-16 18:35:29 +00002515def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002516
2517def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2518 let Latency = 23;
2519 let NumMicroOps = 9;
2520 let ResourceCycles = [1,3,4,1];
2521}
Craig Topper17a31182017-12-16 18:35:29 +00002522def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002523
2524def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2525 let Latency = 24;
2526 let NumMicroOps = 9;
2527 let ResourceCycles = [1,5,2,1];
2528}
Craig Topper17a31182017-12-16 18:35:29 +00002529def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002530
2531def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2532 let Latency = 25;
2533 let NumMicroOps = 7;
2534 let ResourceCycles = [1,3,2,1];
2535}
Craig Topper17a31182017-12-16 18:35:29 +00002536def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2537 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002538
2539def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2540 let Latency = 26;
2541 let NumMicroOps = 9;
2542 let ResourceCycles = [1,5,2,1];
2543}
Craig Topper17a31182017-12-16 18:35:29 +00002544def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002545
2546def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2547 let Latency = 26;
2548 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002549 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002550}
Craig Topper17a31182017-12-16 18:35:29 +00002551def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002552
2553def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2554 let Latency = 27;
2555 let NumMicroOps = 9;
2556 let ResourceCycles = [1,5,2,1];
2557}
Craig Topper17a31182017-12-16 18:35:29 +00002558def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002559
Gadi Haber323f2e12017-10-24 20:19:47 +00002560def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2561 let Latency = 29;
2562 let NumMicroOps = 27;
2563 let ResourceCycles = [1,5,1,1,19];
2564}
2565def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2566
2567def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2568 let Latency = 30;
2569 let NumMicroOps = 28;
2570 let ResourceCycles = [1,6,1,1,19];
2571}
Craig Topper2d451e72018-03-18 08:38:06 +00002572def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002573
2574def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2575 let Latency = 31;
2576 let NumMicroOps = 31;
2577 let ResourceCycles = [8,1,21,1];
2578}
2579def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2580
Craig Topper8104f262018-04-02 05:33:28 +00002581def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2582 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002583 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002584 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002585}
2586def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2587
2588def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2589 let Latency = 34;
2590 let NumMicroOps = 8;
2591 let ResourceCycles = [2,2,2,1,1];
2592}
Craig Topper13a16502018-03-19 00:56:09 +00002593def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002594
2595def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2596 let Latency = 34;
2597 let NumMicroOps = 23;
2598 let ResourceCycles = [1,5,3,4,10];
2599}
Craig Topper5a69a002018-03-21 06:28:42 +00002600def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2601 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002602
2603def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2604 let Latency = 35;
2605 let NumMicroOps = 8;
2606 let ResourceCycles = [2,2,2,1,1];
2607}
Craig Topper13a16502018-03-19 00:56:09 +00002608def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002609
2610def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2611 let Latency = 35;
2612 let NumMicroOps = 23;
2613 let ResourceCycles = [1,5,2,1,4,10];
2614}
Craig Topper5a69a002018-03-21 06:28:42 +00002615def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2616 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002617
Craig Topper8104f262018-04-02 05:33:28 +00002618def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2619 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002620 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002621 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002622}
2623def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2624
2625def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2626 let Latency = 42;
2627 let NumMicroOps = 22;
2628 let ResourceCycles = [2,20];
2629}
Craig Topper2d451e72018-03-18 08:38:06 +00002630def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002631
2632def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2633 let Latency = 60;
2634 let NumMicroOps = 64;
2635 let ResourceCycles = [2,2,8,1,10,2,39];
2636}
2637def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002638
2639def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2640 let Latency = 63;
2641 let NumMicroOps = 88;
2642 let ResourceCycles = [4,4,31,1,2,1,45];
2643}
Craig Topper2d451e72018-03-18 08:38:06 +00002644def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002645
2646def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2647 let Latency = 63;
2648 let NumMicroOps = 90;
2649 let ResourceCycles = [4,2,33,1,2,1,47];
2650}
Craig Topper2d451e72018-03-18 08:38:06 +00002651def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002652
2653def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2654 let Latency = 75;
2655 let NumMicroOps = 15;
2656 let ResourceCycles = [6,3,6];
2657}
2658def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2659
2660def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2661 let Latency = 80;
2662 let NumMicroOps = 32;
2663 let ResourceCycles = [7,7,3,3,1,11];
2664}
2665def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2666
2667def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2668 let Latency = 115;
2669 let NumMicroOps = 100;
2670 let ResourceCycles = [9,9,11,8,1,11,21,30];
2671}
2672def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002673
2674} // SchedModel
2675