blob: 256dd897fe75fb9e87617a99b8ef7e98fd131901 [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",
404 "(V?)PACKSSDW(Y?)rr",
405 "(V?)PACKSSWB(Y?)rr",
406 "(V?)PACKUSDW(Y?)rr",
407 "(V?)PACKUSWB(Y?)rr",
408 "(V?)PALIGNR(Y?)rri",
409 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000410 "VPBROADCASTDrr",
411 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000412 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000413 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000414 "(V?)PMOVSXBDrr",
415 "(V?)PMOVSXBQrr",
416 "(V?)PMOVSXBWrr",
417 "(V?)PMOVSXDQrr",
418 "(V?)PMOVSXWDrr",
419 "(V?)PMOVSXWQrr",
420 "(V?)PMOVZXBDrr",
421 "(V?)PMOVZXBQrr",
422 "(V?)PMOVZXBWrr",
423 "(V?)PMOVZXDQrr",
424 "(V?)PMOVZXWDrr",
425 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000426 "(V?)PSHUFD(Y?)ri",
427 "(V?)PSHUFHW(Y?)ri",
428 "(V?)PSHUFLW(Y?)ri",
429 "(V?)PSLLDQ(Y?)ri",
430 "(V?)PSRLDQ(Y?)ri",
431 "(V?)PUNPCKHBW(Y?)rr",
432 "(V?)PUNPCKHDQ(Y?)rr",
433 "(V?)PUNPCKHQDQ(Y?)rr",
434 "(V?)PUNPCKHWD(Y?)rr",
435 "(V?)PUNPCKLBW(Y?)rr",
436 "(V?)PUNPCKLDQ(Y?)rr",
437 "(V?)PUNPCKLQDQ(Y?)rr",
438 "(V?)PUNPCKLWD(Y?)rr",
439 "(V?)SHUFPD(Y?)rri",
440 "(V?)SHUFPS(Y?)rri",
441 "(V?)UNPCKHPD(Y?)rr",
442 "(V?)UNPCKHPS(Y?)rr",
443 "(V?)UNPCKLPD(Y?)rr",
444 "(V?)UNPCKLPS(Y?)rr",
445 "(V?)XORPD(Y?)rr",
446 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000447
448def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
449 let Latency = 1;
450 let NumMicroOps = 1;
451 let ResourceCycles = [1];
452}
453def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
454
455def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
456 let Latency = 1;
457 let NumMicroOps = 1;
458 let ResourceCycles = [1];
459}
Craig Topper5a69a002018-03-21 06:28:42 +0000460def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
461 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000462
463def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
464 let Latency = 1;
465 let NumMicroOps = 1;
466 let ResourceCycles = [1];
467}
Craig Topperfbe31322018-04-05 21:56:19 +0000468def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000469def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
470 "ADC(16|32|64)i",
471 "ADC(8|16|32|64)rr",
472 "ADCX(32|64)rr",
473 "ADOX(32|64)rr",
474 "BT(16|32|64)ri8",
475 "BT(16|32|64)rr",
476 "BTC(16|32|64)ri8",
477 "BTC(16|32|64)rr",
478 "BTR(16|32|64)ri8",
479 "BTR(16|32|64)rr",
480 "BTS(16|32|64)ri8",
481 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000482 "RORX(32|64)ri",
483 "SAR(8|16|32|64)r1",
484 "SAR(8|16|32|64)ri",
485 "SARX(32|64)rr",
486 "SBB(16|32|64)ri",
487 "SBB(16|32|64)i",
488 "SBB(8|16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000489 "SHL(8|16|32|64)r1",
490 "SHL(8|16|32|64)ri",
491 "SHLX(32|64)rr",
492 "SHR(8|16|32|64)r1",
493 "SHR(8|16|32|64)ri",
494 "SHRX(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000495
496def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
497 let Latency = 1;
498 let NumMicroOps = 1;
499 let ResourceCycles = [1];
500}
Craig Topper5a69a002018-03-21 06:28:42 +0000501def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
502 "BLSI(32|64)rr",
503 "BLSMSK(32|64)rr",
504 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000505 "LEA(16|32|64)(_32)?r",
506 "MMX_PABSBrr",
507 "MMX_PABSDrr",
508 "MMX_PABSWrr",
509 "MMX_PADDBirr",
510 "MMX_PADDDirr",
511 "MMX_PADDQirr",
512 "MMX_PADDSBirr",
513 "MMX_PADDSWirr",
514 "MMX_PADDUSBirr",
515 "MMX_PADDUSWirr",
516 "MMX_PADDWirr",
517 "MMX_PAVGBirr",
518 "MMX_PAVGWirr",
519 "MMX_PCMPEQBirr",
520 "MMX_PCMPEQDirr",
521 "MMX_PCMPEQWirr",
522 "MMX_PCMPGTBirr",
523 "MMX_PCMPGTDirr",
524 "MMX_PCMPGTWirr",
525 "MMX_PMAXSWirr",
526 "MMX_PMAXUBirr",
527 "MMX_PMINSWirr",
528 "MMX_PMINUBirr",
529 "MMX_PSIGNBrr",
530 "MMX_PSIGNDrr",
531 "MMX_PSIGNWrr",
532 "MMX_PSUBBirr",
533 "MMX_PSUBDirr",
534 "MMX_PSUBQirr",
535 "MMX_PSUBSBirr",
536 "MMX_PSUBSWirr",
537 "MMX_PSUBUSBirr",
538 "MMX_PSUBUSWirr",
539 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000540 "(V?)PABSB(Y?)rr",
541 "(V?)PABSD(Y?)rr",
542 "(V?)PABSW(Y?)rr",
543 "(V?)PADDB(Y?)rr",
544 "(V?)PADDD(Y?)rr",
545 "(V?)PADDQ(Y?)rr",
546 "(V?)PADDSB(Y?)rr",
547 "(V?)PADDSW(Y?)rr",
548 "(V?)PADDUSB(Y?)rr",
549 "(V?)PADDUSW(Y?)rr",
550 "(V?)PADDW(Y?)rr",
551 "(V?)PAVGB(Y?)rr",
552 "(V?)PAVGW(Y?)rr",
553 "(V?)PCMPEQB(Y?)rr",
554 "(V?)PCMPEQD(Y?)rr",
555 "(V?)PCMPEQQ(Y?)rr",
556 "(V?)PCMPEQW(Y?)rr",
557 "(V?)PCMPGTB(Y?)rr",
558 "(V?)PCMPGTD(Y?)rr",
559 "(V?)PCMPGTW(Y?)rr",
560 "(V?)PMAXSB(Y?)rr",
561 "(V?)PMAXSD(Y?)rr",
562 "(V?)PMAXSW(Y?)rr",
563 "(V?)PMAXUB(Y?)rr",
564 "(V?)PMAXUD(Y?)rr",
565 "(V?)PMAXUW(Y?)rr",
566 "(V?)PMINSB(Y?)rr",
567 "(V?)PMINSD(Y?)rr",
568 "(V?)PMINSW(Y?)rr",
569 "(V?)PMINUB(Y?)rr",
570 "(V?)PMINUD(Y?)rr",
571 "(V?)PMINUW(Y?)rr",
572 "(V?)PSIGNB(Y?)rr",
573 "(V?)PSIGND(Y?)rr",
574 "(V?)PSIGNW(Y?)rr",
575 "(V?)PSUBB(Y?)rr",
576 "(V?)PSUBD(Y?)rr",
577 "(V?)PSUBQ(Y?)rr",
578 "(V?)PSUBSB(Y?)rr",
579 "(V?)PSUBSW(Y?)rr",
580 "(V?)PSUBUSB(Y?)rr",
581 "(V?)PSUBUSW(Y?)rr",
582 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000583
584def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
585 let Latency = 1;
586 let NumMicroOps = 1;
587 let ResourceCycles = [1];
588}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000589def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000590 "MMX_PANDNirr",
591 "MMX_PANDirr",
592 "MMX_PORirr",
593 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000594 "(V?)BLENDPD(Y?)rri",
595 "(V?)BLENDPS(Y?)rri",
596 "(V?)MOVDQA(Y?)rr",
597 "(V?)MOVDQU(Y?)rr",
598 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000599 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000600 "(V?)PANDN(Y?)rr",
601 "(V?)PAND(Y?)rr",
602 "VPBLENDD(Y?)rri",
603 "(V?)POR(Y?)rr",
604 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000605
606def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
607 let Latency = 1;
608 let NumMicroOps = 1;
609 let ResourceCycles = [1];
610}
Craig Topperfbe31322018-04-05 21:56:19 +0000611def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000612def: InstRW<[BWWriteResGroup9], (instregex "CLC",
Craig Topper5a69a002018-03-21 06:28:42 +0000613 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000614 "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000615 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000616 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000617 "SGDT64m",
618 "SIDT64m",
619 "SLDT64m",
620 "SMSW16m",
621 "STC",
622 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000623 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000624 "XCHG(16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000625
626def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
627 let Latency = 1;
628 let NumMicroOps = 2;
629 let ResourceCycles = [1,1];
630}
Craig Topper5a69a002018-03-21 06:28:42 +0000631def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
632 "MMX_MOVD64from64rm",
633 "MMX_MOVD64mr",
634 "MMX_MOVNTQmr",
635 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000636 "MOVNTI_64mr",
637 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000638 "ST_FP32m",
639 "ST_FP64m",
640 "ST_FP80m",
641 "VEXTRACTF128mr",
642 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000643 "(V?)MOVAPD(Y?)mr",
644 "(V?)MOVAPS(Y?)mr",
645 "(V?)MOVDQA(Y?)mr",
646 "(V?)MOVDQU(Y?)mr",
647 "(V?)MOVHPDmr",
648 "(V?)MOVHPSmr",
649 "(V?)MOVLPDmr",
650 "(V?)MOVLPSmr",
651 "(V?)MOVNTDQ(V?)mr",
652 "(V?)MOVNTPD(V?)mr",
653 "(V?)MOVNTPS(V?)mr",
654 "(V?)MOVPDI2DImr",
655 "(V?)MOVPQI2QImr",
656 "(V?)MOVPQIto64mr",
657 "(V?)MOVSDmr",
658 "(V?)MOVSSmr",
659 "(V?)MOVUPD(Y?)mr",
660 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000661
662def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
663 let Latency = 2;
664 let NumMicroOps = 2;
665 let ResourceCycles = [2];
666}
Craig Topper5a69a002018-03-21 06:28:42 +0000667def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
668 "BLENDVPSrr0",
669 "MMX_PINSRWrr",
670 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000671 "VBLENDVPD(Y?)rr",
672 "VBLENDVPS(Y?)rr",
673 "VPBLENDVB(Y?)rr",
674 "(V?)PINSRBrr",
675 "(V?)PINSRDrr",
676 "(V?)PINSRQrr",
677 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000678
679def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
680 let Latency = 2;
681 let NumMicroOps = 2;
682 let ResourceCycles = [2];
683}
684def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
685
686def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
687 let Latency = 2;
688 let NumMicroOps = 2;
689 let ResourceCycles = [2];
690}
Craig Topper5a69a002018-03-21 06:28:42 +0000691def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
692 "ROL(8|16|32|64)ri",
693 "ROR(8|16|32|64)r1",
694 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000695
696def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
697 let Latency = 2;
698 let NumMicroOps = 2;
699 let ResourceCycles = [2];
700}
Craig Topper5a69a002018-03-21 06:28:42 +0000701def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
702 "MFENCE",
703 "WAIT",
704 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000705
706def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
707 let Latency = 2;
708 let NumMicroOps = 2;
709 let ResourceCycles = [1,1];
710}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000711def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
712 "VCVTPH2PS(Y?)rr",
713 "(V?)CVTPS2PDrr",
714 "(V?)CVTSS2SDrr",
715 "(V?)EXTRACTPSrr",
716 "(V?)PEXTRBrr",
717 "(V?)PEXTRDrr",
718 "(V?)PEXTRQrr",
719 "(V?)PEXTRWrr",
720 "(V?)PSLLDrr",
721 "(V?)PSLLQrr",
722 "(V?)PSLLWrr",
723 "(V?)PSRADrr",
724 "(V?)PSRAWrr",
725 "(V?)PSRLDrr",
726 "(V?)PSRLQrr",
727 "(V?)PSRLWrr",
728 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000729
730def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
731 let Latency = 2;
732 let NumMicroOps = 2;
733 let ResourceCycles = [1,1];
734}
735def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
736
737def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
738 let Latency = 2;
739 let NumMicroOps = 2;
740 let ResourceCycles = [1,1];
741}
742def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
743
744def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
745 let Latency = 2;
746 let NumMicroOps = 2;
747 let ResourceCycles = [1,1];
748}
749def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
750
751def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
752 let Latency = 2;
753 let NumMicroOps = 2;
754 let ResourceCycles = [1,1];
755}
Craig Topper498875f2018-04-04 17:54:19 +0000756def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
757
758def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
759 let Latency = 1;
760 let NumMicroOps = 1;
761 let ResourceCycles = [1];
762}
763def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000764
765def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
766 let Latency = 2;
767 let NumMicroOps = 2;
768 let ResourceCycles = [1,1];
769}
Craig Topper2d451e72018-03-18 08:38:06 +0000770def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000771def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000772def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
773 "ADC8ri",
774 "CMOV(A|BE)(16|32|64)rr",
775 "SBB8i8",
776 "SBB8ri",
777 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000778
779def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
780 let Latency = 2;
781 let NumMicroOps = 3;
782 let ResourceCycles = [1,1,1];
783}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000784def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
785 "(V?)PEXTRBmr",
786 "(V?)PEXTRDmr",
787 "(V?)PEXTRQmr",
788 "(V?)PEXTRWmr",
789 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000790
791def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
792 let Latency = 2;
793 let NumMicroOps = 3;
794 let ResourceCycles = [1,1,1];
795}
796def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
797
Gadi Haber323f2e12017-10-24 20:19:47 +0000798def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
799 let Latency = 2;
800 let NumMicroOps = 3;
801 let ResourceCycles = [1,1,1];
802}
803def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
804
805def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
806 let Latency = 2;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,1,1];
809}
Craig Topper2d451e72018-03-18 08:38:06 +0000810def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000811def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
812 "PUSH64i8",
813 "STOSB",
814 "STOSL",
815 "STOSQ",
816 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000817
Gadi Haber323f2e12017-10-24 20:19:47 +0000818def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
819 let Latency = 3;
820 let NumMicroOps = 1;
821 let ResourceCycles = [1];
822}
Clement Courbet327fac42018-03-07 08:14:02 +0000823def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000824def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000825def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000826 "ADD_FST0r",
827 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000828 "MMX_CVTPI2PSirr",
829 "PDEP(32|64)rr",
830 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000831 "SHLD(16|32|64)rri8",
832 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000833 "SUBR_FPrST0",
834 "SUBR_FST0r",
835 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000836 "SUB_FPrST0",
837 "SUB_FST0r",
838 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000839 "(V?)ADDPD(Y?)rr",
840 "(V?)ADDPS(Y?)rr",
841 "(V?)ADDSDrr",
842 "(V?)ADDSSrr",
843 "(V?)ADDSUBPD(Y?)rr",
844 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000845 "(V?)CVTDQ2PS(Y?)rr",
846 "(V?)CVTPS2DQ(Y?)rr",
847 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000848 "(V?)SUBPD(Y?)rr",
849 "(V?)SUBPS(Y?)rr",
850 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000851 "(V?)SUBSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000852
853def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
854 let Latency = 3;
855 let NumMicroOps = 2;
856 let ResourceCycles = [1,1];
857}
Clement Courbet327fac42018-03-07 08:14:02 +0000858def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000859
860def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
861 let Latency = 3;
862 let NumMicroOps = 1;
863 let ResourceCycles = [1];
864}
Craig Topper5a69a002018-03-21 06:28:42 +0000865def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
866 "VBROADCASTSSYrr",
867 "VEXTRACTF128rr",
868 "VEXTRACTI128rr",
869 "VINSERTF128rr",
870 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000871 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000872 "VPBROADCASTDYrr",
873 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000874 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000875 "VPERM2F128rr",
876 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000877 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000878 "VPERMQYri",
879 "VPMOVSXBDYrr",
880 "VPMOVSXBQYrr",
881 "VPMOVSXBWYrr",
882 "VPMOVSXDQYrr",
883 "VPMOVSXWDYrr",
884 "VPMOVSXWQYrr",
885 "VPMOVZXBDYrr",
886 "VPMOVZXBQYrr",
887 "VPMOVZXBWYrr",
888 "VPMOVZXDQYrr",
889 "VPMOVZXWDYrr",
890 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000891
892def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
893 let Latency = 3;
894 let NumMicroOps = 1;
895 let ResourceCycles = [1];
896}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000897def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
898 "(V?)MULPS(Y?)rr",
899 "(V?)MULSDrr",
900 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000901
902def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
903 let Latency = 3;
904 let NumMicroOps = 3;
905 let ResourceCycles = [3];
906}
Craig Topper5a69a002018-03-21 06:28:42 +0000907def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
908 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000909
910def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
911 let Latency = 3;
912 let NumMicroOps = 3;
913 let ResourceCycles = [2,1];
914}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000915def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
916 "VPSRAVD(Y?)rr",
917 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000918
919def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
920 let Latency = 3;
921 let NumMicroOps = 3;
922 let ResourceCycles = [2,1];
923}
Craig Topper5a69a002018-03-21 06:28:42 +0000924def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
925 "MMX_PHADDSWrr",
926 "MMX_PHADDWrr",
927 "MMX_PHSUBDrr",
928 "MMX_PHSUBSWrr",
929 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000930 "(V?)PHADDD(Y?)rr",
931 "(V?)PHADDSW(Y?)rr",
932 "(V?)PHADDW(Y?)rr",
933 "(V?)PHSUBD(Y?)rr",
934 "(V?)PHSUBSW(Y?)rr",
935 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000936
937def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
938 let Latency = 3;
939 let NumMicroOps = 3;
940 let ResourceCycles = [2,1];
941}
Craig Topper5a69a002018-03-21 06:28:42 +0000942def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
943 "MMX_PACKSSWBirr",
944 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000945
946def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
947 let Latency = 3;
948 let NumMicroOps = 3;
949 let ResourceCycles = [1,2];
950}
951def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
952
953def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
954 let Latency = 3;
955 let NumMicroOps = 3;
956 let ResourceCycles = [1,2];
957}
Craig Topper5a69a002018-03-21 06:28:42 +0000958def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
959 "RCL(8|16|32|64)ri",
960 "RCR(8|16|32|64)r1",
961 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000962
963def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
964 let Latency = 3;
965 let NumMicroOps = 3;
966 let ResourceCycles = [2,1];
967}
Craig Topper5a69a002018-03-21 06:28:42 +0000968def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
969 "ROR(8|16|32|64)rCL",
970 "SAR(8|16|32|64)rCL",
971 "SHL(8|16|32|64)rCL",
972 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000973
974def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
975 let Latency = 3;
976 let NumMicroOps = 4;
977 let ResourceCycles = [1,1,1,1];
978}
979def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
980
981def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
982 let Latency = 3;
983 let NumMicroOps = 4;
984 let ResourceCycles = [1,1,1,1];
985}
Craig Topper5a69a002018-03-21 06:28:42 +0000986def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
987 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000988
989def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
990 let Latency = 4;
991 let NumMicroOps = 2;
992 let ResourceCycles = [1,1];
993}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000994def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
995 "(V?)CVTSD2SIrr",
996 "(V?)CVTSS2SI64rr",
997 "(V?)CVTSS2SIrr",
998 "(V?)CVTTSD2SI64rr",
999 "(V?)CVTTSD2SIrr",
1000 "(V?)CVTTSS2SI64rr",
1001 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001002
1003def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1004 let Latency = 4;
1005 let NumMicroOps = 2;
1006 let ResourceCycles = [1,1];
1007}
Craig Topper5a69a002018-03-21 06:28:42 +00001008def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1009 "VPSLLDYrr",
1010 "VPSLLQYrr",
1011 "VPSLLWYrr",
1012 "VPSRADYrr",
1013 "VPSRAWYrr",
1014 "VPSRLDYrr",
1015 "VPSRLQYrr",
1016 "VPSRLWYrr",
1017 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001018
1019def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1020 let Latency = 4;
1021 let NumMicroOps = 2;
1022 let ResourceCycles = [1,1];
1023}
1024def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1025
1026def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1027 let Latency = 4;
1028 let NumMicroOps = 2;
1029 let ResourceCycles = [1,1];
1030}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001031def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001032def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001033 "MMX_CVTPI2PDirr",
1034 "MMX_CVTPS2PIirr",
1035 "MMX_CVTTPD2PIirr",
1036 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001037 "(V?)CVTDQ2PDrr",
1038 "(V?)CVTPD2DQrr",
1039 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001040 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001041 "(V?)CVTSD2SSrr",
1042 "(V?)CVTSI642SDrr",
1043 "(V?)CVTSI2SDrr",
1044 "(V?)CVTSI2SSrr",
1045 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001046
1047def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1048 let Latency = 4;
1049 let NumMicroOps = 4;
1050}
Craig Topper5a69a002018-03-21 06:28:42 +00001051def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001052
1053def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1054 let Latency = 4;
1055 let NumMicroOps = 3;
1056 let ResourceCycles = [1,1,1];
1057}
1058def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1059
1060def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1061 let Latency = 4;
1062 let NumMicroOps = 3;
1063 let ResourceCycles = [1,1,1];
1064}
Craig Topper5a69a002018-03-21 06:28:42 +00001065def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1066 "ISTT_FP32m",
1067 "ISTT_FP64m",
1068 "IST_F16m",
1069 "IST_F32m",
1070 "IST_FP16m",
1071 "IST_FP32m",
1072 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001073 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001074
1075def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1076 let Latency = 4;
1077 let NumMicroOps = 4;
1078 let ResourceCycles = [4];
1079}
1080def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1081
1082def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1083 let Latency = 4;
1084 let NumMicroOps = 4;
1085 let ResourceCycles = [1,3];
1086}
1087def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1088
1089def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1090 let Latency = 5;
1091 let NumMicroOps = 1;
1092 let ResourceCycles = [1];
1093}
Craig Topper5a69a002018-03-21 06:28:42 +00001094def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1095 "MMX_PMADDWDirr",
1096 "MMX_PMULHRSWrr",
1097 "MMX_PMULHUWirr",
1098 "MMX_PMULHWirr",
1099 "MMX_PMULLWirr",
1100 "MMX_PMULUDQirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001101 "MUL_FPrST0",
1102 "MUL_FST0r",
1103 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001104 "(V?)PCMPGTQ(Y?)rr",
1105 "(V?)PHMINPOSUWrr",
1106 "(V?)PMADDUBSW(Y?)rr",
1107 "(V?)PMADDWD(Y?)rr",
1108 "(V?)PMULDQ(Y?)rr",
1109 "(V?)PMULHRSW(Y?)rr",
1110 "(V?)PMULHUW(Y?)rr",
1111 "(V?)PMULHW(Y?)rr",
1112 "(V?)PMULLW(Y?)rr",
1113 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001114 "(V?)RCPPSr",
1115 "(V?)RCPSSr",
1116 "(V?)RSQRTPSr",
1117 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001118
1119def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1120 let Latency = 5;
1121 let NumMicroOps = 1;
1122 let ResourceCycles = [1];
1123}
Craig Topperf82867c2017-12-13 23:11:30 +00001124def: InstRW<[BWWriteResGroup48],
1125 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1126 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001127
1128def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1129 let Latency = 5;
1130 let NumMicroOps = 1;
1131 let ResourceCycles = [1];
1132}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001133def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001134 "MMX_MOVD64to64rm",
1135 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001136 "MOVSX(16|32|64)rm16",
1137 "MOVSX(16|32|64)rm32",
1138 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001139 "MOVZX(16|32|64)rm16",
1140 "MOVZX(16|32|64)rm8",
1141 "PREFETCHNTA",
1142 "PREFETCHT0",
1143 "PREFETCHT1",
1144 "PREFETCHT2",
1145 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001146 "(V?)LDDQUrm",
1147 "(V?)MOV64toPQIrm",
1148 "(V?)MOVAPDrm",
1149 "(V?)MOVAPSrm",
1150 "(V?)MOVDDUPrm",
1151 "(V?)MOVDI2PDIrm",
1152 "(V?)MOVDQArm",
1153 "(V?)MOVDQUrm",
1154 "(V?)MOVNTDQArm",
1155 "(V?)MOVQI2PQIrm",
1156 "(V?)MOVSDrm",
1157 "(V?)MOVSHDUPrm",
1158 "(V?)MOVSLDUPrm",
1159 "(V?)MOVSSrm",
1160 "(V?)MOVUPDrm",
1161 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001162 "VPBROADCASTDrm",
1163 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001164
1165def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1166 let Latency = 5;
1167 let NumMicroOps = 3;
1168 let ResourceCycles = [1,2];
1169}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001170def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1171 "(V?)HADDPD(Y?)rr",
1172 "(V?)HADDPS(Y?)rr",
1173 "(V?)HSUBPD(Y?)rr",
1174 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001175
1176def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1177 let Latency = 5;
1178 let NumMicroOps = 3;
1179 let ResourceCycles = [1,1,1];
1180}
1181def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1182
1183def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001184 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001185 let NumMicroOps = 3;
1186 let ResourceCycles = [1,1,1];
1187}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001188def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001189
1190def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1191 let Latency = 5;
1192 let NumMicroOps = 4;
1193 let ResourceCycles = [1,1,1,1];
1194}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001195def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1196 "VMASKMOVPS(Y?)mr",
1197 "VPMASKMOVD(Y?)mr",
1198 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001199
1200def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1201 let Latency = 5;
1202 let NumMicroOps = 5;
1203 let ResourceCycles = [1,4];
1204}
1205def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1206
1207def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1208 let Latency = 5;
1209 let NumMicroOps = 5;
1210 let ResourceCycles = [1,4];
1211}
1212def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1213
1214def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1215 let Latency = 5;
1216 let NumMicroOps = 5;
1217 let ResourceCycles = [2,3];
1218}
Craig Topper5a69a002018-03-21 06:28:42 +00001219def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001220
1221def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1222 let Latency = 5;
1223 let NumMicroOps = 6;
1224 let ResourceCycles = [1,1,4];
1225}
Craig Topper5a69a002018-03-21 06:28:42 +00001226def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001227
1228def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1229 let Latency = 6;
1230 let NumMicroOps = 1;
1231 let ResourceCycles = [1];
1232}
Craig Topper5a69a002018-03-21 06:28:42 +00001233def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1234 "LD_F64m",
1235 "LD_F80m",
1236 "VBROADCASTF128",
1237 "VBROADCASTI128",
1238 "VBROADCASTSDYrm",
1239 "VBROADCASTSSYrm",
1240 "VLDDQUYrm",
1241 "VMOVAPDYrm",
1242 "VMOVAPSYrm",
1243 "VMOVDDUPYrm",
1244 "VMOVDQAYrm",
1245 "VMOVDQUYrm",
1246 "VMOVNTDQAYrm",
1247 "VMOVSHDUPYrm",
1248 "VMOVSLDUPYrm",
1249 "VMOVUPDYrm",
1250 "VMOVUPSYrm",
1251 "VPBROADCASTDYrm",
1252 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001253 "(V?)ROUNDPD(Y?)r",
1254 "(V?)ROUNDPS(Y?)r",
1255 "(V?)ROUNDSDr",
1256 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001257
1258def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1259 let Latency = 6;
1260 let NumMicroOps = 2;
1261 let ResourceCycles = [1,1];
1262}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001263def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001264 "MMX_PSLLQrm",
1265 "MMX_PSLLWrm",
1266 "MMX_PSRADrm",
1267 "MMX_PSRAWrm",
1268 "MMX_PSRLDrm",
1269 "MMX_PSRLQrm",
1270 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001271 "VCVTPH2PS(Y?)rm",
1272 "(V?)CVTPS2PDrm",
1273 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001274 "VPSLLVQrm",
1275 "VPSRLVQrm",
1276 "VTESTPDrm",
1277 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001278
1279def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1280 let Latency = 6;
1281 let NumMicroOps = 2;
1282 let ResourceCycles = [1,1];
1283}
Craig Topper5a69a002018-03-21 06:28:42 +00001284def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1285 "VCVTPD2DQYrr",
1286 "VCVTPD2PSYrr",
1287 "VCVTPS2PHYrr",
1288 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001289
1290def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1291 let Latency = 6;
1292 let NumMicroOps = 2;
1293 let ResourceCycles = [1,1];
1294}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001295def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001296 "MMX_PINSRWrm",
1297 "MMX_PSHUFBrm",
1298 "MMX_PSHUFWmi",
1299 "MMX_PUNPCKHBWirm",
1300 "MMX_PUNPCKHDQirm",
1301 "MMX_PUNPCKHWDirm",
1302 "MMX_PUNPCKLBWirm",
1303 "MMX_PUNPCKLDQirm",
1304 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001305 "(V?)ANDNPDrm",
1306 "(V?)ANDNPSrm",
1307 "(V?)ANDPDrm",
1308 "(V?)ANDPSrm",
1309 "(V?)INSERTPSrm",
1310 "(V?)MOVHPDrm",
1311 "(V?)MOVHPSrm",
1312 "(V?)MOVLPDrm",
1313 "(V?)MOVLPSrm",
1314 "(V?)ORPDrm",
1315 "(V?)ORPSrm",
1316 "(V?)PACKSSDWrm",
1317 "(V?)PACKSSWBrm",
1318 "(V?)PACKUSDWrm",
1319 "(V?)PACKUSWBrm",
1320 "(V?)PALIGNRrmi",
1321 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001322 "VPERMILPDmi",
1323 "VPERMILPDrm",
1324 "VPERMILPSmi",
1325 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001326 "(V?)PINSRBrm",
1327 "(V?)PINSRDrm",
1328 "(V?)PINSRQrm",
1329 "(V?)PINSRWrm",
1330 "(V?)PMOVSXBDrm",
1331 "(V?)PMOVSXBQrm",
1332 "(V?)PMOVSXBWrm",
1333 "(V?)PMOVSXDQrm",
1334 "(V?)PMOVSXWDrm",
1335 "(V?)PMOVSXWQrm",
1336 "(V?)PMOVZXBDrm",
1337 "(V?)PMOVZXBQrm",
1338 "(V?)PMOVZXBWrm",
1339 "(V?)PMOVZXDQrm",
1340 "(V?)PMOVZXWDrm",
1341 "(V?)PMOVZXWQrm",
1342 "(V?)PSHUFBrm",
1343 "(V?)PSHUFDmi",
1344 "(V?)PSHUFHWmi",
1345 "(V?)PSHUFLWmi",
1346 "(V?)PUNPCKHBWrm",
1347 "(V?)PUNPCKHDQrm",
1348 "(V?)PUNPCKHQDQrm",
1349 "(V?)PUNPCKHWDrm",
1350 "(V?)PUNPCKLBWrm",
1351 "(V?)PUNPCKLDQrm",
1352 "(V?)PUNPCKLQDQrm",
1353 "(V?)PUNPCKLWDrm",
1354 "(V?)SHUFPDrmi",
1355 "(V?)SHUFPSrmi",
1356 "(V?)UNPCKHPDrm",
1357 "(V?)UNPCKHPSrm",
1358 "(V?)UNPCKLPDrm",
1359 "(V?)UNPCKLPSrm",
1360 "(V?)XORPDrm",
1361 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001362
1363def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1364 let Latency = 6;
1365 let NumMicroOps = 2;
1366 let ResourceCycles = [1,1];
1367}
Craig Topper5a69a002018-03-21 06:28:42 +00001368def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1369 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001370
1371def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1372 let Latency = 6;
1373 let NumMicroOps = 2;
1374 let ResourceCycles = [1,1];
1375}
Craig Topperc50570f2018-04-06 17:12:18 +00001376def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8",
Craig Topper5a69a002018-03-21 06:28:42 +00001377 "RORX(32|64)mi",
1378 "SARX(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001379 "SHLX(32|64)rm",
1380 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001381def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1382 ADCX32rm, ADCX64rm,
1383 ADOX32rm, ADOX64rm,
1384 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001385
1386def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1387 let Latency = 6;
1388 let NumMicroOps = 2;
1389 let ResourceCycles = [1,1];
1390}
Craig Topper5a69a002018-03-21 06:28:42 +00001391def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1392 "BLSI(32|64)rm",
1393 "BLSMSK(32|64)rm",
1394 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001395 "MMX_PABSBrm",
1396 "MMX_PABSDrm",
1397 "MMX_PABSWrm",
1398 "MMX_PADDBirm",
1399 "MMX_PADDDirm",
1400 "MMX_PADDQirm",
1401 "MMX_PADDSBirm",
1402 "MMX_PADDSWirm",
1403 "MMX_PADDUSBirm",
1404 "MMX_PADDUSWirm",
1405 "MMX_PADDWirm",
1406 "MMX_PAVGBirm",
1407 "MMX_PAVGWirm",
1408 "MMX_PCMPEQBirm",
1409 "MMX_PCMPEQDirm",
1410 "MMX_PCMPEQWirm",
1411 "MMX_PCMPGTBirm",
1412 "MMX_PCMPGTDirm",
1413 "MMX_PCMPGTWirm",
1414 "MMX_PMAXSWirm",
1415 "MMX_PMAXUBirm",
1416 "MMX_PMINSWirm",
1417 "MMX_PMINUBirm",
1418 "MMX_PSIGNBrm",
1419 "MMX_PSIGNDrm",
1420 "MMX_PSIGNWrm",
1421 "MMX_PSUBBirm",
1422 "MMX_PSUBDirm",
1423 "MMX_PSUBQirm",
1424 "MMX_PSUBSBirm",
1425 "MMX_PSUBSWirm",
1426 "MMX_PSUBUSBirm",
1427 "MMX_PSUBUSWirm",
1428 "MMX_PSUBWirm",
1429 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001430 "(V?)PABSBrm",
1431 "(V?)PABSDrm",
1432 "(V?)PABSWrm",
1433 "(V?)PADDBrm",
1434 "(V?)PADDDrm",
1435 "(V?)PADDQrm",
1436 "(V?)PADDSBrm",
1437 "(V?)PADDSWrm",
1438 "(V?)PADDUSBrm",
1439 "(V?)PADDUSWrm",
1440 "(V?)PADDWrm",
1441 "(V?)PAVGBrm",
1442 "(V?)PAVGWrm",
1443 "(V?)PCMPEQBrm",
1444 "(V?)PCMPEQDrm",
1445 "(V?)PCMPEQQrm",
1446 "(V?)PCMPEQWrm",
1447 "(V?)PCMPGTBrm",
1448 "(V?)PCMPGTDrm",
1449 "(V?)PCMPGTWrm",
1450 "(V?)PMAXSBrm",
1451 "(V?)PMAXSDrm",
1452 "(V?)PMAXSWrm",
1453 "(V?)PMAXUBrm",
1454 "(V?)PMAXUDrm",
1455 "(V?)PMAXUWrm",
1456 "(V?)PMINSBrm",
1457 "(V?)PMINSDrm",
1458 "(V?)PMINSWrm",
1459 "(V?)PMINUBrm",
1460 "(V?)PMINUDrm",
1461 "(V?)PMINUWrm",
1462 "(V?)PSIGNBrm",
1463 "(V?)PSIGNDrm",
1464 "(V?)PSIGNWrm",
1465 "(V?)PSUBBrm",
1466 "(V?)PSUBDrm",
1467 "(V?)PSUBQrm",
1468 "(V?)PSUBSBrm",
1469 "(V?)PSUBSWrm",
1470 "(V?)PSUBUSBrm",
1471 "(V?)PSUBUSWrm",
1472 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001473
1474def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1475 let Latency = 6;
1476 let NumMicroOps = 2;
1477 let ResourceCycles = [1,1];
1478}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001479def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001480 "MMX_PANDirm",
1481 "MMX_PORirm",
1482 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001483 "(V?)BLENDPDrmi",
1484 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001485 "VINSERTF128rm",
1486 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001487 "(V?)PANDNrm",
1488 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001489 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001490 "(V?)PORrm",
1491 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001492
1493def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1494 let Latency = 6;
1495 let NumMicroOps = 2;
1496 let ResourceCycles = [1,1];
1497}
Craig Topper2d451e72018-03-18 08:38:06 +00001498def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001499def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001500
1501def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1502 let Latency = 6;
1503 let NumMicroOps = 4;
1504 let ResourceCycles = [1,1,2];
1505}
Craig Topper5a69a002018-03-21 06:28:42 +00001506def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1507 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001508
1509def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1510 let Latency = 6;
1511 let NumMicroOps = 4;
1512 let ResourceCycles = [1,1,1,1];
1513}
1514def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1515
1516def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1517 let Latency = 6;
1518 let NumMicroOps = 4;
1519 let ResourceCycles = [1,1,1,1];
1520}
Craig Topper5a69a002018-03-21 06:28:42 +00001521def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1522 "BTR(16|32|64)mi8",
1523 "BTS(16|32|64)mi8",
1524 "SAR(8|16|32|64)m1",
1525 "SAR(8|16|32|64)mi",
1526 "SHL(8|16|32|64)m1",
1527 "SHL(8|16|32|64)mi",
1528 "SHR(8|16|32|64)m1",
1529 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001530
1531def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1532 let Latency = 6;
1533 let NumMicroOps = 4;
1534 let ResourceCycles = [1,1,1,1];
1535}
Craig Topperf0d04262018-04-06 16:16:48 +00001536def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1537 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001538
1539def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1540 let Latency = 6;
1541 let NumMicroOps = 6;
1542 let ResourceCycles = [1,5];
1543}
1544def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1545
Gadi Haber323f2e12017-10-24 20:19:47 +00001546def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1547 let Latency = 7;
1548 let NumMicroOps = 2;
1549 let ResourceCycles = [1,1];
1550}
Craig Topper5a69a002018-03-21 06:28:42 +00001551def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1552 "VPSLLQYrm",
1553 "VPSLLVQYrm",
1554 "VPSLLWYrm",
1555 "VPSRADYrm",
1556 "VPSRAWYrm",
1557 "VPSRLDYrm",
1558 "VPSRLQYrm",
1559 "VPSRLVQYrm",
1560 "VPSRLWYrm",
1561 "VTESTPDYrm",
1562 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001563
1564def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1565 let Latency = 7;
1566 let NumMicroOps = 2;
1567 let ResourceCycles = [1,1];
1568}
Craig Topper5a69a002018-03-21 06:28:42 +00001569def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1570 "FCOM64m",
1571 "FCOMP32m",
1572 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001573
1574def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1575 let Latency = 7;
1576 let NumMicroOps = 2;
1577 let ResourceCycles = [1,1];
1578}
Craig Topper5a69a002018-03-21 06:28:42 +00001579def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1580 "VANDNPSYrm",
1581 "VANDPDYrm",
1582 "VANDPSYrm",
1583 "VORPDYrm",
1584 "VORPSYrm",
1585 "VPACKSSDWYrm",
1586 "VPACKSSWBYrm",
1587 "VPACKUSDWYrm",
1588 "VPACKUSWBYrm",
1589 "VPALIGNRYrmi",
1590 "VPBLENDWYrmi",
1591 "VPERMILPDYmi",
1592 "VPERMILPDYrm",
1593 "VPERMILPSYmi",
1594 "VPERMILPSYrm",
1595 "VPSHUFBYrm",
1596 "VPSHUFDYmi",
1597 "VPSHUFHWYmi",
1598 "VPSHUFLWYmi",
1599 "VPUNPCKHBWYrm",
1600 "VPUNPCKHDQYrm",
1601 "VPUNPCKHQDQYrm",
1602 "VPUNPCKHWDYrm",
1603 "VPUNPCKLBWYrm",
1604 "VPUNPCKLDQYrm",
1605 "VPUNPCKLQDQYrm",
1606 "VPUNPCKLWDYrm",
1607 "VSHUFPDYrmi",
1608 "VSHUFPSYrmi",
1609 "VUNPCKHPDYrm",
1610 "VUNPCKHPSYrm",
1611 "VUNPCKLPDYrm",
1612 "VUNPCKLPSYrm",
1613 "VXORPDYrm",
1614 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001615
1616def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1617 let Latency = 7;
1618 let NumMicroOps = 2;
1619 let ResourceCycles = [1,1];
1620}
Craig Topper5a69a002018-03-21 06:28:42 +00001621def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1622 "VPABSDYrm",
1623 "VPABSWYrm",
1624 "VPADDBYrm",
1625 "VPADDDYrm",
1626 "VPADDQYrm",
1627 "VPADDSBYrm",
1628 "VPADDSWYrm",
1629 "VPADDUSBYrm",
1630 "VPADDUSWYrm",
1631 "VPADDWYrm",
1632 "VPAVGBYrm",
1633 "VPAVGWYrm",
1634 "VPCMPEQBYrm",
1635 "VPCMPEQDYrm",
1636 "VPCMPEQQYrm",
1637 "VPCMPEQWYrm",
1638 "VPCMPGTBYrm",
1639 "VPCMPGTDYrm",
1640 "VPCMPGTWYrm",
1641 "VPMAXSBYrm",
1642 "VPMAXSDYrm",
1643 "VPMAXSWYrm",
1644 "VPMAXUBYrm",
1645 "VPMAXUDYrm",
1646 "VPMAXUWYrm",
1647 "VPMINSBYrm",
1648 "VPMINSDYrm",
1649 "VPMINSWYrm",
1650 "VPMINUBYrm",
1651 "VPMINUDYrm",
1652 "VPMINUWYrm",
1653 "VPSIGNBYrm",
1654 "VPSIGNDYrm",
1655 "VPSIGNWYrm",
1656 "VPSUBBYrm",
1657 "VPSUBDYrm",
1658 "VPSUBQYrm",
1659 "VPSUBSBYrm",
1660 "VPSUBSWYrm",
1661 "VPSUBUSBYrm",
1662 "VPSUBUSWYrm",
1663 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001664
1665def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1666 let Latency = 7;
1667 let NumMicroOps = 2;
1668 let ResourceCycles = [1,1];
1669}
Craig Topper5a69a002018-03-21 06:28:42 +00001670def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1671 "VBLENDPSYrmi",
1672 "VPANDNYrm",
1673 "VPANDYrm",
1674 "VPBLENDDYrmi",
1675 "VPORYrm",
1676 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001677
1678def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1679 let Latency = 7;
1680 let NumMicroOps = 3;
1681 let ResourceCycles = [1,2];
1682}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001683def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001684
1685def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1686 let Latency = 7;
1687 let NumMicroOps = 3;
1688 let ResourceCycles = [2,1];
1689}
Craig Topper5a69a002018-03-21 06:28:42 +00001690def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1691 "BLENDVPSrm0",
1692 "MMX_PACKSSDWirm",
1693 "MMX_PACKSSWBirm",
1694 "MMX_PACKUSWBirm",
1695 "PBLENDVBrm0",
1696 "VBLENDVPDrm",
1697 "VBLENDVPSrm",
1698 "VMASKMOVPDrm",
1699 "VMASKMOVPSrm",
1700 "VPBLENDVBrm",
1701 "VPMASKMOVDrm",
1702 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001703
1704def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1705 let Latency = 7;
1706 let NumMicroOps = 3;
1707 let ResourceCycles = [1,2];
1708}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001709def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1710 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001711
1712def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1713 let Latency = 7;
1714 let NumMicroOps = 3;
1715 let ResourceCycles = [1,1,1];
1716}
Craig Topper5a69a002018-03-21 06:28:42 +00001717def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1718 "PSLLQrm",
1719 "PSLLWrm",
1720 "PSRADrm",
1721 "PSRAWrm",
1722 "PSRLDrm",
1723 "PSRLQrm",
1724 "PSRLWrm",
1725 "PTESTrm",
1726 "VPSLLDrm",
1727 "VPSLLQrm",
1728 "VPSLLWrm",
1729 "VPSRADrm",
1730 "VPSRAWrm",
1731 "VPSRLDrm",
1732 "VPSRLQrm",
1733 "VPSRLWrm",
1734 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001735
1736def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1737 let Latency = 7;
1738 let NumMicroOps = 3;
1739 let ResourceCycles = [1,1,1];
1740}
1741def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1742
1743def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1744 let Latency = 7;
1745 let NumMicroOps = 3;
1746 let ResourceCycles = [1,1,1];
1747}
Craig Topper5a69a002018-03-21 06:28:42 +00001748def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001749
1750def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1751 let Latency = 7;
1752 let NumMicroOps = 3;
1753 let ResourceCycles = [1,1,1];
1754}
Craig Topper5a69a002018-03-21 06:28:42 +00001755def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1756 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001757
Gadi Haber323f2e12017-10-24 20:19:47 +00001758def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1759 let Latency = 7;
1760 let NumMicroOps = 3;
1761 let ResourceCycles = [1,1,1];
1762}
Craig Topperf4cd9082018-01-19 05:47:32 +00001763def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001764
1765def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1766 let Latency = 7;
1767 let NumMicroOps = 5;
1768 let ResourceCycles = [1,1,1,2];
1769}
Craig Topper5a69a002018-03-21 06:28:42 +00001770def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1771 "ROL(8|16|32|64)mi",
1772 "ROR(8|16|32|64)m1",
1773 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001774
1775def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1776 let Latency = 7;
1777 let NumMicroOps = 5;
1778 let ResourceCycles = [1,1,1,2];
1779}
Craig Topper5a69a002018-03-21 06:28:42 +00001780def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001781
1782def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1783 let Latency = 7;
1784 let NumMicroOps = 5;
1785 let ResourceCycles = [1,1,1,1,1];
1786}
Craig Topper5a69a002018-03-21 06:28:42 +00001787def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1788 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001789
1790def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1791 let Latency = 7;
1792 let NumMicroOps = 7;
1793 let ResourceCycles = [2,2,1,2];
1794}
Craig Topper2d451e72018-03-18 08:38:06 +00001795def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001796
1797def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1798 let Latency = 8;
1799 let NumMicroOps = 2;
1800 let ResourceCycles = [1,1];
1801}
Craig Topperb369cdb2018-01-25 06:57:42 +00001802def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001803def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001804def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001805 "MMX_CVTPS2PIirm",
1806 "MMX_CVTTPS2PIirm",
1807 "PDEP(32|64)rm",
1808 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001809 "(V?)ADDPDrm",
1810 "(V?)ADDPSrm",
1811 "(V?)ADDSDrm",
1812 "(V?)ADDSSrm",
1813 "(V?)ADDSUBPDrm",
1814 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001815 "(V?)CVTDQ2PSrm",
1816 "(V?)CVTPS2DQrm",
1817 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001818 "(V?)SUBPDrm",
1819 "(V?)SUBPSrm",
1820 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001821 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001822
1823def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1824 let Latency = 8;
1825 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001826 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001827}
Craig Topperb369cdb2018-01-25 06:57:42 +00001828def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001829
1830def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1831 let Latency = 8;
1832 let NumMicroOps = 5;
1833}
Craig Topper5a69a002018-03-21 06:28:42 +00001834def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001835
Gadi Haber323f2e12017-10-24 20:19:47 +00001836def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1837 let Latency = 8;
1838 let NumMicroOps = 2;
1839 let ResourceCycles = [1,1];
1840}
Craig Topper5a69a002018-03-21 06:28:42 +00001841def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1842 "VPMOVSXBQYrm",
1843 "VPMOVSXBWYrm",
1844 "VPMOVSXDQYrm",
1845 "VPMOVSXWDYrm",
1846 "VPMOVSXWQYrm",
1847 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001848
1849def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1850 let Latency = 8;
1851 let NumMicroOps = 2;
1852 let ResourceCycles = [1,1];
1853}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001854def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1855 "(V?)MULPSrm",
1856 "(V?)MULSDrm",
1857 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001858
1859def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1860 let Latency = 8;
1861 let NumMicroOps = 3;
1862 let ResourceCycles = [2,1];
1863}
Craig Topper5a69a002018-03-21 06:28:42 +00001864def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1865 "VBLENDVPSYrm",
1866 "VMASKMOVPDYrm",
1867 "VMASKMOVPSYrm",
1868 "VPBLENDVBYrm",
1869 "VPMASKMOVDYrm",
1870 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001871
1872def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1873 let Latency = 8;
1874 let NumMicroOps = 4;
1875 let ResourceCycles = [2,1,1];
1876}
Craig Topper5a69a002018-03-21 06:28:42 +00001877def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1878 "VPSRAVDrm",
1879 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001880
1881def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1882 let Latency = 8;
1883 let NumMicroOps = 4;
1884 let ResourceCycles = [2,1,1];
1885}
Craig Topper5a69a002018-03-21 06:28:42 +00001886def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1887 "MMX_PHADDSWrm",
1888 "MMX_PHADDWrm",
1889 "MMX_PHSUBDrm",
1890 "MMX_PHSUBSWrm",
1891 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001892 "(V?)PHADDDrm",
1893 "(V?)PHADDSWrm",
1894 "(V?)PHADDWrm",
1895 "(V?)PHSUBDrm",
1896 "(V?)PHSUBSWrm",
1897 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001898
1899def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1900 let Latency = 8;
1901 let NumMicroOps = 5;
1902 let ResourceCycles = [1,1,1,2];
1903}
Craig Topper5a69a002018-03-21 06:28:42 +00001904def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1905 "RCL(8|16|32|64)mi",
1906 "RCR(8|16|32|64)m1",
1907 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001908
1909def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1910 let Latency = 8;
1911 let NumMicroOps = 5;
1912 let ResourceCycles = [1,1,2,1];
1913}
Craig Topper13a16502018-03-19 00:56:09 +00001914def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001915
1916def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1917 let Latency = 8;
1918 let NumMicroOps = 6;
1919 let ResourceCycles = [1,1,1,3];
1920}
Craig Topper9f834812018-04-01 21:54:24 +00001921def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001922
1923def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1924 let Latency = 8;
1925 let NumMicroOps = 6;
1926 let ResourceCycles = [1,1,1,2,1];
1927}
Craig Topper9f834812018-04-01 21:54:24 +00001928def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001929 "CMPXCHG(8|16|32|64)rm",
1930 "ROL(8|16|32|64)mCL",
1931 "SAR(8|16|32|64)mCL",
1932 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001933 "SHL(8|16|32|64)mCL",
1934 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001935def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1936 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001937
1938def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1939 let Latency = 9;
1940 let NumMicroOps = 2;
1941 let ResourceCycles = [1,1];
1942}
Craig Topper5a69a002018-03-21 06:28:42 +00001943def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1944 "ADD_F64m",
1945 "ILD_F16m",
1946 "ILD_F32m",
1947 "ILD_F64m",
1948 "SUBR_F32m",
1949 "SUBR_F64m",
1950 "SUB_F32m",
1951 "SUB_F64m",
1952 "VADDPDYrm",
1953 "VADDPSYrm",
1954 "VADDSUBPDYrm",
1955 "VADDSUBPSYrm",
1956 "VCMPPDYrmi",
1957 "VCMPPSYrmi",
1958 "VCVTDQ2PSYrm",
1959 "VCVTPS2DQYrm",
1960 "VCVTTPS2DQYrm",
1961 "VMAX(C?)PDYrm",
1962 "VMAX(C?)PSYrm",
1963 "VMIN(C?)PDYrm",
1964 "VMIN(C?)PSYrm",
1965 "VSUBPDYrm",
1966 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001967
1968def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1969 let Latency = 9;
1970 let NumMicroOps = 2;
1971 let ResourceCycles = [1,1];
1972}
Craig Topper5a69a002018-03-21 06:28:42 +00001973def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1974 "VPERM2I128rm",
1975 "VPERMDYrm",
1976 "VPERMPDYmi",
1977 "VPERMPSYrm",
1978 "VPERMQYmi",
1979 "VPMOVZXBDYrm",
1980 "VPMOVZXBQYrm",
1981 "VPMOVZXBWYrm",
1982 "VPMOVZXDQYrm",
1983 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001984
1985def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1986 let Latency = 9;
1987 let NumMicroOps = 2;
1988 let ResourceCycles = [1,1];
1989}
Craig Topper5a69a002018-03-21 06:28:42 +00001990def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1991 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001992
1993def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1994 let Latency = 9;
1995 let NumMicroOps = 3;
1996 let ResourceCycles = [1,1,1];
1997}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001998def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001999
2000def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2001 let Latency = 9;
2002 let NumMicroOps = 3;
2003 let ResourceCycles = [1,1,1];
2004}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002005def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2006 "(V?)CVTSD2SIrm",
2007 "(V?)CVTSS2SI64rm",
2008 "(V?)CVTSS2SIrm",
2009 "(V?)CVTTSD2SI64rm",
2010 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002011 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002012 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002013
2014def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2015 let Latency = 9;
2016 let NumMicroOps = 3;
2017 let ResourceCycles = [1,1,1];
2018}
2019def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2020
2021def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2022 let Latency = 9;
2023 let NumMicroOps = 3;
2024 let ResourceCycles = [1,1,1];
2025}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002026def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002027def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002028 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002029 "CVTTPD2DQrm",
2030 "MMX_CVTPD2PIirm",
2031 "MMX_CVTPI2PDirm",
2032 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002033 "(V?)CVTDQ2PDrm",
2034 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
2036def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2037 let Latency = 9;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [1,1,1];
2040}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002041def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2042 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002043
2044def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2045 let Latency = 9;
2046 let NumMicroOps = 4;
2047 let ResourceCycles = [2,1,1];
2048}
Craig Topper5a69a002018-03-21 06:28:42 +00002049def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2050 "VPSRAVDYrm",
2051 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002052
2053def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2054 let Latency = 9;
2055 let NumMicroOps = 4;
2056 let ResourceCycles = [2,1,1];
2057}
Craig Topper5a69a002018-03-21 06:28:42 +00002058def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2059 "VPHADDSWYrm",
2060 "VPHADDWYrm",
2061 "VPHSUBDYrm",
2062 "VPHSUBSWYrm",
2063 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002064
2065def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2066 let Latency = 9;
2067 let NumMicroOps = 4;
2068 let ResourceCycles = [1,1,1,1];
2069}
Craig Topper5a69a002018-03-21 06:28:42 +00002070def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2071 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002072
2073def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2074 let Latency = 9;
2075 let NumMicroOps = 5;
2076 let ResourceCycles = [1,1,3];
2077}
2078def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2079
2080def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2081 let Latency = 9;
2082 let NumMicroOps = 5;
2083 let ResourceCycles = [1,2,1,1];
2084}
Craig Topper5a69a002018-03-21 06:28:42 +00002085def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2086 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002087
Gadi Haber323f2e12017-10-24 20:19:47 +00002088def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2089 let Latency = 10;
2090 let NumMicroOps = 2;
2091 let ResourceCycles = [1,1];
2092}
Craig Topper5a69a002018-03-21 06:28:42 +00002093def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2094 "MMX_PMADDWDirm",
2095 "MMX_PMULHRSWrm",
2096 "MMX_PMULHUWirm",
2097 "MMX_PMULHWirm",
2098 "MMX_PMULLWirm",
2099 "MMX_PMULUDQirm",
2100 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002101 "(V?)PCMPGTQrm",
2102 "(V?)PHMINPOSUWrm",
2103 "(V?)PMADDUBSWrm",
2104 "(V?)PMADDWDrm",
2105 "(V?)PMULDQrm",
2106 "(V?)PMULHRSWrm",
2107 "(V?)PMULHUWrm",
2108 "(V?)PMULHWrm",
2109 "(V?)PMULLWrm",
2110 "(V?)PMULUDQrm",
2111 "(V?)PSADBWrm",
2112 "(V?)RCPPSm",
2113 "(V?)RCPSSm",
2114 "(V?)RSQRTPSm",
2115 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002116
2117def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2118 let Latency = 10;
2119 let NumMicroOps = 2;
2120 let ResourceCycles = [1,1];
2121}
Craig Topperf82867c2017-12-13 23:11:30 +00002122def: InstRW<[BWWriteResGroup116],
2123 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2124 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002125
2126def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2127 let Latency = 10;
2128 let NumMicroOps = 3;
2129 let ResourceCycles = [2,1];
2130}
Craig Topper5a69a002018-03-21 06:28:42 +00002131def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2132 "FICOM32m",
2133 "FICOMP16m",
2134 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002135
2136def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2137 let Latency = 10;
2138 let NumMicroOps = 3;
2139 let ResourceCycles = [1,1,1];
2140}
2141def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2142
2143def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2144 let Latency = 10;
2145 let NumMicroOps = 4;
2146 let ResourceCycles = [1,2,1];
2147}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002148def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2149 "(V?)HADDPSrm",
2150 "(V?)HSUBPDrm",
2151 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002152
2153def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2154 let Latency = 10;
2155 let NumMicroOps = 4;
2156 let ResourceCycles = [1,1,1,1];
2157}
2158def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2159
2160def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002161 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002162 let NumMicroOps = 4;
2163 let ResourceCycles = [1,1,1,1];
2164}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002165def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002166
Craig Topper8104f262018-04-02 05:33:28 +00002167def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002168 let Latency = 11;
2169 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002170 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002171}
Craig Topper8104f262018-04-02 05:33:28 +00002172def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2173
2174def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2175 let Latency = 11;
2176 let NumMicroOps = 1;
2177 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2178}
2179def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002180
2181def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2182 let Latency = 11;
2183 let NumMicroOps = 2;
2184 let ResourceCycles = [1,1];
2185}
Craig Topper5a69a002018-03-21 06:28:42 +00002186def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2187 "MUL_F64m",
2188 "VPCMPGTQYrm",
2189 "VPMADDUBSWYrm",
2190 "VPMADDWDYrm",
2191 "VPMULDQYrm",
2192 "VPMULHRSWYrm",
2193 "VPMULHUWYrm",
2194 "VPMULHWYrm",
2195 "VPMULLWYrm",
2196 "VPMULUDQYrm",
2197 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198
2199def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2200 let Latency = 11;
2201 let NumMicroOps = 2;
2202 let ResourceCycles = [1,1];
2203}
Craig Topperf82867c2017-12-13 23:11:30 +00002204def: InstRW<[BWWriteResGroup124],
2205 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002206
Gadi Haber323f2e12017-10-24 20:19:47 +00002207def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2208 let Latency = 11;
2209 let NumMicroOps = 3;
2210 let ResourceCycles = [2,1];
2211}
Craig Topper5a69a002018-03-21 06:28:42 +00002212def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2213 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002214
2215def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2216 let Latency = 11;
2217 let NumMicroOps = 3;
2218 let ResourceCycles = [2,1];
2219}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002220def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2221 "(V?)ROUNDPSm",
2222 "(V?)ROUNDSDm",
2223 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002224
2225def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2226 let Latency = 11;
2227 let NumMicroOps = 3;
2228 let ResourceCycles = [1,1,1];
2229}
2230def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2231
2232def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2233 let Latency = 11;
2234 let NumMicroOps = 4;
2235 let ResourceCycles = [1,2,1];
2236}
Craig Topper5a69a002018-03-21 06:28:42 +00002237def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2238 "VHADDPSYrm",
2239 "VHSUBPDYrm",
2240 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002241
2242def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2243 let Latency = 11;
2244 let NumMicroOps = 6;
2245 let ResourceCycles = [1,1,1,1,2];
2246}
Craig Topper5a69a002018-03-21 06:28:42 +00002247def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2248 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002249
2250def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2251 let Latency = 11;
2252 let NumMicroOps = 7;
2253 let ResourceCycles = [2,2,3];
2254}
Craig Topper5a69a002018-03-21 06:28:42 +00002255def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2256 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002257
2258def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2259 let Latency = 11;
2260 let NumMicroOps = 9;
2261 let ResourceCycles = [1,4,1,3];
2262}
2263def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2264
2265def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2266 let Latency = 11;
2267 let NumMicroOps = 11;
2268 let ResourceCycles = [2,9];
2269}
Craig Topper2d451e72018-03-18 08:38:06 +00002270def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2271def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002272
Gadi Haber323f2e12017-10-24 20:19:47 +00002273def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2274 let Latency = 12;
2275 let NumMicroOps = 3;
2276 let ResourceCycles = [2,1];
2277}
Craig Topper5a69a002018-03-21 06:28:42 +00002278def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2279 "ADD_FI32m",
2280 "SUBR_FI16m",
2281 "SUBR_FI32m",
2282 "SUB_FI16m",
2283 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002284 "VROUNDPDYm",
2285 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002286
2287def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2288 let Latency = 12;
2289 let NumMicroOps = 4;
2290 let ResourceCycles = [1,2,1];
2291}
Craig Topper5a69a002018-03-21 06:28:42 +00002292def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002293
Craig Topper8104f262018-04-02 05:33:28 +00002294def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002295 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002296 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002297 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002298}
Craig Topper8104f262018-04-02 05:33:28 +00002299def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2300
2301def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2302 let Latency = 11;
2303 let NumMicroOps = 1;
2304 let ResourceCycles = [1,4];
2305}
2306def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002307
2308def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2309 let Latency = 13;
2310 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002311 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002312}
2313def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2314
Craig Topper8104f262018-04-02 05:33:28 +00002315def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002316 let Latency = 14;
2317 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002318 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002319}
Craig Topper8104f262018-04-02 05:33:28 +00002320def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2321
2322def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2323 let Latency = 14;
2324 let NumMicroOps = 1;
2325 let ResourceCycles = [1,4];
2326}
2327def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002328
Gadi Haber323f2e12017-10-24 20:19:47 +00002329def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2330 let Latency = 14;
2331 let NumMicroOps = 3;
2332 let ResourceCycles = [1,1,1];
2333}
Craig Topper5a69a002018-03-21 06:28:42 +00002334def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2335 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002336
2337def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2338 let Latency = 14;
2339 let NumMicroOps = 4;
2340 let ResourceCycles = [2,1,1];
2341}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002342def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002343
2344def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2345 let Latency = 14;
2346 let NumMicroOps = 4;
2347 let ResourceCycles = [1,1,1,1];
2348}
Craig Topper5a69a002018-03-21 06:28:42 +00002349def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002350
2351def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2352 let Latency = 14;
2353 let NumMicroOps = 8;
2354 let ResourceCycles = [2,2,1,3];
2355}
2356def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2357
2358def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2359 let Latency = 14;
2360 let NumMicroOps = 10;
2361 let ResourceCycles = [2,3,1,4];
2362}
2363def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2364
2365def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2366 let Latency = 14;
2367 let NumMicroOps = 12;
2368 let ResourceCycles = [2,1,4,5];
2369}
2370def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2371
2372def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2373 let Latency = 15;
2374 let NumMicroOps = 1;
2375 let ResourceCycles = [1];
2376}
Craig Topper5a69a002018-03-21 06:28:42 +00002377def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2378 "DIVR_FST0r",
2379 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002380
Gadi Haber323f2e12017-10-24 20:19:47 +00002381def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2382 let Latency = 15;
2383 let NumMicroOps = 10;
2384 let ResourceCycles = [1,1,1,4,1,2];
2385}
Craig Topper13a16502018-03-19 00:56:09 +00002386def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002387
Craig Topper8104f262018-04-02 05:33:28 +00002388def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002389 let Latency = 16;
2390 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002391 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002392}
Craig Topper5a69a002018-03-21 06:28:42 +00002393def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2394 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002395
2396def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2397 let Latency = 16;
2398 let NumMicroOps = 3;
2399 let ResourceCycles = [2,1];
2400}
2401def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2402
Gadi Haber323f2e12017-10-24 20:19:47 +00002403def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2404 let Latency = 16;
2405 let NumMicroOps = 14;
2406 let ResourceCycles = [1,1,1,4,2,5];
2407}
2408def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2409
2410def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2411 let Latency = 16;
2412 let NumMicroOps = 16;
2413 let ResourceCycles = [16];
2414}
Craig Topper5a69a002018-03-21 06:28:42 +00002415def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002416
Craig Topper8104f262018-04-02 05:33:28 +00002417def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002418 let Latency = 17;
2419 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002420 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002421}
2422def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2423
2424def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2425 let Latency = 17;
2426 let NumMicroOps = 4;
2427 let ResourceCycles = [2,1,1];
2428}
Craig Topper5a69a002018-03-21 06:28:42 +00002429def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2430 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002431
Craig Topper8104f262018-04-02 05:33:28 +00002432def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002433 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002434 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002435 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002436}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002437def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2438 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002439
Gadi Haber323f2e12017-10-24 20:19:47 +00002440def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2441 let Latency = 18;
2442 let NumMicroOps = 8;
2443 let ResourceCycles = [1,1,1,5];
2444}
Craig Topper5a69a002018-03-21 06:28:42 +00002445def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002446def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002447
2448def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2449 let Latency = 18;
2450 let NumMicroOps = 11;
2451 let ResourceCycles = [2,1,1,3,1,3];
2452}
Craig Topper13a16502018-03-19 00:56:09 +00002453def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002454
Craig Topper8104f262018-04-02 05:33:28 +00002455def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002456 let Latency = 19;
2457 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002458 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002459}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002460def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002461 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002462
Gadi Haber323f2e12017-10-24 20:19:47 +00002463def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2464 let Latency = 19;
2465 let NumMicroOps = 5;
2466 let ResourceCycles = [2,1,1,1];
2467}
Craig Topper5a69a002018-03-21 06:28:42 +00002468def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002469
Gadi Haber323f2e12017-10-24 20:19:47 +00002470def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2471 let Latency = 20;
2472 let NumMicroOps = 1;
2473 let ResourceCycles = [1];
2474}
Craig Topper5a69a002018-03-21 06:28:42 +00002475def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2476 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002477 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002478
2479def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2480 let Latency = 20;
2481 let NumMicroOps = 5;
2482 let ResourceCycles = [2,1,1,1];
2483}
2484def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2485
2486def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2487 let Latency = 20;
2488 let NumMicroOps = 8;
2489 let ResourceCycles = [1,1,1,1,1,1,2];
2490}
Craig Topper5a69a002018-03-21 06:28:42 +00002491def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2492 "INSL",
2493 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002494
Craig Topper8104f262018-04-02 05:33:28 +00002495def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002496 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002497 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002498 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002499}
Craig Topper8104f262018-04-02 05:33:28 +00002500def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2501
2502def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2503 let Latency = 16;
2504 let NumMicroOps = 1;
2505 let ResourceCycles = [1,8];
2506}
2507def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002508
2509def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2510 let Latency = 21;
2511 let NumMicroOps = 2;
2512 let ResourceCycles = [1,1];
2513}
Craig Topper5a69a002018-03-21 06:28:42 +00002514def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2515 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002516
Craig Topper8104f262018-04-02 05:33:28 +00002517def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002518 let Latency = 21;
2519 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002520 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002521}
2522def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2523
2524def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2525 let Latency = 21;
2526 let NumMicroOps = 19;
2527 let ResourceCycles = [2,1,4,1,1,4,6];
2528}
2529def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2530
2531def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2532 let Latency = 22;
2533 let NumMicroOps = 18;
2534 let ResourceCycles = [1,1,16];
2535}
2536def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2537
Craig Topper8104f262018-04-02 05:33:28 +00002538def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002539 let Latency = 23;
2540 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002541 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002542}
2543def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2544
Craig Topper8104f262018-04-02 05:33:28 +00002545def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002546 let Latency = 23;
2547 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002548 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002549}
2550def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2551
Gadi Haber323f2e12017-10-24 20:19:47 +00002552def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2553 let Latency = 23;
2554 let NumMicroOps = 19;
2555 let ResourceCycles = [3,1,15];
2556}
Craig Topper391c6f92017-12-10 01:24:08 +00002557def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002558
2559def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2560 let Latency = 24;
2561 let NumMicroOps = 3;
2562 let ResourceCycles = [1,1,1];
2563}
Craig Topper5a69a002018-03-21 06:28:42 +00002564def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2565 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002566
Craig Topper8104f262018-04-02 05:33:28 +00002567def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002568 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002569 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002570 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002571}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002572def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2573 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002574
2575def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2576 let Latency = 26;
2577 let NumMicroOps = 2;
2578 let ResourceCycles = [1,1];
2579}
Craig Topper5a69a002018-03-21 06:28:42 +00002580def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002581 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002582
Craig Topper8104f262018-04-02 05:33:28 +00002583def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002584 let Latency = 27;
2585 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002586 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002587}
2588def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2589
2590def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2591 let Latency = 29;
2592 let NumMicroOps = 3;
2593 let ResourceCycles = [1,1,1];
2594}
Craig Topper5a69a002018-03-21 06:28:42 +00002595def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2596 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002597
Craig Topper8104f262018-04-02 05:33:28 +00002598def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002599 let Latency = 29;
2600 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002601 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002602}
2603def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2604
2605def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2606 let Latency = 22;
2607 let NumMicroOps = 7;
2608 let ResourceCycles = [1,3,2,1];
2609}
Craig Topper17a31182017-12-16 18:35:29 +00002610def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002611
2612def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2613 let Latency = 23;
2614 let NumMicroOps = 9;
2615 let ResourceCycles = [1,3,4,1];
2616}
Craig Topper17a31182017-12-16 18:35:29 +00002617def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002618
2619def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2620 let Latency = 24;
2621 let NumMicroOps = 9;
2622 let ResourceCycles = [1,5,2,1];
2623}
Craig Topper17a31182017-12-16 18:35:29 +00002624def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002625
2626def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2627 let Latency = 25;
2628 let NumMicroOps = 7;
2629 let ResourceCycles = [1,3,2,1];
2630}
Craig Topper17a31182017-12-16 18:35:29 +00002631def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2632 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002633
2634def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2635 let Latency = 26;
2636 let NumMicroOps = 9;
2637 let ResourceCycles = [1,5,2,1];
2638}
Craig Topper17a31182017-12-16 18:35:29 +00002639def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002640
2641def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2642 let Latency = 26;
2643 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002644 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002645}
Craig Topper17a31182017-12-16 18:35:29 +00002646def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002647
2648def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2649 let Latency = 27;
2650 let NumMicroOps = 9;
2651 let ResourceCycles = [1,5,2,1];
2652}
Craig Topper17a31182017-12-16 18:35:29 +00002653def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002654
Gadi Haber323f2e12017-10-24 20:19:47 +00002655def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2656 let Latency = 29;
2657 let NumMicroOps = 27;
2658 let ResourceCycles = [1,5,1,1,19];
2659}
2660def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2661
2662def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2663 let Latency = 30;
2664 let NumMicroOps = 28;
2665 let ResourceCycles = [1,6,1,1,19];
2666}
Craig Topper2d451e72018-03-18 08:38:06 +00002667def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002668
2669def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2670 let Latency = 31;
2671 let NumMicroOps = 31;
2672 let ResourceCycles = [8,1,21,1];
2673}
2674def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2675
Craig Topper8104f262018-04-02 05:33:28 +00002676def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2677 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002678 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002679 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002680}
2681def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2682
2683def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2684 let Latency = 34;
2685 let NumMicroOps = 8;
2686 let ResourceCycles = [2,2,2,1,1];
2687}
Craig Topper13a16502018-03-19 00:56:09 +00002688def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002689
2690def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2691 let Latency = 34;
2692 let NumMicroOps = 23;
2693 let ResourceCycles = [1,5,3,4,10];
2694}
Craig Topper5a69a002018-03-21 06:28:42 +00002695def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2696 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002697
2698def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2699 let Latency = 35;
2700 let NumMicroOps = 8;
2701 let ResourceCycles = [2,2,2,1,1];
2702}
Craig Topper13a16502018-03-19 00:56:09 +00002703def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002704
2705def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2706 let Latency = 35;
2707 let NumMicroOps = 23;
2708 let ResourceCycles = [1,5,2,1,4,10];
2709}
Craig Topper5a69a002018-03-21 06:28:42 +00002710def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2711 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002712
Craig Topper8104f262018-04-02 05:33:28 +00002713def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2714 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002715 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002716 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002717}
2718def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2719
2720def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2721 let Latency = 42;
2722 let NumMicroOps = 22;
2723 let ResourceCycles = [2,20];
2724}
Craig Topper2d451e72018-03-18 08:38:06 +00002725def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002726
2727def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2728 let Latency = 60;
2729 let NumMicroOps = 64;
2730 let ResourceCycles = [2,2,8,1,10,2,39];
2731}
2732def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002733
2734def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2735 let Latency = 63;
2736 let NumMicroOps = 88;
2737 let ResourceCycles = [4,4,31,1,2,1,45];
2738}
Craig Topper2d451e72018-03-18 08:38:06 +00002739def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002740
2741def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2742 let Latency = 63;
2743 let NumMicroOps = 90;
2744 let ResourceCycles = [4,2,33,1,2,1,47];
2745}
Craig Topper2d451e72018-03-18 08:38:06 +00002746def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002747
2748def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2749 let Latency = 75;
2750 let NumMicroOps = 15;
2751 let ResourceCycles = [6,3,6];
2752}
2753def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2754
2755def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2756 let Latency = 80;
2757 let NumMicroOps = 32;
2758 let ResourceCycles = [7,7,3,3,1,11];
2759}
2760def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2761
2762def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2763 let Latency = 115;
2764 let NumMicroOps = 100;
2765 let ResourceCycles = [9,9,11,8,1,11,21,30];
2766}
2767def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002768
2769} // SchedModel
2770