blob: 9c178bb8ee026d4dad887c29d72c99b8e18b82bb [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000167defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000169defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000170
171// FMA Scheduling helper class.
172// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
173
174// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000175def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
176def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
177def : WriteRes<WriteVecMove, [BWPort015]>;
178
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
180defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
181defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
186defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
187defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000189
190// Vector bitwise operations.
191// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector and/or/xor.
Gadi Haber323f2e12017-10-24 20:19:47 +0000193
194// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
196defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
197defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000198
199// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200
Gadi Haber323f2e12017-10-24 20:19:47 +0000201// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000202def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000203 let Latency = 11;
204 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000205 let ResourceCycles = [3];
206}
207def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208 let Latency = 16;
209 let NumMicroOps = 4;
210 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212
213// Packed Compare Explicit Length Strings, Return Mask
214def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
215 let Latency = 19;
216 let NumMicroOps = 9;
217 let ResourceCycles = [4,3,1,1];
218}
219def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
220 let Latency = 24;
221 let NumMicroOps = 10;
222 let ResourceCycles = [4,3,1,1,1];
223}
224
225// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000226def : WriteRes<WritePCmpIStrI, [BWPort0]> {
227 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000229 let ResourceCycles = [3];
230}
231def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232 let Latency = 16;
233 let NumMicroOps = 4;
234 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236
237// Packed Compare Explicit Length Strings, Return Index
238def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
239 let Latency = 18;
240 let NumMicroOps = 8;
241 let ResourceCycles = [4,3,1];
242}
243def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
244 let Latency = 23;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000247}
248
Simon Pilgrima2f26782018-03-27 20:38:54 +0000249// MOVMSK Instructions.
250def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
252def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
253
Gadi Haber323f2e12017-10-24 20:19:47 +0000254// AES instructions.
255def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
256 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000257 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000258 let ResourceCycles = [1];
259}
260def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let Latency = 12;
262 let NumMicroOps = 2;
263 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000264}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265
Gadi Haber323f2e12017-10-24 20:19:47 +0000266def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
267 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000268 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000269 let ResourceCycles = [2];
270}
271def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272 let Latency = 19;
273 let NumMicroOps = 3;
274 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000275}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000276
277def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
278 let Latency = 29;
279 let NumMicroOps = 11;
280 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000281}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000282def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
283 let Latency = 33;
284 let NumMicroOps = 11;
285 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000286}
287
288// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000289defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000290
291// Catch-all for expensive system instructions.
292def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
293
294// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000295defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000296defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000297defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000298defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000299defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000300
301// Old microcoded instructions that nobody use.
302def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
303
304// Fence instructions.
305def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
306
307// Nop, not very useful expect it provides a model for nops!
308def : WriteRes<WriteNop, []>;
309
310////////////////////////////////////////////////////////////////////////////////
311// Horizontal add/sub instructions.
312////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000313
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000314defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
315defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
317// Remaining instrs.
318
319def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
320 let Latency = 1;
321 let NumMicroOps = 1;
322 let ResourceCycles = [1];
323}
Craig Topper5a69a002018-03-21 06:28:42 +0000324def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
325 "MMX_MOVD64grr",
Craig Topper5a69a002018-03-21 06:28:42 +0000326 "MMX_PSLLDri",
327 "MMX_PSLLDrr",
328 "MMX_PSLLQri",
329 "MMX_PSLLQrr",
330 "MMX_PSLLWri",
331 "MMX_PSLLWrr",
332 "MMX_PSRADri",
333 "MMX_PSRADrr",
334 "MMX_PSRAWri",
335 "MMX_PSRAWrr",
336 "MMX_PSRLDri",
337 "MMX_PSRLDrr",
338 "MMX_PSRLQri",
339 "MMX_PSRLQrr",
340 "MMX_PSRLWri",
341 "MMX_PSRLWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000342 "(V?)MOVPDI2DIrr",
343 "(V?)MOVPQIto64rr",
344 "(V?)PSLLD(Y?)ri",
345 "(V?)PSLLQ(Y?)ri",
346 "VPSLLVQ(Y?)rr",
347 "(V?)PSLLW(Y?)ri",
348 "(V?)PSRAD(Y?)ri",
349 "(V?)PSRAW(Y?)ri",
350 "(V?)PSRLD(Y?)ri",
351 "(V?)PSRLQ(Y?)ri",
352 "VPSRLVQ(Y?)rr",
353 "(V?)PSRLW(Y?)ri",
354 "VTESTPD(Y?)rr",
355 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000356
357def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
358 let Latency = 1;
359 let NumMicroOps = 1;
360 let ResourceCycles = [1];
361}
Craig Topper5a69a002018-03-21 06:28:42 +0000362def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
363 "COM_FST0r",
364 "UCOM_FPr",
365 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000366
367def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000372def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000373 "MMX_MOVD64to64rr",
374 "MMX_MOVQ2DQrr",
375 "MMX_PALIGNRrri",
Craig Topper5a69a002018-03-21 06:28:42 +0000376 "MMX_PSHUFWri",
377 "MMX_PUNPCKHBWirr",
378 "MMX_PUNPCKHDQirr",
379 "MMX_PUNPCKHWDirr",
380 "MMX_PUNPCKLBWirr",
381 "MMX_PUNPCKLDQirr",
382 "MMX_PUNPCKLWDirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000383 "(V?)ANDNPD(Y?)rr",
384 "(V?)ANDNPS(Y?)rr",
385 "(V?)ANDPD(Y?)rr",
386 "(V?)ANDPS(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000387 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000388 "(V?)INSERTPSrr",
389 "(V?)MOV64toPQIrr",
390 "(V?)MOVAPD(Y?)rr",
391 "(V?)MOVAPS(Y?)rr",
392 "(V?)MOVDDUP(Y?)rr",
393 "(V?)MOVDI2PDIrr",
394 "(V?)MOVHLPSrr",
395 "(V?)MOVLHPSrr",
396 "(V?)MOVSDrr",
397 "(V?)MOVSHDUP(Y?)rr",
398 "(V?)MOVSLDUP(Y?)rr",
399 "(V?)MOVSSrr",
400 "(V?)MOVUPD(Y?)rr",
401 "(V?)MOVUPS(Y?)rr",
402 "(V?)ORPD(Y?)rr",
403 "(V?)ORPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000404 "(V?)PALIGNR(Y?)rri",
405 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000406 "VPBROADCASTDrr",
407 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000408 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000409 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000410 "(V?)PMOVSXBDrr",
411 "(V?)PMOVSXBQrr",
412 "(V?)PMOVSXBWrr",
413 "(V?)PMOVSXDQrr",
414 "(V?)PMOVSXWDrr",
415 "(V?)PMOVSXWQrr",
416 "(V?)PMOVZXBDrr",
417 "(V?)PMOVZXBQrr",
418 "(V?)PMOVZXBWrr",
419 "(V?)PMOVZXDQrr",
420 "(V?)PMOVZXWDrr",
421 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000422 "(V?)PSHUFD(Y?)ri",
423 "(V?)PSHUFHW(Y?)ri",
424 "(V?)PSHUFLW(Y?)ri",
425 "(V?)PSLLDQ(Y?)ri",
426 "(V?)PSRLDQ(Y?)ri",
427 "(V?)PUNPCKHBW(Y?)rr",
428 "(V?)PUNPCKHDQ(Y?)rr",
429 "(V?)PUNPCKHQDQ(Y?)rr",
430 "(V?)PUNPCKHWD(Y?)rr",
431 "(V?)PUNPCKLBW(Y?)rr",
432 "(V?)PUNPCKLDQ(Y?)rr",
433 "(V?)PUNPCKLQDQ(Y?)rr",
434 "(V?)PUNPCKLWD(Y?)rr",
435 "(V?)SHUFPD(Y?)rri",
436 "(V?)SHUFPS(Y?)rri",
437 "(V?)UNPCKHPD(Y?)rr",
438 "(V?)UNPCKHPS(Y?)rr",
439 "(V?)UNPCKLPD(Y?)rr",
440 "(V?)UNPCKLPS(Y?)rr",
441 "(V?)XORPD(Y?)rr",
442 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000443
444def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
445 let Latency = 1;
446 let NumMicroOps = 1;
447 let ResourceCycles = [1];
448}
449def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
450
451def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
452 let Latency = 1;
453 let NumMicroOps = 1;
454 let ResourceCycles = [1];
455}
Craig Topper5a69a002018-03-21 06:28:42 +0000456def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
457 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000458
459def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
460 let Latency = 1;
461 let NumMicroOps = 1;
462 let ResourceCycles = [1];
463}
Craig Topperfbe31322018-04-05 21:56:19 +0000464def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000465def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
466 "ADC(16|32|64)i",
467 "ADC(8|16|32|64)rr",
468 "ADCX(32|64)rr",
469 "ADOX(32|64)rr",
470 "BT(16|32|64)ri8",
471 "BT(16|32|64)rr",
472 "BTC(16|32|64)ri8",
473 "BTC(16|32|64)rr",
474 "BTR(16|32|64)ri8",
475 "BTR(16|32|64)rr",
476 "BTS(16|32|64)ri8",
477 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000478 "SBB(16|32|64)ri",
479 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000480 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000481
482def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
483 let Latency = 1;
484 let NumMicroOps = 1;
485 let ResourceCycles = [1];
486}
Craig Topper5a69a002018-03-21 06:28:42 +0000487def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
488 "BLSI(32|64)rr",
489 "BLSMSK(32|64)rr",
490 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000491 "LEA(16|32|64)(_32)?r",
492 "MMX_PABSBrr",
493 "MMX_PABSDrr",
494 "MMX_PABSWrr",
495 "MMX_PADDBirr",
496 "MMX_PADDDirr",
497 "MMX_PADDQirr",
498 "MMX_PADDSBirr",
499 "MMX_PADDSWirr",
500 "MMX_PADDUSBirr",
501 "MMX_PADDUSWirr",
502 "MMX_PADDWirr",
503 "MMX_PAVGBirr",
504 "MMX_PAVGWirr",
505 "MMX_PCMPEQBirr",
506 "MMX_PCMPEQDirr",
507 "MMX_PCMPEQWirr",
508 "MMX_PCMPGTBirr",
509 "MMX_PCMPGTDirr",
510 "MMX_PCMPGTWirr",
511 "MMX_PMAXSWirr",
512 "MMX_PMAXUBirr",
513 "MMX_PMINSWirr",
514 "MMX_PMINUBirr",
515 "MMX_PSIGNBrr",
516 "MMX_PSIGNDrr",
517 "MMX_PSIGNWrr",
518 "MMX_PSUBBirr",
519 "MMX_PSUBDirr",
520 "MMX_PSUBQirr",
521 "MMX_PSUBSBirr",
522 "MMX_PSUBSWirr",
523 "MMX_PSUBUSBirr",
524 "MMX_PSUBUSWirr",
525 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000526 "(V?)PABSB(Y?)rr",
527 "(V?)PABSD(Y?)rr",
528 "(V?)PABSW(Y?)rr",
529 "(V?)PADDB(Y?)rr",
530 "(V?)PADDD(Y?)rr",
531 "(V?)PADDQ(Y?)rr",
532 "(V?)PADDSB(Y?)rr",
533 "(V?)PADDSW(Y?)rr",
534 "(V?)PADDUSB(Y?)rr",
535 "(V?)PADDUSW(Y?)rr",
536 "(V?)PADDW(Y?)rr",
537 "(V?)PAVGB(Y?)rr",
538 "(V?)PAVGW(Y?)rr",
539 "(V?)PCMPEQB(Y?)rr",
540 "(V?)PCMPEQD(Y?)rr",
541 "(V?)PCMPEQQ(Y?)rr",
542 "(V?)PCMPEQW(Y?)rr",
543 "(V?)PCMPGTB(Y?)rr",
544 "(V?)PCMPGTD(Y?)rr",
545 "(V?)PCMPGTW(Y?)rr",
546 "(V?)PMAXSB(Y?)rr",
547 "(V?)PMAXSD(Y?)rr",
548 "(V?)PMAXSW(Y?)rr",
549 "(V?)PMAXUB(Y?)rr",
550 "(V?)PMAXUD(Y?)rr",
551 "(V?)PMAXUW(Y?)rr",
552 "(V?)PMINSB(Y?)rr",
553 "(V?)PMINSD(Y?)rr",
554 "(V?)PMINSW(Y?)rr",
555 "(V?)PMINUB(Y?)rr",
556 "(V?)PMINUD(Y?)rr",
557 "(V?)PMINUW(Y?)rr",
558 "(V?)PSIGNB(Y?)rr",
559 "(V?)PSIGND(Y?)rr",
560 "(V?)PSIGNW(Y?)rr",
561 "(V?)PSUBB(Y?)rr",
562 "(V?)PSUBD(Y?)rr",
563 "(V?)PSUBQ(Y?)rr",
564 "(V?)PSUBSB(Y?)rr",
565 "(V?)PSUBSW(Y?)rr",
566 "(V?)PSUBUSB(Y?)rr",
567 "(V?)PSUBUSW(Y?)rr",
568 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000569
570def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
571 let Latency = 1;
572 let NumMicroOps = 1;
573 let ResourceCycles = [1];
574}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000575def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000576 "MMX_PANDNirr",
577 "MMX_PANDirr",
578 "MMX_PORirr",
579 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000580 "(V?)BLENDPD(Y?)rri",
581 "(V?)BLENDPS(Y?)rri",
582 "(V?)MOVDQA(Y?)rr",
583 "(V?)MOVDQU(Y?)rr",
584 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000585 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000586 "(V?)PANDN(Y?)rr",
587 "(V?)PAND(Y?)rr",
588 "VPBLENDD(Y?)rri",
589 "(V?)POR(Y?)rr",
590 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000591
592def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
593 let Latency = 1;
594 let NumMicroOps = 1;
595 let ResourceCycles = [1];
596}
Craig Topperdfccafe2018-04-18 06:41:25 +0000597def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000598 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000599 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000600 "SGDT64m",
601 "SIDT64m",
602 "SLDT64m",
603 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000604 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000605 "SYSCALL",
Craig Topperdfccafe2018-04-18 06:41:25 +0000606 "XCHG(16|32|64)rr")>; // FIXME: This isn't 1 uop, probably should match XCHG8rr.
Gadi Haber323f2e12017-10-24 20:19:47 +0000607
608def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
609 let Latency = 1;
610 let NumMicroOps = 2;
611 let ResourceCycles = [1,1];
612}
Craig Topper5a69a002018-03-21 06:28:42 +0000613def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
614 "MMX_MOVD64from64rm",
615 "MMX_MOVD64mr",
616 "MMX_MOVNTQmr",
617 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000618 "MOVNTI_64mr",
619 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000620 "ST_FP32m",
621 "ST_FP64m",
622 "ST_FP80m",
623 "VEXTRACTF128mr",
624 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000625 "(V?)MOVAPD(Y?)mr",
626 "(V?)MOVAPS(Y?)mr",
627 "(V?)MOVDQA(Y?)mr",
628 "(V?)MOVDQU(Y?)mr",
629 "(V?)MOVHPDmr",
630 "(V?)MOVHPSmr",
631 "(V?)MOVLPDmr",
632 "(V?)MOVLPSmr",
633 "(V?)MOVNTDQ(V?)mr",
634 "(V?)MOVNTPD(V?)mr",
635 "(V?)MOVNTPS(V?)mr",
636 "(V?)MOVPDI2DImr",
637 "(V?)MOVPQI2QImr",
638 "(V?)MOVPQIto64mr",
639 "(V?)MOVSDmr",
640 "(V?)MOVSSmr",
641 "(V?)MOVUPD(Y?)mr",
642 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000643
644def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
645 let Latency = 2;
646 let NumMicroOps = 2;
647 let ResourceCycles = [2];
648}
Craig Topper5a69a002018-03-21 06:28:42 +0000649def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
650 "BLENDVPSrr0",
651 "MMX_PINSRWrr",
652 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000653 "VBLENDVPD(Y?)rr",
654 "VBLENDVPS(Y?)rr",
655 "VPBLENDVB(Y?)rr",
656 "(V?)PINSRBrr",
657 "(V?)PINSRDrr",
658 "(V?)PINSRQrr",
659 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000660
661def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [2];
665}
666def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
667
668def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [2];
672}
Craig Topper5a69a002018-03-21 06:28:42 +0000673def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
674 "ROL(8|16|32|64)ri",
675 "ROR(8|16|32|64)r1",
676 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000677
678def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
679 let Latency = 2;
680 let NumMicroOps = 2;
681 let ResourceCycles = [2];
682}
Craig Topper5a69a002018-03-21 06:28:42 +0000683def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
684 "MFENCE",
685 "WAIT",
686 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000687
688def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
689 let Latency = 2;
690 let NumMicroOps = 2;
691 let ResourceCycles = [1,1];
692}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000693def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
694 "VCVTPH2PS(Y?)rr",
695 "(V?)CVTPS2PDrr",
696 "(V?)CVTSS2SDrr",
697 "(V?)EXTRACTPSrr",
698 "(V?)PEXTRBrr",
699 "(V?)PEXTRDrr",
700 "(V?)PEXTRQrr",
701 "(V?)PEXTRWrr",
702 "(V?)PSLLDrr",
703 "(V?)PSLLQrr",
704 "(V?)PSLLWrr",
705 "(V?)PSRADrr",
706 "(V?)PSRAWrr",
707 "(V?)PSRLDrr",
708 "(V?)PSRLQrr",
709 "(V?)PSRLWrr",
710 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000711
712def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
713 let Latency = 2;
714 let NumMicroOps = 2;
715 let ResourceCycles = [1,1];
716}
717def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
718
719def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
720 let Latency = 2;
721 let NumMicroOps = 2;
722 let ResourceCycles = [1,1];
723}
724def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
725
726def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
727 let Latency = 2;
728 let NumMicroOps = 2;
729 let ResourceCycles = [1,1];
730}
731def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
732
733def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
734 let Latency = 2;
735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
Craig Topper498875f2018-04-04 17:54:19 +0000738def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
739
740def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
741 let Latency = 1;
742 let NumMicroOps = 1;
743 let ResourceCycles = [1];
744}
745def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000746
747def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
748 let Latency = 2;
749 let NumMicroOps = 2;
750 let ResourceCycles = [1,1];
751}
Craig Topper2d451e72018-03-18 08:38:06 +0000752def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000753def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000754def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
755 "ADC8ri",
756 "CMOV(A|BE)(16|32|64)rr",
757 "SBB8i8",
758 "SBB8ri",
759 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000760
761def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
762 let Latency = 2;
763 let NumMicroOps = 3;
764 let ResourceCycles = [1,1,1];
765}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000766def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
767 "(V?)PEXTRBmr",
768 "(V?)PEXTRDmr",
769 "(V?)PEXTRQmr",
770 "(V?)PEXTRWmr",
771 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000772
773def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
774 let Latency = 2;
775 let NumMicroOps = 3;
776 let ResourceCycles = [1,1,1];
777}
778def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
779
Gadi Haber323f2e12017-10-24 20:19:47 +0000780def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
781 let Latency = 2;
782 let NumMicroOps = 3;
783 let ResourceCycles = [1,1,1];
784}
785def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
786
787def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
788 let Latency = 2;
789 let NumMicroOps = 3;
790 let ResourceCycles = [1,1,1];
791}
Craig Topper2d451e72018-03-18 08:38:06 +0000792def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000793def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
794 "PUSH64i8",
795 "STOSB",
796 "STOSL",
797 "STOSQ",
798 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000799
Gadi Haber323f2e12017-10-24 20:19:47 +0000800def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
801 let Latency = 3;
802 let NumMicroOps = 1;
803 let ResourceCycles = [1];
804}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000805def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000806 "ADD_FST0r",
807 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000808 "MMX_CVTPI2PSirr",
809 "PDEP(32|64)rr",
810 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000811 "SHLD(16|32|64)rri8",
812 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000813 "SUBR_FPrST0",
814 "SUBR_FST0r",
815 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000816 "SUB_FPrST0",
817 "SUB_FST0r",
818 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000819 "(V?)CVTDQ2PS(Y?)rr",
820 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000821 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000822
823def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000824 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000825 let NumMicroOps = 2;
826 let ResourceCycles = [1,1];
827}
Clement Courbet327fac42018-03-07 08:14:02 +0000828def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000829
830def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
831 let Latency = 3;
832 let NumMicroOps = 1;
833 let ResourceCycles = [1];
834}
Craig Topper5a69a002018-03-21 06:28:42 +0000835def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
836 "VBROADCASTSSYrr",
837 "VEXTRACTF128rr",
838 "VEXTRACTI128rr",
839 "VINSERTF128rr",
840 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000841 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000842 "VPBROADCASTDYrr",
843 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000844 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000845 "VPERM2F128rr",
846 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000847 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000848 "VPERMQYri",
849 "VPMOVSXBDYrr",
850 "VPMOVSXBQYrr",
851 "VPMOVSXBWYrr",
852 "VPMOVSXDQYrr",
853 "VPMOVSXWDYrr",
854 "VPMOVSXWQYrr",
855 "VPMOVZXBDYrr",
856 "VPMOVZXBQYrr",
857 "VPMOVZXBWYrr",
858 "VPMOVZXDQYrr",
859 "VPMOVZXWDYrr",
860 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000861
862def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
863 let Latency = 3;
864 let NumMicroOps = 1;
865 let ResourceCycles = [1];
866}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000867def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
868 "(V?)MULPS(Y?)rr",
869 "(V?)MULSDrr",
870 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000871
872def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
873 let Latency = 3;
874 let NumMicroOps = 3;
875 let ResourceCycles = [3];
876}
Craig Topper5a69a002018-03-21 06:28:42 +0000877def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
878 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000879
880def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
881 let Latency = 3;
882 let NumMicroOps = 3;
883 let ResourceCycles = [2,1];
884}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000885def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
886 "VPSRAVD(Y?)rr",
887 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000888
889def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
890 let Latency = 3;
891 let NumMicroOps = 3;
892 let ResourceCycles = [2,1];
893}
Craig Topper5a69a002018-03-21 06:28:42 +0000894def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
895 "MMX_PHADDSWrr",
896 "MMX_PHADDWrr",
897 "MMX_PHSUBDrr",
898 "MMX_PHSUBSWrr",
899 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000900 "(V?)PHADDD(Y?)rr",
901 "(V?)PHADDSW(Y?)rr",
902 "(V?)PHADDW(Y?)rr",
903 "(V?)PHSUBD(Y?)rr",
904 "(V?)PHSUBSW(Y?)rr",
905 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000906
907def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
908 let Latency = 3;
909 let NumMicroOps = 3;
910 let ResourceCycles = [2,1];
911}
Craig Topper5a69a002018-03-21 06:28:42 +0000912def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
913 "MMX_PACKSSWBirr",
914 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000915
916def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
917 let Latency = 3;
918 let NumMicroOps = 3;
919 let ResourceCycles = [1,2];
920}
921def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
922
923def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
924 let Latency = 3;
925 let NumMicroOps = 3;
926 let ResourceCycles = [1,2];
927}
Craig Topper5a69a002018-03-21 06:28:42 +0000928def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
929 "RCL(8|16|32|64)ri",
930 "RCR(8|16|32|64)r1",
931 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000932
933def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
934 let Latency = 3;
935 let NumMicroOps = 3;
936 let ResourceCycles = [2,1];
937}
Craig Topper5a69a002018-03-21 06:28:42 +0000938def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
939 "ROR(8|16|32|64)rCL",
940 "SAR(8|16|32|64)rCL",
941 "SHL(8|16|32|64)rCL",
942 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000943
944def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
945 let Latency = 3;
946 let NumMicroOps = 4;
947 let ResourceCycles = [1,1,1,1];
948}
949def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
950
951def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
952 let Latency = 3;
953 let NumMicroOps = 4;
954 let ResourceCycles = [1,1,1,1];
955}
Craig Topper5a69a002018-03-21 06:28:42 +0000956def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
957 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000958
959def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
960 let Latency = 4;
961 let NumMicroOps = 2;
962 let ResourceCycles = [1,1];
963}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000964def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
965 "(V?)CVTSD2SIrr",
966 "(V?)CVTSS2SI64rr",
967 "(V?)CVTSS2SIrr",
968 "(V?)CVTTSD2SI64rr",
969 "(V?)CVTTSD2SIrr",
970 "(V?)CVTTSS2SI64rr",
971 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000972
973def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
974 let Latency = 4;
975 let NumMicroOps = 2;
976 let ResourceCycles = [1,1];
977}
Craig Topper5a69a002018-03-21 06:28:42 +0000978def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
979 "VPSLLDYrr",
980 "VPSLLQYrr",
981 "VPSLLWYrr",
982 "VPSRADYrr",
983 "VPSRAWYrr",
984 "VPSRLDYrr",
985 "VPSRLQYrr",
986 "VPSRLWYrr",
987 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000988
989def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
990 let Latency = 4;
991 let NumMicroOps = 2;
992 let ResourceCycles = [1,1];
993}
994def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
995
996def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
997 let Latency = 4;
998 let NumMicroOps = 2;
999 let ResourceCycles = [1,1];
1000}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001001def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001002def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001003 "MMX_CVTPI2PDirr",
1004 "MMX_CVTPS2PIirr",
1005 "MMX_CVTTPD2PIirr",
1006 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001007 "(V?)CVTDQ2PDrr",
1008 "(V?)CVTPD2DQrr",
1009 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001010 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001011 "(V?)CVTSD2SSrr",
1012 "(V?)CVTSI642SDrr",
1013 "(V?)CVTSI2SDrr",
1014 "(V?)CVTSI2SSrr",
1015 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001016
1017def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1018 let Latency = 4;
1019 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001020 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +00001021}
Craig Topper5a69a002018-03-21 06:28:42 +00001022def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001023
1024def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1025 let Latency = 4;
1026 let NumMicroOps = 3;
1027 let ResourceCycles = [1,1,1];
1028}
1029def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1030
1031def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1032 let Latency = 4;
1033 let NumMicroOps = 3;
1034 let ResourceCycles = [1,1,1];
1035}
Craig Topper5a69a002018-03-21 06:28:42 +00001036def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1037 "ISTT_FP32m",
1038 "ISTT_FP64m",
1039 "IST_F16m",
1040 "IST_F32m",
1041 "IST_FP16m",
1042 "IST_FP32m",
1043 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001044 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001045
1046def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1047 let Latency = 4;
1048 let NumMicroOps = 4;
1049 let ResourceCycles = [4];
1050}
1051def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1052
1053def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1054 let Latency = 4;
1055 let NumMicroOps = 4;
1056 let ResourceCycles = [1,3];
1057}
1058def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1059
1060def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1061 let Latency = 5;
1062 let NumMicroOps = 1;
1063 let ResourceCycles = [1];
1064}
Craig Topper5a69a002018-03-21 06:28:42 +00001065def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1066 "MMX_PMADDWDirr",
1067 "MMX_PMULHRSWrr",
1068 "MMX_PMULHUWirr",
1069 "MMX_PMULHWirr",
1070 "MMX_PMULLWirr",
1071 "MMX_PMULUDQirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001072 "MUL_FPrST0",
1073 "MUL_FST0r",
1074 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001075 "(V?)PCMPGTQ(Y?)rr",
1076 "(V?)PHMINPOSUWrr",
1077 "(V?)PMADDUBSW(Y?)rr",
1078 "(V?)PMADDWD(Y?)rr",
1079 "(V?)PMULDQ(Y?)rr",
1080 "(V?)PMULHRSW(Y?)rr",
1081 "(V?)PMULHUW(Y?)rr",
1082 "(V?)PMULHW(Y?)rr",
1083 "(V?)PMULLW(Y?)rr",
1084 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001085 "(V?)RCPPSr",
1086 "(V?)RCPSSr",
1087 "(V?)RSQRTPSr",
1088 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001089
1090def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1091 let Latency = 5;
1092 let NumMicroOps = 1;
1093 let ResourceCycles = [1];
1094}
Craig Topperf82867c2017-12-13 23:11:30 +00001095def: InstRW<[BWWriteResGroup48],
1096 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1097 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001098
1099def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1100 let Latency = 5;
1101 let NumMicroOps = 1;
1102 let ResourceCycles = [1];
1103}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001104def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001105 "MMX_MOVD64to64rm",
1106 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001107 "MOVSX(16|32|64)rm16",
1108 "MOVSX(16|32|64)rm32",
1109 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001110 "MOVZX(16|32|64)rm16",
1111 "MOVZX(16|32|64)rm8",
1112 "PREFETCHNTA",
1113 "PREFETCHT0",
1114 "PREFETCHT1",
1115 "PREFETCHT2",
1116 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001117 "(V?)LDDQUrm",
1118 "(V?)MOV64toPQIrm",
1119 "(V?)MOVAPDrm",
1120 "(V?)MOVAPSrm",
1121 "(V?)MOVDDUPrm",
1122 "(V?)MOVDI2PDIrm",
1123 "(V?)MOVDQArm",
1124 "(V?)MOVDQUrm",
1125 "(V?)MOVNTDQArm",
1126 "(V?)MOVQI2PQIrm",
1127 "(V?)MOVSDrm",
1128 "(V?)MOVSHDUPrm",
1129 "(V?)MOVSLDUPrm",
1130 "(V?)MOVSSrm",
1131 "(V?)MOVUPDrm",
1132 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001133 "VPBROADCASTDrm",
1134 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001135
1136def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1137 let Latency = 5;
1138 let NumMicroOps = 3;
1139 let ResourceCycles = [1,2];
1140}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001141def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1142 "(V?)HADDPD(Y?)rr",
1143 "(V?)HADDPS(Y?)rr",
1144 "(V?)HSUBPD(Y?)rr",
1145 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001146
1147def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1148 let Latency = 5;
1149 let NumMicroOps = 3;
1150 let ResourceCycles = [1,1,1];
1151}
1152def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1153
1154def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001155 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001156 let NumMicroOps = 3;
1157 let ResourceCycles = [1,1,1];
1158}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001159def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001160
1161def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1162 let Latency = 5;
1163 let NumMicroOps = 4;
1164 let ResourceCycles = [1,1,1,1];
1165}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001166def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1167 "VMASKMOVPS(Y?)mr",
1168 "VPMASKMOVD(Y?)mr",
1169 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001170
1171def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1172 let Latency = 5;
1173 let NumMicroOps = 5;
1174 let ResourceCycles = [1,4];
1175}
1176def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1177
1178def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1179 let Latency = 5;
1180 let NumMicroOps = 5;
1181 let ResourceCycles = [1,4];
1182}
1183def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1184
1185def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1186 let Latency = 5;
1187 let NumMicroOps = 5;
1188 let ResourceCycles = [2,3];
1189}
Craig Topper5a69a002018-03-21 06:28:42 +00001190def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001191
1192def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1193 let Latency = 5;
1194 let NumMicroOps = 6;
1195 let ResourceCycles = [1,1,4];
1196}
Craig Topper5a69a002018-03-21 06:28:42 +00001197def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001198
1199def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1200 let Latency = 6;
1201 let NumMicroOps = 1;
1202 let ResourceCycles = [1];
1203}
Craig Topper5a69a002018-03-21 06:28:42 +00001204def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1205 "LD_F64m",
1206 "LD_F80m",
1207 "VBROADCASTF128",
1208 "VBROADCASTI128",
1209 "VBROADCASTSDYrm",
1210 "VBROADCASTSSYrm",
1211 "VLDDQUYrm",
1212 "VMOVAPDYrm",
1213 "VMOVAPSYrm",
1214 "VMOVDDUPYrm",
1215 "VMOVDQAYrm",
1216 "VMOVDQUYrm",
1217 "VMOVNTDQAYrm",
1218 "VMOVSHDUPYrm",
1219 "VMOVSLDUPYrm",
1220 "VMOVUPDYrm",
1221 "VMOVUPSYrm",
1222 "VPBROADCASTDYrm",
1223 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001224 "(V?)ROUNDPD(Y?)r",
1225 "(V?)ROUNDPS(Y?)r",
1226 "(V?)ROUNDSDr",
1227 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001228
1229def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1230 let Latency = 6;
1231 let NumMicroOps = 2;
1232 let ResourceCycles = [1,1];
1233}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001234def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001235 "MMX_PSLLQrm",
1236 "MMX_PSLLWrm",
1237 "MMX_PSRADrm",
1238 "MMX_PSRAWrm",
1239 "MMX_PSRLDrm",
1240 "MMX_PSRLQrm",
1241 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001242 "VCVTPH2PS(Y?)rm",
1243 "(V?)CVTPS2PDrm",
1244 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001245 "VPSLLVQrm",
1246 "VPSRLVQrm",
1247 "VTESTPDrm",
1248 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001249
1250def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1251 let Latency = 6;
1252 let NumMicroOps = 2;
1253 let ResourceCycles = [1,1];
1254}
Craig Topper5a69a002018-03-21 06:28:42 +00001255def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1256 "VCVTPD2DQYrr",
1257 "VCVTPD2PSYrr",
1258 "VCVTPS2PHYrr",
1259 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001260
1261def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1262 let Latency = 6;
1263 let NumMicroOps = 2;
1264 let ResourceCycles = [1,1];
1265}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001266def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001267 "MMX_PINSRWrm",
1268 "MMX_PSHUFBrm",
1269 "MMX_PSHUFWmi",
1270 "MMX_PUNPCKHBWirm",
1271 "MMX_PUNPCKHDQirm",
1272 "MMX_PUNPCKHWDirm",
1273 "MMX_PUNPCKLBWirm",
1274 "MMX_PUNPCKLDQirm",
1275 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001276 "(V?)ANDNPDrm",
1277 "(V?)ANDNPSrm",
1278 "(V?)ANDPDrm",
1279 "(V?)ANDPSrm",
1280 "(V?)INSERTPSrm",
1281 "(V?)MOVHPDrm",
1282 "(V?)MOVHPSrm",
1283 "(V?)MOVLPDrm",
1284 "(V?)MOVLPSrm",
1285 "(V?)ORPDrm",
1286 "(V?)ORPSrm",
1287 "(V?)PACKSSDWrm",
1288 "(V?)PACKSSWBrm",
1289 "(V?)PACKUSDWrm",
1290 "(V?)PACKUSWBrm",
1291 "(V?)PALIGNRrmi",
1292 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001293 "VPERMILPDmi",
1294 "VPERMILPDrm",
1295 "VPERMILPSmi",
1296 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001297 "(V?)PINSRBrm",
1298 "(V?)PINSRDrm",
1299 "(V?)PINSRQrm",
1300 "(V?)PINSRWrm",
1301 "(V?)PMOVSXBDrm",
1302 "(V?)PMOVSXBQrm",
1303 "(V?)PMOVSXBWrm",
1304 "(V?)PMOVSXDQrm",
1305 "(V?)PMOVSXWDrm",
1306 "(V?)PMOVSXWQrm",
1307 "(V?)PMOVZXBDrm",
1308 "(V?)PMOVZXBQrm",
1309 "(V?)PMOVZXBWrm",
1310 "(V?)PMOVZXDQrm",
1311 "(V?)PMOVZXWDrm",
1312 "(V?)PMOVZXWQrm",
1313 "(V?)PSHUFBrm",
1314 "(V?)PSHUFDmi",
1315 "(V?)PSHUFHWmi",
1316 "(V?)PSHUFLWmi",
1317 "(V?)PUNPCKHBWrm",
1318 "(V?)PUNPCKHDQrm",
1319 "(V?)PUNPCKHQDQrm",
1320 "(V?)PUNPCKHWDrm",
1321 "(V?)PUNPCKLBWrm",
1322 "(V?)PUNPCKLDQrm",
1323 "(V?)PUNPCKLQDQrm",
1324 "(V?)PUNPCKLWDrm",
1325 "(V?)SHUFPDrmi",
1326 "(V?)SHUFPSrmi",
1327 "(V?)UNPCKHPDrm",
1328 "(V?)UNPCKHPSrm",
1329 "(V?)UNPCKLPDrm",
1330 "(V?)UNPCKLPSrm",
1331 "(V?)XORPDrm",
1332 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001333
1334def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1335 let Latency = 6;
1336 let NumMicroOps = 2;
1337 let ResourceCycles = [1,1];
1338}
Craig Topper5a69a002018-03-21 06:28:42 +00001339def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1340 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001341
1342def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1343 let Latency = 6;
1344 let NumMicroOps = 2;
1345 let ResourceCycles = [1,1];
1346}
Craig Topperdfccafe2018-04-18 06:41:25 +00001347def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001348def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1349 ADCX32rm, ADCX64rm,
1350 ADOX32rm, ADOX64rm,
1351 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001352
1353def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1354 let Latency = 6;
1355 let NumMicroOps = 2;
1356 let ResourceCycles = [1,1];
1357}
Craig Topper5a69a002018-03-21 06:28:42 +00001358def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1359 "BLSI(32|64)rm",
1360 "BLSMSK(32|64)rm",
1361 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001362 "MMX_PABSBrm",
1363 "MMX_PABSDrm",
1364 "MMX_PABSWrm",
1365 "MMX_PADDBirm",
1366 "MMX_PADDDirm",
1367 "MMX_PADDQirm",
1368 "MMX_PADDSBirm",
1369 "MMX_PADDSWirm",
1370 "MMX_PADDUSBirm",
1371 "MMX_PADDUSWirm",
1372 "MMX_PADDWirm",
1373 "MMX_PAVGBirm",
1374 "MMX_PAVGWirm",
1375 "MMX_PCMPEQBirm",
1376 "MMX_PCMPEQDirm",
1377 "MMX_PCMPEQWirm",
1378 "MMX_PCMPGTBirm",
1379 "MMX_PCMPGTDirm",
1380 "MMX_PCMPGTWirm",
1381 "MMX_PMAXSWirm",
1382 "MMX_PMAXUBirm",
1383 "MMX_PMINSWirm",
1384 "MMX_PMINUBirm",
1385 "MMX_PSIGNBrm",
1386 "MMX_PSIGNDrm",
1387 "MMX_PSIGNWrm",
1388 "MMX_PSUBBirm",
1389 "MMX_PSUBDirm",
1390 "MMX_PSUBQirm",
1391 "MMX_PSUBSBirm",
1392 "MMX_PSUBSWirm",
1393 "MMX_PSUBUSBirm",
1394 "MMX_PSUBUSWirm",
1395 "MMX_PSUBWirm",
1396 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001397 "(V?)PABSBrm",
1398 "(V?)PABSDrm",
1399 "(V?)PABSWrm",
1400 "(V?)PADDBrm",
1401 "(V?)PADDDrm",
1402 "(V?)PADDQrm",
1403 "(V?)PADDSBrm",
1404 "(V?)PADDSWrm",
1405 "(V?)PADDUSBrm",
1406 "(V?)PADDUSWrm",
1407 "(V?)PADDWrm",
1408 "(V?)PAVGBrm",
1409 "(V?)PAVGWrm",
1410 "(V?)PCMPEQBrm",
1411 "(V?)PCMPEQDrm",
1412 "(V?)PCMPEQQrm",
1413 "(V?)PCMPEQWrm",
1414 "(V?)PCMPGTBrm",
1415 "(V?)PCMPGTDrm",
1416 "(V?)PCMPGTWrm",
1417 "(V?)PMAXSBrm",
1418 "(V?)PMAXSDrm",
1419 "(V?)PMAXSWrm",
1420 "(V?)PMAXUBrm",
1421 "(V?)PMAXUDrm",
1422 "(V?)PMAXUWrm",
1423 "(V?)PMINSBrm",
1424 "(V?)PMINSDrm",
1425 "(V?)PMINSWrm",
1426 "(V?)PMINUBrm",
1427 "(V?)PMINUDrm",
1428 "(V?)PMINUWrm",
1429 "(V?)PSIGNBrm",
1430 "(V?)PSIGNDrm",
1431 "(V?)PSIGNWrm",
1432 "(V?)PSUBBrm",
1433 "(V?)PSUBDrm",
1434 "(V?)PSUBQrm",
1435 "(V?)PSUBSBrm",
1436 "(V?)PSUBSWrm",
1437 "(V?)PSUBUSBrm",
1438 "(V?)PSUBUSWrm",
1439 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001440
1441def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1442 let Latency = 6;
1443 let NumMicroOps = 2;
1444 let ResourceCycles = [1,1];
1445}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001446def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001447 "MMX_PANDirm",
1448 "MMX_PORirm",
1449 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001450 "(V?)BLENDPDrmi",
1451 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001452 "VINSERTF128rm",
1453 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001454 "(V?)PANDNrm",
1455 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001456 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001457 "(V?)PORrm",
1458 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001459
1460def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1461 let Latency = 6;
1462 let NumMicroOps = 2;
1463 let ResourceCycles = [1,1];
1464}
Craig Topper2d451e72018-03-18 08:38:06 +00001465def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001466def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001467
1468def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1469 let Latency = 6;
1470 let NumMicroOps = 4;
1471 let ResourceCycles = [1,1,2];
1472}
Craig Topper5a69a002018-03-21 06:28:42 +00001473def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1474 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001475
1476def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1477 let Latency = 6;
1478 let NumMicroOps = 4;
1479 let ResourceCycles = [1,1,1,1];
1480}
1481def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1482
1483def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1484 let Latency = 6;
1485 let NumMicroOps = 4;
1486 let ResourceCycles = [1,1,1,1];
1487}
Craig Topper5a69a002018-03-21 06:28:42 +00001488def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1489 "BTR(16|32|64)mi8",
1490 "BTS(16|32|64)mi8",
1491 "SAR(8|16|32|64)m1",
1492 "SAR(8|16|32|64)mi",
1493 "SHL(8|16|32|64)m1",
1494 "SHL(8|16|32|64)mi",
1495 "SHR(8|16|32|64)m1",
1496 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001497
1498def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1499 let Latency = 6;
1500 let NumMicroOps = 4;
1501 let ResourceCycles = [1,1,1,1];
1502}
Craig Topperf0d04262018-04-06 16:16:48 +00001503def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1504 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001505
1506def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1507 let Latency = 6;
1508 let NumMicroOps = 6;
1509 let ResourceCycles = [1,5];
1510}
1511def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1512
Gadi Haber323f2e12017-10-24 20:19:47 +00001513def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1514 let Latency = 7;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Craig Topper5a69a002018-03-21 06:28:42 +00001518def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1519 "VPSLLQYrm",
1520 "VPSLLVQYrm",
1521 "VPSLLWYrm",
1522 "VPSRADYrm",
1523 "VPSRAWYrm",
1524 "VPSRLDYrm",
1525 "VPSRLQYrm",
1526 "VPSRLVQYrm",
1527 "VPSRLWYrm",
1528 "VTESTPDYrm",
1529 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001530
1531def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1532 let Latency = 7;
1533 let NumMicroOps = 2;
1534 let ResourceCycles = [1,1];
1535}
Craig Topper5a69a002018-03-21 06:28:42 +00001536def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1537 "FCOM64m",
1538 "FCOMP32m",
1539 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001540
1541def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1542 let Latency = 7;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Craig Topper5a69a002018-03-21 06:28:42 +00001546def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1547 "VANDNPSYrm",
1548 "VANDPDYrm",
1549 "VANDPSYrm",
1550 "VORPDYrm",
1551 "VORPSYrm",
1552 "VPACKSSDWYrm",
1553 "VPACKSSWBYrm",
1554 "VPACKUSDWYrm",
1555 "VPACKUSWBYrm",
1556 "VPALIGNRYrmi",
1557 "VPBLENDWYrmi",
1558 "VPERMILPDYmi",
1559 "VPERMILPDYrm",
1560 "VPERMILPSYmi",
1561 "VPERMILPSYrm",
1562 "VPSHUFBYrm",
1563 "VPSHUFDYmi",
1564 "VPSHUFHWYmi",
1565 "VPSHUFLWYmi",
1566 "VPUNPCKHBWYrm",
1567 "VPUNPCKHDQYrm",
1568 "VPUNPCKHQDQYrm",
1569 "VPUNPCKHWDYrm",
1570 "VPUNPCKLBWYrm",
1571 "VPUNPCKLDQYrm",
1572 "VPUNPCKLQDQYrm",
1573 "VPUNPCKLWDYrm",
1574 "VSHUFPDYrmi",
1575 "VSHUFPSYrmi",
1576 "VUNPCKHPDYrm",
1577 "VUNPCKHPSYrm",
1578 "VUNPCKLPDYrm",
1579 "VUNPCKLPSYrm",
1580 "VXORPDYrm",
1581 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001582
1583def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1584 let Latency = 7;
1585 let NumMicroOps = 2;
1586 let ResourceCycles = [1,1];
1587}
Craig Topper5a69a002018-03-21 06:28:42 +00001588def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1589 "VPABSDYrm",
1590 "VPABSWYrm",
1591 "VPADDBYrm",
1592 "VPADDDYrm",
1593 "VPADDQYrm",
1594 "VPADDSBYrm",
1595 "VPADDSWYrm",
1596 "VPADDUSBYrm",
1597 "VPADDUSWYrm",
1598 "VPADDWYrm",
1599 "VPAVGBYrm",
1600 "VPAVGWYrm",
1601 "VPCMPEQBYrm",
1602 "VPCMPEQDYrm",
1603 "VPCMPEQQYrm",
1604 "VPCMPEQWYrm",
1605 "VPCMPGTBYrm",
1606 "VPCMPGTDYrm",
1607 "VPCMPGTWYrm",
1608 "VPMAXSBYrm",
1609 "VPMAXSDYrm",
1610 "VPMAXSWYrm",
1611 "VPMAXUBYrm",
1612 "VPMAXUDYrm",
1613 "VPMAXUWYrm",
1614 "VPMINSBYrm",
1615 "VPMINSDYrm",
1616 "VPMINSWYrm",
1617 "VPMINUBYrm",
1618 "VPMINUDYrm",
1619 "VPMINUWYrm",
1620 "VPSIGNBYrm",
1621 "VPSIGNDYrm",
1622 "VPSIGNWYrm",
1623 "VPSUBBYrm",
1624 "VPSUBDYrm",
1625 "VPSUBQYrm",
1626 "VPSUBSBYrm",
1627 "VPSUBSWYrm",
1628 "VPSUBUSBYrm",
1629 "VPSUBUSWYrm",
1630 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001631
1632def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1633 let Latency = 7;
1634 let NumMicroOps = 2;
1635 let ResourceCycles = [1,1];
1636}
Craig Topper5a69a002018-03-21 06:28:42 +00001637def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1638 "VBLENDPSYrmi",
1639 "VPANDNYrm",
1640 "VPANDYrm",
1641 "VPBLENDDYrmi",
1642 "VPORYrm",
1643 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001644
1645def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1646 let Latency = 7;
1647 let NumMicroOps = 3;
1648 let ResourceCycles = [1,2];
1649}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001650def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001651
1652def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1653 let Latency = 7;
1654 let NumMicroOps = 3;
1655 let ResourceCycles = [2,1];
1656}
Craig Topper5a69a002018-03-21 06:28:42 +00001657def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1658 "BLENDVPSrm0",
1659 "MMX_PACKSSDWirm",
1660 "MMX_PACKSSWBirm",
1661 "MMX_PACKUSWBirm",
1662 "PBLENDVBrm0",
1663 "VBLENDVPDrm",
1664 "VBLENDVPSrm",
1665 "VMASKMOVPDrm",
1666 "VMASKMOVPSrm",
1667 "VPBLENDVBrm",
1668 "VPMASKMOVDrm",
1669 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001670
1671def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1672 let Latency = 7;
1673 let NumMicroOps = 3;
1674 let ResourceCycles = [1,2];
1675}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001676def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1677 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001678
1679def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1680 let Latency = 7;
1681 let NumMicroOps = 3;
1682 let ResourceCycles = [1,1,1];
1683}
Craig Topper5a69a002018-03-21 06:28:42 +00001684def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1685 "PSLLQrm",
1686 "PSLLWrm",
1687 "PSRADrm",
1688 "PSRAWrm",
1689 "PSRLDrm",
1690 "PSRLQrm",
1691 "PSRLWrm",
1692 "PTESTrm",
1693 "VPSLLDrm",
1694 "VPSLLQrm",
1695 "VPSLLWrm",
1696 "VPSRADrm",
1697 "VPSRAWrm",
1698 "VPSRLDrm",
1699 "VPSRLQrm",
1700 "VPSRLWrm",
1701 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001702
1703def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1704 let Latency = 7;
1705 let NumMicroOps = 3;
1706 let ResourceCycles = [1,1,1];
1707}
1708def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1709
1710def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1711 let Latency = 7;
1712 let NumMicroOps = 3;
1713 let ResourceCycles = [1,1,1];
1714}
Craig Topper5a69a002018-03-21 06:28:42 +00001715def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001716
1717def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1718 let Latency = 7;
1719 let NumMicroOps = 3;
1720 let ResourceCycles = [1,1,1];
1721}
Craig Topper5a69a002018-03-21 06:28:42 +00001722def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1723 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001724
Gadi Haber323f2e12017-10-24 20:19:47 +00001725def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1726 let Latency = 7;
1727 let NumMicroOps = 3;
1728 let ResourceCycles = [1,1,1];
1729}
Craig Topperf4cd9082018-01-19 05:47:32 +00001730def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001731
1732def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1733 let Latency = 7;
1734 let NumMicroOps = 5;
1735 let ResourceCycles = [1,1,1,2];
1736}
Craig Topper5a69a002018-03-21 06:28:42 +00001737def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1738 "ROL(8|16|32|64)mi",
1739 "ROR(8|16|32|64)m1",
1740 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001741
1742def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1743 let Latency = 7;
1744 let NumMicroOps = 5;
1745 let ResourceCycles = [1,1,1,2];
1746}
Craig Topper5a69a002018-03-21 06:28:42 +00001747def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001748
1749def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1750 let Latency = 7;
1751 let NumMicroOps = 5;
1752 let ResourceCycles = [1,1,1,1,1];
1753}
Craig Topper5a69a002018-03-21 06:28:42 +00001754def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1755 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001756
1757def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1758 let Latency = 7;
1759 let NumMicroOps = 7;
1760 let ResourceCycles = [2,2,1,2];
1761}
Craig Topper2d451e72018-03-18 08:38:06 +00001762def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001763
1764def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1765 let Latency = 8;
1766 let NumMicroOps = 2;
1767 let ResourceCycles = [1,1];
1768}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001769def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001770 "MMX_CVTPS2PIirm",
1771 "MMX_CVTTPS2PIirm",
1772 "PDEP(32|64)rm",
1773 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001774 "(V?)ADDPDrm",
1775 "(V?)ADDPSrm",
1776 "(V?)ADDSDrm",
1777 "(V?)ADDSSrm",
1778 "(V?)ADDSUBPDrm",
1779 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001780 "(V?)CVTDQ2PSrm",
1781 "(V?)CVTPS2DQrm",
1782 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001783 "(V?)SUBPDrm",
1784 "(V?)SUBPSrm",
1785 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001786 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001787
1788def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001789 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001790 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001791 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001792}
Craig Topperf846e2d2018-04-19 05:34:05 +00001793def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
Craig Topperf846e2d2018-04-19 05:34:05 +00001795def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1796 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001797 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001798 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001799}
Craig Topper5a69a002018-03-21 06:28:42 +00001800def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001801
Gadi Haber323f2e12017-10-24 20:19:47 +00001802def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1803 let Latency = 8;
1804 let NumMicroOps = 2;
1805 let ResourceCycles = [1,1];
1806}
Craig Topper5a69a002018-03-21 06:28:42 +00001807def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1808 "VPMOVSXBQYrm",
1809 "VPMOVSXBWYrm",
1810 "VPMOVSXDQYrm",
1811 "VPMOVSXWDYrm",
1812 "VPMOVSXWQYrm",
1813 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001814
1815def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1816 let Latency = 8;
1817 let NumMicroOps = 2;
1818 let ResourceCycles = [1,1];
1819}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001820def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1821 "(V?)MULPSrm",
1822 "(V?)MULSDrm",
1823 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001824
1825def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1826 let Latency = 8;
1827 let NumMicroOps = 3;
1828 let ResourceCycles = [2,1];
1829}
Craig Topper5a69a002018-03-21 06:28:42 +00001830def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1831 "VBLENDVPSYrm",
1832 "VMASKMOVPDYrm",
1833 "VMASKMOVPSYrm",
1834 "VPBLENDVBYrm",
1835 "VPMASKMOVDYrm",
1836 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001837
1838def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1839 let Latency = 8;
1840 let NumMicroOps = 4;
1841 let ResourceCycles = [2,1,1];
1842}
Craig Topper5a69a002018-03-21 06:28:42 +00001843def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1844 "VPSRAVDrm",
1845 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
1847def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1848 let Latency = 8;
1849 let NumMicroOps = 4;
1850 let ResourceCycles = [2,1,1];
1851}
Craig Topper5a69a002018-03-21 06:28:42 +00001852def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1853 "MMX_PHADDSWrm",
1854 "MMX_PHADDWrm",
1855 "MMX_PHSUBDrm",
1856 "MMX_PHSUBSWrm",
1857 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001858 "(V?)PHADDDrm",
1859 "(V?)PHADDSWrm",
1860 "(V?)PHADDWrm",
1861 "(V?)PHSUBDrm",
1862 "(V?)PHSUBSWrm",
1863 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001864
1865def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1866 let Latency = 8;
1867 let NumMicroOps = 5;
1868 let ResourceCycles = [1,1,1,2];
1869}
Craig Topper5a69a002018-03-21 06:28:42 +00001870def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1871 "RCL(8|16|32|64)mi",
1872 "RCR(8|16|32|64)m1",
1873 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001874
1875def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1876 let Latency = 8;
1877 let NumMicroOps = 5;
1878 let ResourceCycles = [1,1,2,1];
1879}
Craig Topper13a16502018-03-19 00:56:09 +00001880def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001881
1882def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1883 let Latency = 8;
1884 let NumMicroOps = 6;
1885 let ResourceCycles = [1,1,1,3];
1886}
Craig Topper9f834812018-04-01 21:54:24 +00001887def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001888
1889def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1890 let Latency = 8;
1891 let NumMicroOps = 6;
1892 let ResourceCycles = [1,1,1,2,1];
1893}
Craig Topper9f834812018-04-01 21:54:24 +00001894def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001895 "CMPXCHG(8|16|32|64)rm",
1896 "ROL(8|16|32|64)mCL",
1897 "SAR(8|16|32|64)mCL",
1898 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001899 "SHL(8|16|32|64)mCL",
1900 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001901def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1902 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001903
1904def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1905 let Latency = 9;
1906 let NumMicroOps = 2;
1907 let ResourceCycles = [1,1];
1908}
Craig Topper5a69a002018-03-21 06:28:42 +00001909def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1910 "ADD_F64m",
1911 "ILD_F16m",
1912 "ILD_F32m",
1913 "ILD_F64m",
1914 "SUBR_F32m",
1915 "SUBR_F64m",
1916 "SUB_F32m",
1917 "SUB_F64m",
1918 "VADDPDYrm",
1919 "VADDPSYrm",
1920 "VADDSUBPDYrm",
1921 "VADDSUBPSYrm",
1922 "VCMPPDYrmi",
1923 "VCMPPSYrmi",
1924 "VCVTDQ2PSYrm",
1925 "VCVTPS2DQYrm",
1926 "VCVTTPS2DQYrm",
1927 "VMAX(C?)PDYrm",
1928 "VMAX(C?)PSYrm",
1929 "VMIN(C?)PDYrm",
1930 "VMIN(C?)PSYrm",
1931 "VSUBPDYrm",
1932 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001933
1934def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1935 let Latency = 9;
1936 let NumMicroOps = 2;
1937 let ResourceCycles = [1,1];
1938}
Craig Topper5a69a002018-03-21 06:28:42 +00001939def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1940 "VPERM2I128rm",
1941 "VPERMDYrm",
1942 "VPERMPDYmi",
1943 "VPERMPSYrm",
1944 "VPERMQYmi",
1945 "VPMOVZXBDYrm",
1946 "VPMOVZXBQYrm",
1947 "VPMOVZXBWYrm",
1948 "VPMOVZXDQYrm",
1949 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001950
1951def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1952 let Latency = 9;
1953 let NumMicroOps = 2;
1954 let ResourceCycles = [1,1];
1955}
Craig Topper5a69a002018-03-21 06:28:42 +00001956def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1957 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001958
1959def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1960 let Latency = 9;
1961 let NumMicroOps = 3;
1962 let ResourceCycles = [1,1,1];
1963}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001964def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001965
1966def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1967 let Latency = 9;
1968 let NumMicroOps = 3;
1969 let ResourceCycles = [1,1,1];
1970}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001971def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1972 "(V?)CVTSD2SIrm",
1973 "(V?)CVTSS2SI64rm",
1974 "(V?)CVTSS2SIrm",
1975 "(V?)CVTTSD2SI64rm",
1976 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001977 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001978 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001979
1980def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1981 let Latency = 9;
1982 let NumMicroOps = 3;
1983 let ResourceCycles = [1,1,1];
1984}
1985def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1986
1987def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1988 let Latency = 9;
1989 let NumMicroOps = 3;
1990 let ResourceCycles = [1,1,1];
1991}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001992def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001993def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001994 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001995 "CVTTPD2DQrm",
1996 "MMX_CVTPD2PIirm",
1997 "MMX_CVTPI2PDirm",
1998 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001999 "(V?)CVTDQ2PDrm",
2000 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002001
2002def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2003 let Latency = 9;
2004 let NumMicroOps = 3;
2005 let ResourceCycles = [1,1,1];
2006}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002007def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2008 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
2010def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2011 let Latency = 9;
2012 let NumMicroOps = 4;
2013 let ResourceCycles = [2,1,1];
2014}
Craig Topper5a69a002018-03-21 06:28:42 +00002015def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2016 "VPSRAVDYrm",
2017 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002018
2019def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2020 let Latency = 9;
2021 let NumMicroOps = 4;
2022 let ResourceCycles = [2,1,1];
2023}
Craig Topper5a69a002018-03-21 06:28:42 +00002024def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2025 "VPHADDSWYrm",
2026 "VPHADDWYrm",
2027 "VPHSUBDYrm",
2028 "VPHSUBSWYrm",
2029 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002030
2031def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2032 let Latency = 9;
2033 let NumMicroOps = 4;
2034 let ResourceCycles = [1,1,1,1];
2035}
Craig Topper5a69a002018-03-21 06:28:42 +00002036def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2037 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002038
2039def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2040 let Latency = 9;
2041 let NumMicroOps = 5;
2042 let ResourceCycles = [1,1,3];
2043}
2044def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2045
2046def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2047 let Latency = 9;
2048 let NumMicroOps = 5;
2049 let ResourceCycles = [1,2,1,1];
2050}
Craig Topper5a69a002018-03-21 06:28:42 +00002051def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2052 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002053
Gadi Haber323f2e12017-10-24 20:19:47 +00002054def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2055 let Latency = 10;
2056 let NumMicroOps = 2;
2057 let ResourceCycles = [1,1];
2058}
Craig Topper5a69a002018-03-21 06:28:42 +00002059def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2060 "MMX_PMADDWDirm",
2061 "MMX_PMULHRSWrm",
2062 "MMX_PMULHUWirm",
2063 "MMX_PMULHWirm",
2064 "MMX_PMULLWirm",
2065 "MMX_PMULUDQirm",
2066 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002067 "(V?)PCMPGTQrm",
2068 "(V?)PHMINPOSUWrm",
2069 "(V?)PMADDUBSWrm",
2070 "(V?)PMADDWDrm",
2071 "(V?)PMULDQrm",
2072 "(V?)PMULHRSWrm",
2073 "(V?)PMULHUWrm",
2074 "(V?)PMULHWrm",
2075 "(V?)PMULLWrm",
2076 "(V?)PMULUDQrm",
2077 "(V?)PSADBWrm",
2078 "(V?)RCPPSm",
2079 "(V?)RCPSSm",
2080 "(V?)RSQRTPSm",
2081 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002082
2083def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2084 let Latency = 10;
2085 let NumMicroOps = 2;
2086 let ResourceCycles = [1,1];
2087}
Craig Topperf82867c2017-12-13 23:11:30 +00002088def: InstRW<[BWWriteResGroup116],
2089 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2090 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002091
2092def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2093 let Latency = 10;
2094 let NumMicroOps = 3;
2095 let ResourceCycles = [2,1];
2096}
Craig Topper5a69a002018-03-21 06:28:42 +00002097def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2098 "FICOM32m",
2099 "FICOMP16m",
2100 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002101
2102def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2103 let Latency = 10;
2104 let NumMicroOps = 3;
2105 let ResourceCycles = [1,1,1];
2106}
2107def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2108
2109def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2110 let Latency = 10;
2111 let NumMicroOps = 4;
2112 let ResourceCycles = [1,2,1];
2113}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002114def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2115 "(V?)HADDPSrm",
2116 "(V?)HSUBPDrm",
2117 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002118
2119def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2120 let Latency = 10;
2121 let NumMicroOps = 4;
2122 let ResourceCycles = [1,1,1,1];
2123}
2124def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2125
2126def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002127 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128 let NumMicroOps = 4;
2129 let ResourceCycles = [1,1,1,1];
2130}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002131def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002132
Craig Topper8104f262018-04-02 05:33:28 +00002133def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002134 let Latency = 11;
2135 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002136 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002137}
Craig Topper8104f262018-04-02 05:33:28 +00002138def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2139
2140def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2141 let Latency = 11;
2142 let NumMicroOps = 1;
2143 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2144}
2145def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002146
2147def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2148 let Latency = 11;
2149 let NumMicroOps = 2;
2150 let ResourceCycles = [1,1];
2151}
Craig Topper5a69a002018-03-21 06:28:42 +00002152def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2153 "MUL_F64m",
2154 "VPCMPGTQYrm",
2155 "VPMADDUBSWYrm",
2156 "VPMADDWDYrm",
2157 "VPMULDQYrm",
2158 "VPMULHRSWYrm",
2159 "VPMULHUWYrm",
2160 "VPMULHWYrm",
2161 "VPMULLWYrm",
2162 "VPMULUDQYrm",
2163 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002164
2165def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2166 let Latency = 11;
2167 let NumMicroOps = 2;
2168 let ResourceCycles = [1,1];
2169}
Craig Topperf82867c2017-12-13 23:11:30 +00002170def: InstRW<[BWWriteResGroup124],
2171 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002172
Gadi Haber323f2e12017-10-24 20:19:47 +00002173def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2174 let Latency = 11;
2175 let NumMicroOps = 3;
2176 let ResourceCycles = [2,1];
2177}
Craig Topper5a69a002018-03-21 06:28:42 +00002178def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2179 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002180
2181def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2182 let Latency = 11;
2183 let NumMicroOps = 3;
2184 let ResourceCycles = [2,1];
2185}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002186def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2187 "(V?)ROUNDPSm",
2188 "(V?)ROUNDSDm",
2189 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002190
2191def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2192 let Latency = 11;
2193 let NumMicroOps = 3;
2194 let ResourceCycles = [1,1,1];
2195}
2196def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2197
2198def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2199 let Latency = 11;
2200 let NumMicroOps = 4;
2201 let ResourceCycles = [1,2,1];
2202}
Craig Topper5a69a002018-03-21 06:28:42 +00002203def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2204 "VHADDPSYrm",
2205 "VHSUBPDYrm",
2206 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002207
2208def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2209 let Latency = 11;
2210 let NumMicroOps = 6;
2211 let ResourceCycles = [1,1,1,1,2];
2212}
Craig Topper5a69a002018-03-21 06:28:42 +00002213def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2214 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002215
2216def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2217 let Latency = 11;
2218 let NumMicroOps = 7;
2219 let ResourceCycles = [2,2,3];
2220}
Craig Topper5a69a002018-03-21 06:28:42 +00002221def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2222 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002223
2224def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2225 let Latency = 11;
2226 let NumMicroOps = 9;
2227 let ResourceCycles = [1,4,1,3];
2228}
2229def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2230
2231def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2232 let Latency = 11;
2233 let NumMicroOps = 11;
2234 let ResourceCycles = [2,9];
2235}
Craig Topper2d451e72018-03-18 08:38:06 +00002236def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2237def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002238
Gadi Haber323f2e12017-10-24 20:19:47 +00002239def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2240 let Latency = 12;
2241 let NumMicroOps = 3;
2242 let ResourceCycles = [2,1];
2243}
Craig Topper5a69a002018-03-21 06:28:42 +00002244def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2245 "ADD_FI32m",
2246 "SUBR_FI16m",
2247 "SUBR_FI32m",
2248 "SUB_FI16m",
2249 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002250 "VROUNDPDYm",
2251 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002252
2253def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2254 let Latency = 12;
2255 let NumMicroOps = 4;
2256 let ResourceCycles = [1,2,1];
2257}
Craig Topper5a69a002018-03-21 06:28:42 +00002258def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002259
Craig Topper8104f262018-04-02 05:33:28 +00002260def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002261 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002262 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002263 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002264}
Craig Topper8104f262018-04-02 05:33:28 +00002265def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2266
2267def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2268 let Latency = 11;
2269 let NumMicroOps = 1;
2270 let ResourceCycles = [1,4];
2271}
2272def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002273
2274def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2275 let Latency = 13;
2276 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002277 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002278}
2279def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2280
Craig Topper8104f262018-04-02 05:33:28 +00002281def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002282 let Latency = 14;
2283 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002284 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002285}
Craig Topper8104f262018-04-02 05:33:28 +00002286def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2287
2288def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2289 let Latency = 14;
2290 let NumMicroOps = 1;
2291 let ResourceCycles = [1,4];
2292}
2293def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002294
Gadi Haber323f2e12017-10-24 20:19:47 +00002295def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2296 let Latency = 14;
2297 let NumMicroOps = 3;
2298 let ResourceCycles = [1,1,1];
2299}
Craig Topper5a69a002018-03-21 06:28:42 +00002300def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2301 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002302
2303def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2304 let Latency = 14;
2305 let NumMicroOps = 4;
2306 let ResourceCycles = [2,1,1];
2307}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002308def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002309
2310def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2311 let Latency = 14;
2312 let NumMicroOps = 4;
2313 let ResourceCycles = [1,1,1,1];
2314}
Craig Topper5a69a002018-03-21 06:28:42 +00002315def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002316
2317def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2318 let Latency = 14;
2319 let NumMicroOps = 8;
2320 let ResourceCycles = [2,2,1,3];
2321}
2322def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2323
2324def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2325 let Latency = 14;
2326 let NumMicroOps = 10;
2327 let ResourceCycles = [2,3,1,4];
2328}
2329def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2330
2331def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2332 let Latency = 14;
2333 let NumMicroOps = 12;
2334 let ResourceCycles = [2,1,4,5];
2335}
2336def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2337
2338def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2339 let Latency = 15;
2340 let NumMicroOps = 1;
2341 let ResourceCycles = [1];
2342}
Craig Topper5a69a002018-03-21 06:28:42 +00002343def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2344 "DIVR_FST0r",
2345 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002346
Gadi Haber323f2e12017-10-24 20:19:47 +00002347def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2348 let Latency = 15;
2349 let NumMicroOps = 10;
2350 let ResourceCycles = [1,1,1,4,1,2];
2351}
Craig Topper13a16502018-03-19 00:56:09 +00002352def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002353
Craig Topper8104f262018-04-02 05:33:28 +00002354def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002355 let Latency = 16;
2356 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002357 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002358}
Craig Topper5a69a002018-03-21 06:28:42 +00002359def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2360 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002361
2362def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2363 let Latency = 16;
2364 let NumMicroOps = 3;
2365 let ResourceCycles = [2,1];
2366}
2367def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2368
Gadi Haber323f2e12017-10-24 20:19:47 +00002369def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2370 let Latency = 16;
2371 let NumMicroOps = 14;
2372 let ResourceCycles = [1,1,1,4,2,5];
2373}
2374def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2375
2376def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2377 let Latency = 16;
2378 let NumMicroOps = 16;
2379 let ResourceCycles = [16];
2380}
Craig Topper5a69a002018-03-21 06:28:42 +00002381def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002382
Craig Topper8104f262018-04-02 05:33:28 +00002383def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002384 let Latency = 17;
2385 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002386 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002387}
2388def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2389
2390def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2391 let Latency = 17;
2392 let NumMicroOps = 4;
2393 let ResourceCycles = [2,1,1];
2394}
Craig Topper5a69a002018-03-21 06:28:42 +00002395def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2396 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002397
Craig Topper8104f262018-04-02 05:33:28 +00002398def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002399 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002400 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002401 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002402}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002403def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2404 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002405
Gadi Haber323f2e12017-10-24 20:19:47 +00002406def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2407 let Latency = 18;
2408 let NumMicroOps = 8;
2409 let ResourceCycles = [1,1,1,5];
2410}
Craig Topper5a69a002018-03-21 06:28:42 +00002411def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002412def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002413
2414def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2415 let Latency = 18;
2416 let NumMicroOps = 11;
2417 let ResourceCycles = [2,1,1,3,1,3];
2418}
Craig Topper13a16502018-03-19 00:56:09 +00002419def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002420
Craig Topper8104f262018-04-02 05:33:28 +00002421def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002422 let Latency = 19;
2423 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002424 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002425}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002426def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002427 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002428
Gadi Haber323f2e12017-10-24 20:19:47 +00002429def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2430 let Latency = 19;
2431 let NumMicroOps = 5;
2432 let ResourceCycles = [2,1,1,1];
2433}
Craig Topper5a69a002018-03-21 06:28:42 +00002434def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002435
Gadi Haber323f2e12017-10-24 20:19:47 +00002436def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2437 let Latency = 20;
2438 let NumMicroOps = 1;
2439 let ResourceCycles = [1];
2440}
Craig Topper5a69a002018-03-21 06:28:42 +00002441def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2442 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002443 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002444
2445def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2446 let Latency = 20;
2447 let NumMicroOps = 5;
2448 let ResourceCycles = [2,1,1,1];
2449}
2450def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2451
2452def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2453 let Latency = 20;
2454 let NumMicroOps = 8;
2455 let ResourceCycles = [1,1,1,1,1,1,2];
2456}
Craig Topper5a69a002018-03-21 06:28:42 +00002457def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2458 "INSL",
2459 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002460
Craig Topper8104f262018-04-02 05:33:28 +00002461def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002462 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002463 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002464 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002465}
Craig Topper8104f262018-04-02 05:33:28 +00002466def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2467
2468def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2469 let Latency = 16;
2470 let NumMicroOps = 1;
2471 let ResourceCycles = [1,8];
2472}
2473def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002474
2475def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2476 let Latency = 21;
2477 let NumMicroOps = 2;
2478 let ResourceCycles = [1,1];
2479}
Craig Topper5a69a002018-03-21 06:28:42 +00002480def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2481 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002482
Craig Topper8104f262018-04-02 05:33:28 +00002483def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002484 let Latency = 21;
2485 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002486 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002487}
2488def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2489
2490def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2491 let Latency = 21;
2492 let NumMicroOps = 19;
2493 let ResourceCycles = [2,1,4,1,1,4,6];
2494}
2495def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2496
2497def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2498 let Latency = 22;
2499 let NumMicroOps = 18;
2500 let ResourceCycles = [1,1,16];
2501}
2502def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2503
Craig Topper8104f262018-04-02 05:33:28 +00002504def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002505 let Latency = 23;
2506 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002507 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002508}
2509def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2510
Craig Topper8104f262018-04-02 05:33:28 +00002511def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002512 let Latency = 23;
2513 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002514 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002515}
2516def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2517
Gadi Haber323f2e12017-10-24 20:19:47 +00002518def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2519 let Latency = 23;
2520 let NumMicroOps = 19;
2521 let ResourceCycles = [3,1,15];
2522}
Craig Topper391c6f92017-12-10 01:24:08 +00002523def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002524
2525def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2526 let Latency = 24;
2527 let NumMicroOps = 3;
2528 let ResourceCycles = [1,1,1];
2529}
Craig Topper5a69a002018-03-21 06:28:42 +00002530def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2531 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002532
Craig Topper8104f262018-04-02 05:33:28 +00002533def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002534 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002535 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002536 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002537}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002538def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2539 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002540
2541def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2542 let Latency = 26;
2543 let NumMicroOps = 2;
2544 let ResourceCycles = [1,1];
2545}
Craig Topper5a69a002018-03-21 06:28:42 +00002546def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002547 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002548
Craig Topper8104f262018-04-02 05:33:28 +00002549def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002550 let Latency = 27;
2551 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002552 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002553}
2554def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2555
2556def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2557 let Latency = 29;
2558 let NumMicroOps = 3;
2559 let ResourceCycles = [1,1,1];
2560}
Craig Topper5a69a002018-03-21 06:28:42 +00002561def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2562 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002563
Craig Topper8104f262018-04-02 05:33:28 +00002564def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002565 let Latency = 29;
2566 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002567 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002568}
2569def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2570
2571def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2572 let Latency = 22;
2573 let NumMicroOps = 7;
2574 let ResourceCycles = [1,3,2,1];
2575}
Craig Topper17a31182017-12-16 18:35:29 +00002576def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002577
2578def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2579 let Latency = 23;
2580 let NumMicroOps = 9;
2581 let ResourceCycles = [1,3,4,1];
2582}
Craig Topper17a31182017-12-16 18:35:29 +00002583def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002584
2585def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2586 let Latency = 24;
2587 let NumMicroOps = 9;
2588 let ResourceCycles = [1,5,2,1];
2589}
Craig Topper17a31182017-12-16 18:35:29 +00002590def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002591
2592def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2593 let Latency = 25;
2594 let NumMicroOps = 7;
2595 let ResourceCycles = [1,3,2,1];
2596}
Craig Topper17a31182017-12-16 18:35:29 +00002597def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2598 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002599
2600def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2601 let Latency = 26;
2602 let NumMicroOps = 9;
2603 let ResourceCycles = [1,5,2,1];
2604}
Craig Topper17a31182017-12-16 18:35:29 +00002605def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002606
2607def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2608 let Latency = 26;
2609 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002610 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002611}
Craig Topper17a31182017-12-16 18:35:29 +00002612def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002613
2614def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2615 let Latency = 27;
2616 let NumMicroOps = 9;
2617 let ResourceCycles = [1,5,2,1];
2618}
Craig Topper17a31182017-12-16 18:35:29 +00002619def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002620
Gadi Haber323f2e12017-10-24 20:19:47 +00002621def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2622 let Latency = 29;
2623 let NumMicroOps = 27;
2624 let ResourceCycles = [1,5,1,1,19];
2625}
2626def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2627
2628def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2629 let Latency = 30;
2630 let NumMicroOps = 28;
2631 let ResourceCycles = [1,6,1,1,19];
2632}
Craig Topper2d451e72018-03-18 08:38:06 +00002633def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002634
2635def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2636 let Latency = 31;
2637 let NumMicroOps = 31;
2638 let ResourceCycles = [8,1,21,1];
2639}
2640def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2641
Craig Topper8104f262018-04-02 05:33:28 +00002642def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2643 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002644 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002645 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002646}
2647def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2648
2649def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2650 let Latency = 34;
2651 let NumMicroOps = 8;
2652 let ResourceCycles = [2,2,2,1,1];
2653}
Craig Topper13a16502018-03-19 00:56:09 +00002654def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002655
2656def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2657 let Latency = 34;
2658 let NumMicroOps = 23;
2659 let ResourceCycles = [1,5,3,4,10];
2660}
Craig Topper5a69a002018-03-21 06:28:42 +00002661def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2662 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002663
2664def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2665 let Latency = 35;
2666 let NumMicroOps = 8;
2667 let ResourceCycles = [2,2,2,1,1];
2668}
Craig Topper13a16502018-03-19 00:56:09 +00002669def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002670
2671def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2672 let Latency = 35;
2673 let NumMicroOps = 23;
2674 let ResourceCycles = [1,5,2,1,4,10];
2675}
Craig Topper5a69a002018-03-21 06:28:42 +00002676def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2677 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002678
Craig Topper8104f262018-04-02 05:33:28 +00002679def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2680 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002681 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002682 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002683}
2684def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2685
2686def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2687 let Latency = 42;
2688 let NumMicroOps = 22;
2689 let ResourceCycles = [2,20];
2690}
Craig Topper2d451e72018-03-18 08:38:06 +00002691def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002692
2693def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2694 let Latency = 60;
2695 let NumMicroOps = 64;
2696 let ResourceCycles = [2,2,8,1,10,2,39];
2697}
2698def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002699
2700def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2701 let Latency = 63;
2702 let NumMicroOps = 88;
2703 let ResourceCycles = [4,4,31,1,2,1,45];
2704}
Craig Topper2d451e72018-03-18 08:38:06 +00002705def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002706
2707def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2708 let Latency = 63;
2709 let NumMicroOps = 90;
2710 let ResourceCycles = [4,2,33,1,2,1,47];
2711}
Craig Topper2d451e72018-03-18 08:38:06 +00002712def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002713
2714def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2715 let Latency = 75;
2716 let NumMicroOps = 15;
2717 let ResourceCycles = [6,3,6];
2718}
2719def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2720
2721def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2722 let Latency = 80;
2723 let NumMicroOps = 32;
2724 let ResourceCycles = [7,7,3,3,1,11];
2725}
2726def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2727
2728def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2729 let Latency = 115;
2730 let NumMicroOps = 100;
2731 let ResourceCycles = [9,9,11,8,1,11,21,30];
2732}
2733def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002734
2735} // SchedModel
2736