blob: 8832d5a67164073ae89468b8a8a86e1e7d97e730 [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
103// A folded store needs a cycle on port 4 for the store data, but it does not
104// need an extra port 2/3 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort4]>;
106
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
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000116// Bit counts.
117defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
118defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
119defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
120defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
121
Gadi Haber323f2e12017-10-24 20:19:47 +0000122// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000123defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000124
Craig Topper89310f52018-03-29 20:41:39 +0000125// BMI1 BEXTR, BMI2 BZHI
126defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
127defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Loads, stores, and moves, not folded with other operations.
130def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
131def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
132def : WriteRes<WriteMove, [BWPort0156]>;
133
134// Idioms that clear a register, like xorps %xmm0, %xmm0.
135// These can often bypass execution ports completely.
136def : WriteRes<WriteZero, []>;
137
Sanjoy Das1074eb22017-12-12 19:11:31 +0000138// Treat misc copies as a move.
139def : InstRW<[WriteMove], (instrs COPY)>;
140
Gadi Haber323f2e12017-10-24 20:19:47 +0000141// Branches don't produce values, so they have no latency, but they still
142// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000143defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000144
145// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000146def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
147def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
148def : WriteRes<WriteFMove, [BWPort5]>;
149
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub/compare.
151defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
152defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
153defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
154defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
155defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
156defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
157defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
158defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
159defm : BWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000160
161// FMA Scheduling helper class.
162// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
163
164// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000165def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
166def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
167def : WriteRes<WriteVecMove, [BWPort015]>;
168
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000169defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
170defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
171defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000172defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
174defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
175defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
176defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber323f2e12017-10-24 20:19:47 +0000177
178// Vector bitwise operations.
179// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector and/or/xor.
Gadi Haber323f2e12017-10-24 20:19:47 +0000181
182// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
184defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
185defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000186
187// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000188
Gadi Haber323f2e12017-10-24 20:19:47 +0000189// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000190def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000191 let Latency = 11;
192 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000193 let ResourceCycles = [3];
194}
195def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 16;
197 let NumMicroOps = 4;
198 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000199}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200
201// Packed Compare Explicit Length Strings, Return Mask
202def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
203 let Latency = 19;
204 let NumMicroOps = 9;
205 let ResourceCycles = [4,3,1,1];
206}
207def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
208 let Latency = 24;
209 let NumMicroOps = 10;
210 let ResourceCycles = [4,3,1,1,1];
211}
212
213// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000214def : WriteRes<WritePCmpIStrI, [BWPort0]> {
215 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000216 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000217 let ResourceCycles = [3];
218}
219def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000220 let Latency = 16;
221 let NumMicroOps = 4;
222 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000223}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000224
225// Packed Compare Explicit Length Strings, Return Index
226def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
227 let Latency = 18;
228 let NumMicroOps = 8;
229 let ResourceCycles = [4,3,1];
230}
231def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
232 let Latency = 23;
233 let NumMicroOps = 9;
234 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000235}
236
Simon Pilgrima2f26782018-03-27 20:38:54 +0000237// MOVMSK Instructions.
238def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
239def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
240def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
241
Gadi Haber323f2e12017-10-24 20:19:47 +0000242// AES instructions.
243def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
244 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000245 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000246 let ResourceCycles = [1];
247}
248def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249 let Latency = 12;
250 let NumMicroOps = 2;
251 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000252}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000253
Gadi Haber323f2e12017-10-24 20:19:47 +0000254def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
255 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [2];
258}
259def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 19;
261 let NumMicroOps = 3;
262 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000264
265def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
266 let Latency = 29;
267 let NumMicroOps = 11;
268 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000269}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
271 let Latency = 33;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000274}
275
276// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000277defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000278
279// Catch-all for expensive system instructions.
280def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
281
282// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000283defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
284defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
285defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000286
287// Old microcoded instructions that nobody use.
288def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
289
290// Fence instructions.
291def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
292
293// Nop, not very useful expect it provides a model for nops!
294def : WriteRes<WriteNop, []>;
295
296////////////////////////////////////////////////////////////////////////////////
297// Horizontal add/sub instructions.
298////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000299
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
301defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000302
303// Remaining instrs.
304
305def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
306 let Latency = 1;
307 let NumMicroOps = 1;
308 let ResourceCycles = [1];
309}
Craig Topper5a69a002018-03-21 06:28:42 +0000310def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
311 "MMX_MOVD64grr",
Craig Topper5a69a002018-03-21 06:28:42 +0000312 "MMX_PSLLDri",
313 "MMX_PSLLDrr",
314 "MMX_PSLLQri",
315 "MMX_PSLLQrr",
316 "MMX_PSLLWri",
317 "MMX_PSLLWrr",
318 "MMX_PSRADri",
319 "MMX_PSRADrr",
320 "MMX_PSRAWri",
321 "MMX_PSRAWrr",
322 "MMX_PSRLDri",
323 "MMX_PSRLDrr",
324 "MMX_PSRLQri",
325 "MMX_PSRLQrr",
326 "MMX_PSRLWri",
327 "MMX_PSRLWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000328 "(V?)MOVPDI2DIrr",
329 "(V?)MOVPQIto64rr",
330 "(V?)PSLLD(Y?)ri",
331 "(V?)PSLLQ(Y?)ri",
332 "VPSLLVQ(Y?)rr",
333 "(V?)PSLLW(Y?)ri",
334 "(V?)PSRAD(Y?)ri",
335 "(V?)PSRAW(Y?)ri",
336 "(V?)PSRLD(Y?)ri",
337 "(V?)PSRLQ(Y?)ri",
338 "VPSRLVQ(Y?)rr",
339 "(V?)PSRLW(Y?)ri",
340 "VTESTPD(Y?)rr",
341 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000342
343def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
344 let Latency = 1;
345 let NumMicroOps = 1;
346 let ResourceCycles = [1];
347}
Craig Topper5a69a002018-03-21 06:28:42 +0000348def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
349 "COM_FST0r",
350 "UCOM_FPr",
351 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000352
353def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
354 let Latency = 1;
355 let NumMicroOps = 1;
356 let ResourceCycles = [1];
357}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000359 "MMX_MOVD64to64rr",
360 "MMX_MOVQ2DQrr",
361 "MMX_PALIGNRrri",
362 "MMX_PSHUFBrr",
363 "MMX_PSHUFWri",
364 "MMX_PUNPCKHBWirr",
365 "MMX_PUNPCKHDQirr",
366 "MMX_PUNPCKHWDirr",
367 "MMX_PUNPCKLBWirr",
368 "MMX_PUNPCKLDQirr",
369 "MMX_PUNPCKLWDirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000370 "(V?)ANDNPD(Y?)rr",
371 "(V?)ANDNPS(Y?)rr",
372 "(V?)ANDPD(Y?)rr",
373 "(V?)ANDPS(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000374 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000375 "(V?)INSERTPSrr",
376 "(V?)MOV64toPQIrr",
377 "(V?)MOVAPD(Y?)rr",
378 "(V?)MOVAPS(Y?)rr",
379 "(V?)MOVDDUP(Y?)rr",
380 "(V?)MOVDI2PDIrr",
381 "(V?)MOVHLPSrr",
382 "(V?)MOVLHPSrr",
383 "(V?)MOVSDrr",
384 "(V?)MOVSHDUP(Y?)rr",
385 "(V?)MOVSLDUP(Y?)rr",
386 "(V?)MOVSSrr",
387 "(V?)MOVUPD(Y?)rr",
388 "(V?)MOVUPS(Y?)rr",
389 "(V?)ORPD(Y?)rr",
390 "(V?)ORPS(Y?)rr",
391 "(V?)PACKSSDW(Y?)rr",
392 "(V?)PACKSSWB(Y?)rr",
393 "(V?)PACKUSDW(Y?)rr",
394 "(V?)PACKUSWB(Y?)rr",
395 "(V?)PALIGNR(Y?)rri",
396 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000397 "VPBROADCASTDrr",
398 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000399 "VPERMILPD(Y?)ri",
400 "VPERMILPD(Y?)rr",
401 "VPERMILPS(Y?)ri",
402 "VPERMILPS(Y?)rr",
403 "(V?)PMOVSXBDrr",
404 "(V?)PMOVSXBQrr",
405 "(V?)PMOVSXBWrr",
406 "(V?)PMOVSXDQrr",
407 "(V?)PMOVSXWDrr",
408 "(V?)PMOVSXWQrr",
409 "(V?)PMOVZXBDrr",
410 "(V?)PMOVZXBQrr",
411 "(V?)PMOVZXBWrr",
412 "(V?)PMOVZXDQrr",
413 "(V?)PMOVZXWDrr",
414 "(V?)PMOVZXWQrr",
415 "(V?)PSHUFB(Y?)rr",
416 "(V?)PSHUFD(Y?)ri",
417 "(V?)PSHUFHW(Y?)ri",
418 "(V?)PSHUFLW(Y?)ri",
419 "(V?)PSLLDQ(Y?)ri",
420 "(V?)PSRLDQ(Y?)ri",
421 "(V?)PUNPCKHBW(Y?)rr",
422 "(V?)PUNPCKHDQ(Y?)rr",
423 "(V?)PUNPCKHQDQ(Y?)rr",
424 "(V?)PUNPCKHWD(Y?)rr",
425 "(V?)PUNPCKLBW(Y?)rr",
426 "(V?)PUNPCKLDQ(Y?)rr",
427 "(V?)PUNPCKLQDQ(Y?)rr",
428 "(V?)PUNPCKLWD(Y?)rr",
429 "(V?)SHUFPD(Y?)rri",
430 "(V?)SHUFPS(Y?)rri",
431 "(V?)UNPCKHPD(Y?)rr",
432 "(V?)UNPCKHPS(Y?)rr",
433 "(V?)UNPCKLPD(Y?)rr",
434 "(V?)UNPCKLPS(Y?)rr",
435 "(V?)XORPD(Y?)rr",
436 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000437
438def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
439 let Latency = 1;
440 let NumMicroOps = 1;
441 let ResourceCycles = [1];
442}
443def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
444
445def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
446 let Latency = 1;
447 let NumMicroOps = 1;
448 let ResourceCycles = [1];
449}
Craig Topper5a69a002018-03-21 06:28:42 +0000450def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
451 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000452
453def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
454 let Latency = 1;
455 let NumMicroOps = 1;
456 let ResourceCycles = [1];
457}
Craig Topper5a69a002018-03-21 06:28:42 +0000458def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
459 "ADC(16|32|64)i",
460 "ADC(8|16|32|64)rr",
461 "ADCX(32|64)rr",
462 "ADOX(32|64)rr",
463 "BT(16|32|64)ri8",
464 "BT(16|32|64)rr",
465 "BTC(16|32|64)ri8",
466 "BTC(16|32|64)rr",
467 "BTR(16|32|64)ri8",
468 "BTR(16|32|64)rr",
469 "BTS(16|32|64)ri8",
470 "BTS(16|32|64)rr",
471 "CDQ",
472 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
473 "CQO",
474 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
475 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
476 "JMP_1",
477 "JMP_4",
478 "RORX(32|64)ri",
479 "SAR(8|16|32|64)r1",
480 "SAR(8|16|32|64)ri",
481 "SARX(32|64)rr",
482 "SBB(16|32|64)ri",
483 "SBB(16|32|64)i",
484 "SBB(8|16|32|64)rr",
485 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
486 "SHL(8|16|32|64)r1",
487 "SHL(8|16|32|64)ri",
488 "SHLX(32|64)rr",
489 "SHR(8|16|32|64)r1",
490 "SHR(8|16|32|64)ri",
491 "SHRX(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000492
493def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
494 let Latency = 1;
495 let NumMicroOps = 1;
496 let ResourceCycles = [1];
497}
Craig Topper5a69a002018-03-21 06:28:42 +0000498def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
499 "BLSI(32|64)rr",
500 "BLSMSK(32|64)rr",
501 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000502 "LEA(16|32|64)(_32)?r",
503 "MMX_PABSBrr",
504 "MMX_PABSDrr",
505 "MMX_PABSWrr",
506 "MMX_PADDBirr",
507 "MMX_PADDDirr",
508 "MMX_PADDQirr",
509 "MMX_PADDSBirr",
510 "MMX_PADDSWirr",
511 "MMX_PADDUSBirr",
512 "MMX_PADDUSWirr",
513 "MMX_PADDWirr",
514 "MMX_PAVGBirr",
515 "MMX_PAVGWirr",
516 "MMX_PCMPEQBirr",
517 "MMX_PCMPEQDirr",
518 "MMX_PCMPEQWirr",
519 "MMX_PCMPGTBirr",
520 "MMX_PCMPGTDirr",
521 "MMX_PCMPGTWirr",
522 "MMX_PMAXSWirr",
523 "MMX_PMAXUBirr",
524 "MMX_PMINSWirr",
525 "MMX_PMINUBirr",
526 "MMX_PSIGNBrr",
527 "MMX_PSIGNDrr",
528 "MMX_PSIGNWrr",
529 "MMX_PSUBBirr",
530 "MMX_PSUBDirr",
531 "MMX_PSUBQirr",
532 "MMX_PSUBSBirr",
533 "MMX_PSUBSWirr",
534 "MMX_PSUBUSBirr",
535 "MMX_PSUBUSWirr",
536 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000537 "(V?)PABSB(Y?)rr",
538 "(V?)PABSD(Y?)rr",
539 "(V?)PABSW(Y?)rr",
540 "(V?)PADDB(Y?)rr",
541 "(V?)PADDD(Y?)rr",
542 "(V?)PADDQ(Y?)rr",
543 "(V?)PADDSB(Y?)rr",
544 "(V?)PADDSW(Y?)rr",
545 "(V?)PADDUSB(Y?)rr",
546 "(V?)PADDUSW(Y?)rr",
547 "(V?)PADDW(Y?)rr",
548 "(V?)PAVGB(Y?)rr",
549 "(V?)PAVGW(Y?)rr",
550 "(V?)PCMPEQB(Y?)rr",
551 "(V?)PCMPEQD(Y?)rr",
552 "(V?)PCMPEQQ(Y?)rr",
553 "(V?)PCMPEQW(Y?)rr",
554 "(V?)PCMPGTB(Y?)rr",
555 "(V?)PCMPGTD(Y?)rr",
556 "(V?)PCMPGTW(Y?)rr",
557 "(V?)PMAXSB(Y?)rr",
558 "(V?)PMAXSD(Y?)rr",
559 "(V?)PMAXSW(Y?)rr",
560 "(V?)PMAXUB(Y?)rr",
561 "(V?)PMAXUD(Y?)rr",
562 "(V?)PMAXUW(Y?)rr",
563 "(V?)PMINSB(Y?)rr",
564 "(V?)PMINSD(Y?)rr",
565 "(V?)PMINSW(Y?)rr",
566 "(V?)PMINUB(Y?)rr",
567 "(V?)PMINUD(Y?)rr",
568 "(V?)PMINUW(Y?)rr",
569 "(V?)PSIGNB(Y?)rr",
570 "(V?)PSIGND(Y?)rr",
571 "(V?)PSIGNW(Y?)rr",
572 "(V?)PSUBB(Y?)rr",
573 "(V?)PSUBD(Y?)rr",
574 "(V?)PSUBQ(Y?)rr",
575 "(V?)PSUBSB(Y?)rr",
576 "(V?)PSUBSW(Y?)rr",
577 "(V?)PSUBUSB(Y?)rr",
578 "(V?)PSUBUSW(Y?)rr",
579 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000580
581def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
582 let Latency = 1;
583 let NumMicroOps = 1;
584 let ResourceCycles = [1];
585}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000586def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000587 "MMX_PANDNirr",
588 "MMX_PANDirr",
589 "MMX_PORirr",
590 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000591 "(V?)BLENDPD(Y?)rri",
592 "(V?)BLENDPS(Y?)rri",
593 "(V?)MOVDQA(Y?)rr",
594 "(V?)MOVDQU(Y?)rr",
595 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000596 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000597 "(V?)PANDN(Y?)rr",
598 "(V?)PAND(Y?)rr",
599 "VPBLENDD(Y?)rri",
600 "(V?)POR(Y?)rr",
601 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000602
603def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
604 let Latency = 1;
605 let NumMicroOps = 1;
606 let ResourceCycles = [1];
607}
Craig Topper2d451e72018-03-18 08:38:06 +0000608def: InstRW<[BWWriteResGroup9], (instrs CWDE)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000609def: InstRW<[BWWriteResGroup9], (instregex "ADD(8|16|32|64)ri",
610 "ADD(8|16|32|64)rr",
611 "ADD(8|16|32|64)i",
612 "AND(8|16|32|64)ri",
613 "AND(8|16|32|64)rr",
614 "AND(8|16|32|64)i",
615 "CBW",
616 "CLC",
617 "CMC",
618 "CMP(8|16|32|64)ri",
619 "CMP(8|16|32|64)rr",
620 "CMP(8|16|32|64)i",
621 "DEC(8|16|32|64)r",
622 "INC(8|16|32|64)r",
623 "LAHF",
624 "MOV(8|16|32|64)rr",
625 "MOV(8|16|32|64)ri",
626 "MOVSX(16|32|64)rr16",
627 "MOVSX(16|32|64)rr32",
628 "MOVSX(16|32|64)rr8",
629 "MOVZX(16|32|64)rr16",
630 "MOVZX(16|32|64)rr8",
631 "NEG(8|16|32|64)r",
632 "NOOP",
633 "NOT(8|16|32|64)r",
634 "OR(8|16|32|64)ri",
635 "OR(8|16|32|64)rr",
636 "OR(8|16|32|64)i",
637 "SAHF",
638 "SGDT64m",
639 "SIDT64m",
640 "SLDT64m",
641 "SMSW16m",
642 "STC",
643 "STRm",
644 "SUB(8|16|32|64)ri",
645 "SUB(8|16|32|64)rr",
646 "SUB(8|16|32|64)i",
647 "SYSCALL",
648 "TEST(8|16|32|64)rr",
649 "TEST(8|16|32|64)i",
650 "TEST(8|16|32|64)ri",
651 "XCHG(16|32|64)rr",
652 "XOR(8|16|32|64)ri",
653 "XOR(8|16|32|64)rr",
654 "XOR(8|16|32|64)i")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000655
656def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
657 let Latency = 1;
658 let NumMicroOps = 2;
659 let ResourceCycles = [1,1];
660}
Craig Topper5a69a002018-03-21 06:28:42 +0000661def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
662 "MMX_MOVD64from64rm",
663 "MMX_MOVD64mr",
664 "MMX_MOVNTQmr",
665 "MMX_MOVQ64mr",
666 "MOV(16|32|64)mr",
667 "MOV8mi",
668 "MOV8mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000669 "MOVNTI_64mr",
670 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000671 "ST_FP32m",
672 "ST_FP64m",
673 "ST_FP80m",
674 "VEXTRACTF128mr",
675 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000676 "(V?)MOVAPD(Y?)mr",
677 "(V?)MOVAPS(Y?)mr",
678 "(V?)MOVDQA(Y?)mr",
679 "(V?)MOVDQU(Y?)mr",
680 "(V?)MOVHPDmr",
681 "(V?)MOVHPSmr",
682 "(V?)MOVLPDmr",
683 "(V?)MOVLPSmr",
684 "(V?)MOVNTDQ(V?)mr",
685 "(V?)MOVNTPD(V?)mr",
686 "(V?)MOVNTPS(V?)mr",
687 "(V?)MOVPDI2DImr",
688 "(V?)MOVPQI2QImr",
689 "(V?)MOVPQIto64mr",
690 "(V?)MOVSDmr",
691 "(V?)MOVSSmr",
692 "(V?)MOVUPD(Y?)mr",
693 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000694
695def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
696 let Latency = 2;
697 let NumMicroOps = 2;
698 let ResourceCycles = [2];
699}
Craig Topper5a69a002018-03-21 06:28:42 +0000700def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
701 "BLENDVPSrr0",
702 "MMX_PINSRWrr",
703 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000704 "VBLENDVPD(Y?)rr",
705 "VBLENDVPS(Y?)rr",
706 "VPBLENDVB(Y?)rr",
707 "(V?)PINSRBrr",
708 "(V?)PINSRDrr",
709 "(V?)PINSRQrr",
710 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000711
712def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
713 let Latency = 2;
714 let NumMicroOps = 2;
715 let ResourceCycles = [2];
716}
717def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
718
719def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
720 let Latency = 2;
721 let NumMicroOps = 2;
722 let ResourceCycles = [2];
723}
Craig Topper5a69a002018-03-21 06:28:42 +0000724def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
725 "ROL(8|16|32|64)ri",
726 "ROR(8|16|32|64)r1",
727 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000728
729def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
730 let Latency = 2;
731 let NumMicroOps = 2;
732 let ResourceCycles = [2];
733}
Craig Topper5a69a002018-03-21 06:28:42 +0000734def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
735 "MFENCE",
736 "WAIT",
737 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000738
739def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
740 let Latency = 2;
741 let NumMicroOps = 2;
742 let ResourceCycles = [1,1];
743}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000744def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
745 "VCVTPH2PS(Y?)rr",
746 "(V?)CVTPS2PDrr",
747 "(V?)CVTSS2SDrr",
748 "(V?)EXTRACTPSrr",
749 "(V?)PEXTRBrr",
750 "(V?)PEXTRDrr",
751 "(V?)PEXTRQrr",
752 "(V?)PEXTRWrr",
753 "(V?)PSLLDrr",
754 "(V?)PSLLQrr",
755 "(V?)PSLLWrr",
756 "(V?)PSRADrr",
757 "(V?)PSRAWrr",
758 "(V?)PSRLDrr",
759 "(V?)PSRLQrr",
760 "(V?)PSRLWrr",
761 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000762
763def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
764 let Latency = 2;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
768def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
769
770def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
771 let Latency = 2;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
775def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
776
777def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
778 let Latency = 2;
779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
782def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
783
784def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
785 let Latency = 2;
786 let NumMicroOps = 2;
787 let ResourceCycles = [1,1];
788}
Craig Topper89310f52018-03-29 20:41:39 +0000789def: InstRW<[BWWriteResGroup19], (instregex "BSWAP(16|32|64)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000790
791def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
792 let Latency = 2;
793 let NumMicroOps = 2;
794 let ResourceCycles = [1,1];
795}
Craig Topper2d451e72018-03-18 08:38:06 +0000796def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000797def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000798def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
799 "ADC8ri",
800 "CMOV(A|BE)(16|32|64)rr",
801 "SBB8i8",
802 "SBB8ri",
803 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000804
805def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
806 let Latency = 2;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,1,1];
809}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000810def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
811 "(V?)PEXTRBmr",
812 "(V?)PEXTRDmr",
813 "(V?)PEXTRQmr",
814 "(V?)PEXTRWmr",
815 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000816
817def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
818 let Latency = 2;
819 let NumMicroOps = 3;
820 let ResourceCycles = [1,1,1];
821}
822def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
823
824def BWWriteResGroup23 : SchedWriteRes<[BWPort4,BWPort237,BWPort06]> {
825 let Latency = 2;
826 let NumMicroOps = 3;
827 let ResourceCycles = [1,1,1];
828}
Craig Topperf4cd9082018-01-19 05:47:32 +0000829def: InstRW<[BWWriteResGroup23], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000830
831def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
832 let Latency = 2;
833 let NumMicroOps = 3;
834 let ResourceCycles = [1,1,1];
835}
836def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
837
838def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
839 let Latency = 2;
840 let NumMicroOps = 3;
841 let ResourceCycles = [1,1,1];
842}
Craig Topper2d451e72018-03-18 08:38:06 +0000843def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000844def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
845 "PUSH64i8",
846 "STOSB",
847 "STOSL",
848 "STOSQ",
849 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000850
Gadi Haber323f2e12017-10-24 20:19:47 +0000851def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
852 let Latency = 3;
853 let NumMicroOps = 1;
854 let ResourceCycles = [1];
855}
Clement Courbet327fac42018-03-07 08:14:02 +0000856def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000857def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000858def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000859 "ADD_FST0r",
860 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000861 "MMX_CVTPI2PSirr",
862 "PDEP(32|64)rr",
863 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000864 "SHLD(16|32|64)rri8",
865 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000866 "SUBR_FPrST0",
867 "SUBR_FST0r",
868 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000869 "SUB_FPrST0",
870 "SUB_FST0r",
871 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000872 "(V?)ADDPD(Y?)rr",
873 "(V?)ADDPS(Y?)rr",
874 "(V?)ADDSDrr",
875 "(V?)ADDSSrr",
876 "(V?)ADDSUBPD(Y?)rr",
877 "(V?)ADDSUBPS(Y?)rr",
878 "(V?)CMPPD(Y?)rri",
879 "(V?)CMPPS(Y?)rri",
880 "(V?)CMPSDrr",
881 "(V?)CMPSSrr",
882 "(V?)COMISDrr",
883 "(V?)COMISSrr",
884 "(V?)CVTDQ2PS(Y?)rr",
885 "(V?)CVTPS2DQ(Y?)rr",
886 "(V?)CVTTPS2DQ(Y?)rr",
887 "(V?)MAX(C?)PD(Y?)rr",
888 "(V?)MAX(C?)PS(Y?)rr",
889 "(V?)MAX(C?)SDrr",
890 "(V?)MAX(C?)SSrr",
891 "(V?)MIN(C?)PD(Y?)rr",
892 "(V?)MIN(C?)PS(Y?)rr",
893 "(V?)MIN(C?)SDrr",
894 "(V?)MIN(C?)SSrr",
895 "(V?)SUBPD(Y?)rr",
896 "(V?)SUBPS(Y?)rr",
897 "(V?)SUBSDrr",
898 "(V?)SUBSSrr",
899 "(V?)UCOMISDrr",
900 "(V?)UCOMISSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000901
902def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
903 let Latency = 3;
904 let NumMicroOps = 2;
905 let ResourceCycles = [1,1];
906}
Clement Courbet327fac42018-03-07 08:14:02 +0000907def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
910 let Latency = 3;
911 let NumMicroOps = 1;
912 let ResourceCycles = [1];
913}
Craig Topper5a69a002018-03-21 06:28:42 +0000914def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
915 "VBROADCASTSSYrr",
916 "VEXTRACTF128rr",
917 "VEXTRACTI128rr",
918 "VINSERTF128rr",
919 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000920 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000921 "VPBROADCASTDYrr",
922 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000923 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000924 "VPERM2F128rr",
925 "VPERM2I128rr",
926 "VPERMDYrr",
927 "VPERMPDYri",
928 "VPERMPSYrr",
929 "VPERMQYri",
930 "VPMOVSXBDYrr",
931 "VPMOVSXBQYrr",
932 "VPMOVSXBWYrr",
933 "VPMOVSXDQYrr",
934 "VPMOVSXWDYrr",
935 "VPMOVSXWQYrr",
936 "VPMOVZXBDYrr",
937 "VPMOVZXBQYrr",
938 "VPMOVZXBWYrr",
939 "VPMOVZXDQYrr",
940 "VPMOVZXWDYrr",
941 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000942
943def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
944 let Latency = 3;
945 let NumMicroOps = 1;
946 let ResourceCycles = [1];
947}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000948def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
949 "(V?)MULPS(Y?)rr",
950 "(V?)MULSDrr",
951 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000952
953def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
954 let Latency = 3;
955 let NumMicroOps = 3;
956 let ResourceCycles = [3];
957}
Craig Topper5a69a002018-03-21 06:28:42 +0000958def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
959 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000960
961def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
962 let Latency = 3;
963 let NumMicroOps = 3;
964 let ResourceCycles = [2,1];
965}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000966def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
967 "VPSRAVD(Y?)rr",
968 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000969
970def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
971 let Latency = 3;
972 let NumMicroOps = 3;
973 let ResourceCycles = [2,1];
974}
Craig Topper5a69a002018-03-21 06:28:42 +0000975def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
976 "MMX_PHADDSWrr",
977 "MMX_PHADDWrr",
978 "MMX_PHSUBDrr",
979 "MMX_PHSUBSWrr",
980 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000981 "(V?)PHADDD(Y?)rr",
982 "(V?)PHADDSW(Y?)rr",
983 "(V?)PHADDW(Y?)rr",
984 "(V?)PHSUBD(Y?)rr",
985 "(V?)PHSUBSW(Y?)rr",
986 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000987
988def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
989 let Latency = 3;
990 let NumMicroOps = 3;
991 let ResourceCycles = [2,1];
992}
Craig Topper5a69a002018-03-21 06:28:42 +0000993def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
994 "MMX_PACKSSWBirr",
995 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000996
997def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
998 let Latency = 3;
999 let NumMicroOps = 3;
1000 let ResourceCycles = [1,2];
1001}
1002def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
1003
1004def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
1005 let Latency = 3;
1006 let NumMicroOps = 3;
1007 let ResourceCycles = [1,2];
1008}
Craig Topper5a69a002018-03-21 06:28:42 +00001009def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
1010 "RCL(8|16|32|64)ri",
1011 "RCR(8|16|32|64)r1",
1012 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001013
1014def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
1015 let Latency = 3;
1016 let NumMicroOps = 3;
1017 let ResourceCycles = [2,1];
1018}
Craig Topper5a69a002018-03-21 06:28:42 +00001019def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
1020 "ROR(8|16|32|64)rCL",
1021 "SAR(8|16|32|64)rCL",
1022 "SHL(8|16|32|64)rCL",
1023 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001024
1025def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
1026 let Latency = 3;
1027 let NumMicroOps = 4;
1028 let ResourceCycles = [1,1,1,1];
1029}
1030def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
1031
1032def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
1033 let Latency = 3;
1034 let NumMicroOps = 4;
1035 let ResourceCycles = [1,1,1,1];
1036}
Craig Topper5a69a002018-03-21 06:28:42 +00001037def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
1038 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001039
1040def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
1041 let Latency = 4;
1042 let NumMicroOps = 2;
1043 let ResourceCycles = [1,1];
1044}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001045def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
1046 "(V?)CVTSD2SIrr",
1047 "(V?)CVTSS2SI64rr",
1048 "(V?)CVTSS2SIrr",
1049 "(V?)CVTTSD2SI64rr",
1050 "(V?)CVTTSD2SIrr",
1051 "(V?)CVTTSS2SI64rr",
1052 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001053
1054def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1055 let Latency = 4;
1056 let NumMicroOps = 2;
1057 let ResourceCycles = [1,1];
1058}
Craig Topper5a69a002018-03-21 06:28:42 +00001059def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1060 "VPSLLDYrr",
1061 "VPSLLQYrr",
1062 "VPSLLWYrr",
1063 "VPSRADYrr",
1064 "VPSRAWYrr",
1065 "VPSRLDYrr",
1066 "VPSRLQYrr",
1067 "VPSRLWYrr",
1068 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001069
1070def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1071 let Latency = 4;
1072 let NumMicroOps = 2;
1073 let ResourceCycles = [1,1];
1074}
1075def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1076
1077def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1078 let Latency = 4;
1079 let NumMicroOps = 2;
1080 let ResourceCycles = [1,1];
1081}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001082def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001083def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001084 "MMX_CVTPI2PDirr",
1085 "MMX_CVTPS2PIirr",
1086 "MMX_CVTTPD2PIirr",
1087 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001088 "(V?)CVTDQ2PDrr",
1089 "(V?)CVTPD2DQrr",
1090 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001091 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001092 "(V?)CVTSD2SSrr",
1093 "(V?)CVTSI642SDrr",
1094 "(V?)CVTSI2SDrr",
1095 "(V?)CVTSI2SSrr",
1096 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001097
1098def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1099 let Latency = 4;
1100 let NumMicroOps = 4;
1101}
Craig Topper5a69a002018-03-21 06:28:42 +00001102def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001103
1104def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1105 let Latency = 4;
1106 let NumMicroOps = 3;
1107 let ResourceCycles = [1,1,1];
1108}
1109def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1110
1111def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1112 let Latency = 4;
1113 let NumMicroOps = 3;
1114 let ResourceCycles = [1,1,1];
1115}
Craig Topper5a69a002018-03-21 06:28:42 +00001116def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1117 "ISTT_FP32m",
1118 "ISTT_FP64m",
1119 "IST_F16m",
1120 "IST_F32m",
1121 "IST_FP16m",
1122 "IST_FP32m",
1123 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001124 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001125
1126def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1127 let Latency = 4;
1128 let NumMicroOps = 4;
1129 let ResourceCycles = [4];
1130}
1131def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1132
1133def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1134 let Latency = 4;
1135 let NumMicroOps = 4;
1136 let ResourceCycles = [1,3];
1137}
1138def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1139
1140def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1141 let Latency = 5;
1142 let NumMicroOps = 1;
1143 let ResourceCycles = [1];
1144}
Craig Topper5a69a002018-03-21 06:28:42 +00001145def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1146 "MMX_PMADDWDirr",
1147 "MMX_PMULHRSWrr",
1148 "MMX_PMULHUWirr",
1149 "MMX_PMULHWirr",
1150 "MMX_PMULLWirr",
1151 "MMX_PMULUDQirr",
1152 "MMX_PSADBWirr",
1153 "MUL_FPrST0",
1154 "MUL_FST0r",
1155 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001156 "(V?)PCMPGTQ(Y?)rr",
1157 "(V?)PHMINPOSUWrr",
1158 "(V?)PMADDUBSW(Y?)rr",
1159 "(V?)PMADDWD(Y?)rr",
1160 "(V?)PMULDQ(Y?)rr",
1161 "(V?)PMULHRSW(Y?)rr",
1162 "(V?)PMULHUW(Y?)rr",
1163 "(V?)PMULHW(Y?)rr",
1164 "(V?)PMULLW(Y?)rr",
1165 "(V?)PMULUDQ(Y?)rr",
1166 "(V?)PSADBW(Y?)rr",
1167 "(V?)RCPPSr",
1168 "(V?)RCPSSr",
1169 "(V?)RSQRTPSr",
1170 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001171
1172def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1173 let Latency = 5;
1174 let NumMicroOps = 1;
1175 let ResourceCycles = [1];
1176}
Craig Topperf82867c2017-12-13 23:11:30 +00001177def: InstRW<[BWWriteResGroup48],
1178 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1179 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001180
1181def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1182 let Latency = 5;
1183 let NumMicroOps = 1;
1184 let ResourceCycles = [1];
1185}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001186def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001187 "MMX_MOVD64to64rm",
1188 "MMX_MOVQ64rm",
1189 "MOV(16|32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001190 "MOVSX(16|32|64)rm16",
1191 "MOVSX(16|32|64)rm32",
1192 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001193 "MOVZX(16|32|64)rm16",
1194 "MOVZX(16|32|64)rm8",
1195 "PREFETCHNTA",
1196 "PREFETCHT0",
1197 "PREFETCHT1",
1198 "PREFETCHT2",
1199 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001200 "(V?)LDDQUrm",
1201 "(V?)MOV64toPQIrm",
1202 "(V?)MOVAPDrm",
1203 "(V?)MOVAPSrm",
1204 "(V?)MOVDDUPrm",
1205 "(V?)MOVDI2PDIrm",
1206 "(V?)MOVDQArm",
1207 "(V?)MOVDQUrm",
1208 "(V?)MOVNTDQArm",
1209 "(V?)MOVQI2PQIrm",
1210 "(V?)MOVSDrm",
1211 "(V?)MOVSHDUPrm",
1212 "(V?)MOVSLDUPrm",
1213 "(V?)MOVSSrm",
1214 "(V?)MOVUPDrm",
1215 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001216 "VPBROADCASTDrm",
1217 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001218
1219def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1220 let Latency = 5;
1221 let NumMicroOps = 3;
1222 let ResourceCycles = [1,2];
1223}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001224def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1225 "(V?)HADDPD(Y?)rr",
1226 "(V?)HADDPS(Y?)rr",
1227 "(V?)HSUBPD(Y?)rr",
1228 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001229
1230def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1231 let Latency = 5;
1232 let NumMicroOps = 3;
1233 let ResourceCycles = [1,1,1];
1234}
1235def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1236
1237def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001238 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001239 let NumMicroOps = 3;
1240 let ResourceCycles = [1,1,1];
1241}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001242def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001243
1244def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1245 let Latency = 5;
1246 let NumMicroOps = 4;
1247 let ResourceCycles = [1,1,1,1];
1248}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001249def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1250 "VMASKMOVPS(Y?)mr",
1251 "VPMASKMOVD(Y?)mr",
1252 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001253
1254def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1255 let Latency = 5;
1256 let NumMicroOps = 5;
1257 let ResourceCycles = [1,4];
1258}
1259def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1260
1261def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1262 let Latency = 5;
1263 let NumMicroOps = 5;
1264 let ResourceCycles = [1,4];
1265}
1266def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1267
1268def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1269 let Latency = 5;
1270 let NumMicroOps = 5;
1271 let ResourceCycles = [2,3];
1272}
Craig Topper5a69a002018-03-21 06:28:42 +00001273def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001274
1275def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1276 let Latency = 5;
1277 let NumMicroOps = 6;
1278 let ResourceCycles = [1,1,4];
1279}
Craig Topper5a69a002018-03-21 06:28:42 +00001280def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001281
1282def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1283 let Latency = 6;
1284 let NumMicroOps = 1;
1285 let ResourceCycles = [1];
1286}
Craig Topper5a69a002018-03-21 06:28:42 +00001287def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1288 "LD_F64m",
1289 "LD_F80m",
1290 "VBROADCASTF128",
1291 "VBROADCASTI128",
1292 "VBROADCASTSDYrm",
1293 "VBROADCASTSSYrm",
1294 "VLDDQUYrm",
1295 "VMOVAPDYrm",
1296 "VMOVAPSYrm",
1297 "VMOVDDUPYrm",
1298 "VMOVDQAYrm",
1299 "VMOVDQUYrm",
1300 "VMOVNTDQAYrm",
1301 "VMOVSHDUPYrm",
1302 "VMOVSLDUPYrm",
1303 "VMOVUPDYrm",
1304 "VMOVUPSYrm",
1305 "VPBROADCASTDYrm",
1306 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001307 "(V?)ROUNDPD(Y?)r",
1308 "(V?)ROUNDPS(Y?)r",
1309 "(V?)ROUNDSDr",
1310 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001311
1312def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1313 let Latency = 6;
1314 let NumMicroOps = 2;
1315 let ResourceCycles = [1,1];
1316}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001317def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001318 "MMX_PSLLQrm",
1319 "MMX_PSLLWrm",
1320 "MMX_PSRADrm",
1321 "MMX_PSRAWrm",
1322 "MMX_PSRLDrm",
1323 "MMX_PSRLQrm",
1324 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001325 "VCVTPH2PS(Y?)rm",
1326 "(V?)CVTPS2PDrm",
1327 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001328 "VPSLLVQrm",
1329 "VPSRLVQrm",
1330 "VTESTPDrm",
1331 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001332
1333def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1334 let Latency = 6;
1335 let NumMicroOps = 2;
1336 let ResourceCycles = [1,1];
1337}
Craig Topper5a69a002018-03-21 06:28:42 +00001338def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1339 "VCVTPD2DQYrr",
1340 "VCVTPD2PSYrr",
1341 "VCVTPS2PHYrr",
1342 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001343
1344def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1345 let Latency = 6;
1346 let NumMicroOps = 2;
1347 let ResourceCycles = [1,1];
1348}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001349def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001350 "MMX_PINSRWrm",
1351 "MMX_PSHUFBrm",
1352 "MMX_PSHUFWmi",
1353 "MMX_PUNPCKHBWirm",
1354 "MMX_PUNPCKHDQirm",
1355 "MMX_PUNPCKHWDirm",
1356 "MMX_PUNPCKLBWirm",
1357 "MMX_PUNPCKLDQirm",
1358 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001359 "(V?)ANDNPDrm",
1360 "(V?)ANDNPSrm",
1361 "(V?)ANDPDrm",
1362 "(V?)ANDPSrm",
1363 "(V?)INSERTPSrm",
1364 "(V?)MOVHPDrm",
1365 "(V?)MOVHPSrm",
1366 "(V?)MOVLPDrm",
1367 "(V?)MOVLPSrm",
1368 "(V?)ORPDrm",
1369 "(V?)ORPSrm",
1370 "(V?)PACKSSDWrm",
1371 "(V?)PACKSSWBrm",
1372 "(V?)PACKUSDWrm",
1373 "(V?)PACKUSWBrm",
1374 "(V?)PALIGNRrmi",
1375 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001376 "VPERMILPDmi",
1377 "VPERMILPDrm",
1378 "VPERMILPSmi",
1379 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001380 "(V?)PINSRBrm",
1381 "(V?)PINSRDrm",
1382 "(V?)PINSRQrm",
1383 "(V?)PINSRWrm",
1384 "(V?)PMOVSXBDrm",
1385 "(V?)PMOVSXBQrm",
1386 "(V?)PMOVSXBWrm",
1387 "(V?)PMOVSXDQrm",
1388 "(V?)PMOVSXWDrm",
1389 "(V?)PMOVSXWQrm",
1390 "(V?)PMOVZXBDrm",
1391 "(V?)PMOVZXBQrm",
1392 "(V?)PMOVZXBWrm",
1393 "(V?)PMOVZXDQrm",
1394 "(V?)PMOVZXWDrm",
1395 "(V?)PMOVZXWQrm",
1396 "(V?)PSHUFBrm",
1397 "(V?)PSHUFDmi",
1398 "(V?)PSHUFHWmi",
1399 "(V?)PSHUFLWmi",
1400 "(V?)PUNPCKHBWrm",
1401 "(V?)PUNPCKHDQrm",
1402 "(V?)PUNPCKHQDQrm",
1403 "(V?)PUNPCKHWDrm",
1404 "(V?)PUNPCKLBWrm",
1405 "(V?)PUNPCKLDQrm",
1406 "(V?)PUNPCKLQDQrm",
1407 "(V?)PUNPCKLWDrm",
1408 "(V?)SHUFPDrmi",
1409 "(V?)SHUFPSrmi",
1410 "(V?)UNPCKHPDrm",
1411 "(V?)UNPCKHPSrm",
1412 "(V?)UNPCKLPDrm",
1413 "(V?)UNPCKLPSrm",
1414 "(V?)XORPDrm",
1415 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001416
1417def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1418 let Latency = 6;
1419 let NumMicroOps = 2;
1420 let ResourceCycles = [1,1];
1421}
Craig Topper5a69a002018-03-21 06:28:42 +00001422def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1423 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001424
1425def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1426 let Latency = 6;
1427 let NumMicroOps = 2;
1428 let ResourceCycles = [1,1];
1429}
Craig Topper5a69a002018-03-21 06:28:42 +00001430def: InstRW<[BWWriteResGroup63], (instregex "ADC(8|16|32|64)rm",
1431 "ADCX(32|64)rm",
1432 "ADOX(32|64)rm",
1433 "BT(16|32|64)mi8",
1434 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1435 "RORX(32|64)mi",
1436 "SARX(32|64)rm",
1437 "SBB(8|16|32|64)rm",
1438 "SHLX(32|64)rm",
1439 "SHRX(32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001440
1441def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1442 let Latency = 6;
1443 let NumMicroOps = 2;
1444 let ResourceCycles = [1,1];
1445}
Craig Topper5a69a002018-03-21 06:28:42 +00001446def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1447 "BLSI(32|64)rm",
1448 "BLSMSK(32|64)rm",
1449 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001450 "MMX_PABSBrm",
1451 "MMX_PABSDrm",
1452 "MMX_PABSWrm",
1453 "MMX_PADDBirm",
1454 "MMX_PADDDirm",
1455 "MMX_PADDQirm",
1456 "MMX_PADDSBirm",
1457 "MMX_PADDSWirm",
1458 "MMX_PADDUSBirm",
1459 "MMX_PADDUSWirm",
1460 "MMX_PADDWirm",
1461 "MMX_PAVGBirm",
1462 "MMX_PAVGWirm",
1463 "MMX_PCMPEQBirm",
1464 "MMX_PCMPEQDirm",
1465 "MMX_PCMPEQWirm",
1466 "MMX_PCMPGTBirm",
1467 "MMX_PCMPGTDirm",
1468 "MMX_PCMPGTWirm",
1469 "MMX_PMAXSWirm",
1470 "MMX_PMAXUBirm",
1471 "MMX_PMINSWirm",
1472 "MMX_PMINUBirm",
1473 "MMX_PSIGNBrm",
1474 "MMX_PSIGNDrm",
1475 "MMX_PSIGNWrm",
1476 "MMX_PSUBBirm",
1477 "MMX_PSUBDirm",
1478 "MMX_PSUBQirm",
1479 "MMX_PSUBSBirm",
1480 "MMX_PSUBSWirm",
1481 "MMX_PSUBUSBirm",
1482 "MMX_PSUBUSWirm",
1483 "MMX_PSUBWirm",
1484 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001485 "(V?)PABSBrm",
1486 "(V?)PABSDrm",
1487 "(V?)PABSWrm",
1488 "(V?)PADDBrm",
1489 "(V?)PADDDrm",
1490 "(V?)PADDQrm",
1491 "(V?)PADDSBrm",
1492 "(V?)PADDSWrm",
1493 "(V?)PADDUSBrm",
1494 "(V?)PADDUSWrm",
1495 "(V?)PADDWrm",
1496 "(V?)PAVGBrm",
1497 "(V?)PAVGWrm",
1498 "(V?)PCMPEQBrm",
1499 "(V?)PCMPEQDrm",
1500 "(V?)PCMPEQQrm",
1501 "(V?)PCMPEQWrm",
1502 "(V?)PCMPGTBrm",
1503 "(V?)PCMPGTDrm",
1504 "(V?)PCMPGTWrm",
1505 "(V?)PMAXSBrm",
1506 "(V?)PMAXSDrm",
1507 "(V?)PMAXSWrm",
1508 "(V?)PMAXUBrm",
1509 "(V?)PMAXUDrm",
1510 "(V?)PMAXUWrm",
1511 "(V?)PMINSBrm",
1512 "(V?)PMINSDrm",
1513 "(V?)PMINSWrm",
1514 "(V?)PMINUBrm",
1515 "(V?)PMINUDrm",
1516 "(V?)PMINUWrm",
1517 "(V?)PSIGNBrm",
1518 "(V?)PSIGNDrm",
1519 "(V?)PSIGNWrm",
1520 "(V?)PSUBBrm",
1521 "(V?)PSUBDrm",
1522 "(V?)PSUBQrm",
1523 "(V?)PSUBSBrm",
1524 "(V?)PSUBSWrm",
1525 "(V?)PSUBUSBrm",
1526 "(V?)PSUBUSWrm",
1527 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001528
1529def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1530 let Latency = 6;
1531 let NumMicroOps = 2;
1532 let ResourceCycles = [1,1];
1533}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001534def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001535 "MMX_PANDirm",
1536 "MMX_PORirm",
1537 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001538 "(V?)BLENDPDrmi",
1539 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001540 "VINSERTF128rm",
1541 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001542 "(V?)PANDNrm",
1543 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001544 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001545 "(V?)PORrm",
1546 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001547
1548def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1549 let Latency = 6;
1550 let NumMicroOps = 2;
1551 let ResourceCycles = [1,1];
1552}
Craig Topper2d451e72018-03-18 08:38:06 +00001553def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001554def: InstRW<[BWWriteResGroup66], (instregex "ADD(8|16|32|64)rm",
1555 "AND(8|16|32|64)rm",
1556 "CMP(8|16|32|64)mi",
1557 "CMP(8|16|32|64)mr",
1558 "CMP(8|16|32|64)rm",
1559 "OR(8|16|32|64)rm",
1560 "POP(16|32|64)rmr",
1561 "SUB(8|16|32|64)rm",
1562 "TEST(8|16|32|64)mr",
1563 "TEST(8|16|32|64)mi",
1564 "XOR(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001565
1566def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1567 let Latency = 6;
1568 let NumMicroOps = 4;
1569 let ResourceCycles = [1,1,2];
1570}
Craig Topper5a69a002018-03-21 06:28:42 +00001571def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1572 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001573
1574def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1575 let Latency = 6;
1576 let NumMicroOps = 4;
1577 let ResourceCycles = [1,1,1,1];
1578}
1579def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1580
1581def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1582 let Latency = 6;
1583 let NumMicroOps = 4;
1584 let ResourceCycles = [1,1,1,1];
1585}
Craig Topper5a69a002018-03-21 06:28:42 +00001586def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1587 "BTR(16|32|64)mi8",
1588 "BTS(16|32|64)mi8",
1589 "SAR(8|16|32|64)m1",
1590 "SAR(8|16|32|64)mi",
1591 "SHL(8|16|32|64)m1",
1592 "SHL(8|16|32|64)mi",
1593 "SHR(8|16|32|64)m1",
1594 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001595
1596def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1597 let Latency = 6;
1598 let NumMicroOps = 4;
1599 let ResourceCycles = [1,1,1,1];
1600}
Craig Topper5a69a002018-03-21 06:28:42 +00001601def: InstRW<[BWWriteResGroup70], (instregex "ADD(8|16|32|64)mi",
1602 "ADD(8|16|32|64)mr",
1603 "AND(8|16|32|64)mi",
1604 "AND(8|16|32|64)mr",
1605 "DEC(8|16|32|64)m",
1606 "INC(8|16|32|64)m",
1607 "NEG(8|16|32|64)m",
1608 "NOT(8|16|32|64)m",
1609 "OR(8|16|32|64)mi",
1610 "OR(8|16|32|64)mr",
1611 "POP(16|32|64)rmm",
1612 "PUSH(16|32|64)rmm",
1613 "SUB(8|16|32|64)mi",
1614 "SUB(8|16|32|64)mr",
1615 "XOR(8|16|32|64)mi",
1616 "XOR(8|16|32|64)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001617
1618def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1619 let Latency = 6;
1620 let NumMicroOps = 6;
1621 let ResourceCycles = [1,5];
1622}
1623def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1624
Gadi Haber323f2e12017-10-24 20:19:47 +00001625def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1626 let Latency = 7;
1627 let NumMicroOps = 2;
1628 let ResourceCycles = [1,1];
1629}
Craig Topper5a69a002018-03-21 06:28:42 +00001630def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1631 "VPSLLQYrm",
1632 "VPSLLVQYrm",
1633 "VPSLLWYrm",
1634 "VPSRADYrm",
1635 "VPSRAWYrm",
1636 "VPSRLDYrm",
1637 "VPSRLQYrm",
1638 "VPSRLVQYrm",
1639 "VPSRLWYrm",
1640 "VTESTPDYrm",
1641 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001642
1643def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1644 let Latency = 7;
1645 let NumMicroOps = 2;
1646 let ResourceCycles = [1,1];
1647}
Craig Topper5a69a002018-03-21 06:28:42 +00001648def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1649 "FCOM64m",
1650 "FCOMP32m",
1651 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001652
1653def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1654 let Latency = 7;
1655 let NumMicroOps = 2;
1656 let ResourceCycles = [1,1];
1657}
Craig Topper5a69a002018-03-21 06:28:42 +00001658def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1659 "VANDNPSYrm",
1660 "VANDPDYrm",
1661 "VANDPSYrm",
1662 "VORPDYrm",
1663 "VORPSYrm",
1664 "VPACKSSDWYrm",
1665 "VPACKSSWBYrm",
1666 "VPACKUSDWYrm",
1667 "VPACKUSWBYrm",
1668 "VPALIGNRYrmi",
1669 "VPBLENDWYrmi",
1670 "VPERMILPDYmi",
1671 "VPERMILPDYrm",
1672 "VPERMILPSYmi",
1673 "VPERMILPSYrm",
1674 "VPSHUFBYrm",
1675 "VPSHUFDYmi",
1676 "VPSHUFHWYmi",
1677 "VPSHUFLWYmi",
1678 "VPUNPCKHBWYrm",
1679 "VPUNPCKHDQYrm",
1680 "VPUNPCKHQDQYrm",
1681 "VPUNPCKHWDYrm",
1682 "VPUNPCKLBWYrm",
1683 "VPUNPCKLDQYrm",
1684 "VPUNPCKLQDQYrm",
1685 "VPUNPCKLWDYrm",
1686 "VSHUFPDYrmi",
1687 "VSHUFPSYrmi",
1688 "VUNPCKHPDYrm",
1689 "VUNPCKHPSYrm",
1690 "VUNPCKLPDYrm",
1691 "VUNPCKLPSYrm",
1692 "VXORPDYrm",
1693 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001694
1695def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1696 let Latency = 7;
1697 let NumMicroOps = 2;
1698 let ResourceCycles = [1,1];
1699}
Craig Topper5a69a002018-03-21 06:28:42 +00001700def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1701 "VPABSDYrm",
1702 "VPABSWYrm",
1703 "VPADDBYrm",
1704 "VPADDDYrm",
1705 "VPADDQYrm",
1706 "VPADDSBYrm",
1707 "VPADDSWYrm",
1708 "VPADDUSBYrm",
1709 "VPADDUSWYrm",
1710 "VPADDWYrm",
1711 "VPAVGBYrm",
1712 "VPAVGWYrm",
1713 "VPCMPEQBYrm",
1714 "VPCMPEQDYrm",
1715 "VPCMPEQQYrm",
1716 "VPCMPEQWYrm",
1717 "VPCMPGTBYrm",
1718 "VPCMPGTDYrm",
1719 "VPCMPGTWYrm",
1720 "VPMAXSBYrm",
1721 "VPMAXSDYrm",
1722 "VPMAXSWYrm",
1723 "VPMAXUBYrm",
1724 "VPMAXUDYrm",
1725 "VPMAXUWYrm",
1726 "VPMINSBYrm",
1727 "VPMINSDYrm",
1728 "VPMINSWYrm",
1729 "VPMINUBYrm",
1730 "VPMINUDYrm",
1731 "VPMINUWYrm",
1732 "VPSIGNBYrm",
1733 "VPSIGNDYrm",
1734 "VPSIGNWYrm",
1735 "VPSUBBYrm",
1736 "VPSUBDYrm",
1737 "VPSUBQYrm",
1738 "VPSUBSBYrm",
1739 "VPSUBSWYrm",
1740 "VPSUBUSBYrm",
1741 "VPSUBUSWYrm",
1742 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001743
1744def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1745 let Latency = 7;
1746 let NumMicroOps = 2;
1747 let ResourceCycles = [1,1];
1748}
Craig Topper5a69a002018-03-21 06:28:42 +00001749def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1750 "VBLENDPSYrmi",
1751 "VPANDNYrm",
1752 "VPANDYrm",
1753 "VPBLENDDYrmi",
1754 "VPORYrm",
1755 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001756
1757def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1758 let Latency = 7;
1759 let NumMicroOps = 3;
1760 let ResourceCycles = [1,2];
1761}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001762def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001763
1764def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1765 let Latency = 7;
1766 let NumMicroOps = 3;
1767 let ResourceCycles = [2,1];
1768}
Craig Topper5a69a002018-03-21 06:28:42 +00001769def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1770 "BLENDVPSrm0",
1771 "MMX_PACKSSDWirm",
1772 "MMX_PACKSSWBirm",
1773 "MMX_PACKUSWBirm",
1774 "PBLENDVBrm0",
1775 "VBLENDVPDrm",
1776 "VBLENDVPSrm",
1777 "VMASKMOVPDrm",
1778 "VMASKMOVPSrm",
1779 "VPBLENDVBrm",
1780 "VPMASKMOVDrm",
1781 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001782
1783def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1784 let Latency = 7;
1785 let NumMicroOps = 3;
1786 let ResourceCycles = [1,2];
1787}
Craig Topper5a69a002018-03-21 06:28:42 +00001788def: InstRW<[BWWriteResGroup80], (instregex "LEAVE64",
1789 "SCASB",
1790 "SCASL",
1791 "SCASQ",
1792 "SCASW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001793
1794def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1795 let Latency = 7;
1796 let NumMicroOps = 3;
1797 let ResourceCycles = [1,1,1];
1798}
Craig Topper5a69a002018-03-21 06:28:42 +00001799def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1800 "PSLLQrm",
1801 "PSLLWrm",
1802 "PSRADrm",
1803 "PSRAWrm",
1804 "PSRLDrm",
1805 "PSRLQrm",
1806 "PSRLWrm",
1807 "PTESTrm",
1808 "VPSLLDrm",
1809 "VPSLLQrm",
1810 "VPSLLWrm",
1811 "VPSRADrm",
1812 "VPSRAWrm",
1813 "VPSRLDrm",
1814 "VPSRLQrm",
1815 "VPSRLWrm",
1816 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001817
1818def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1819 let Latency = 7;
1820 let NumMicroOps = 3;
1821 let ResourceCycles = [1,1,1];
1822}
1823def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1824
1825def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1826 let Latency = 7;
1827 let NumMicroOps = 3;
1828 let ResourceCycles = [1,1,1];
1829}
Craig Topper5a69a002018-03-21 06:28:42 +00001830def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001831
1832def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1833 let Latency = 7;
1834 let NumMicroOps = 3;
1835 let ResourceCycles = [1,1,1];
1836}
Craig Topper5a69a002018-03-21 06:28:42 +00001837def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1838 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001839
Gadi Haber323f2e12017-10-24 20:19:47 +00001840def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1841 let Latency = 7;
1842 let NumMicroOps = 3;
1843 let ResourceCycles = [1,1,1];
1844}
Craig Topperf4cd9082018-01-19 05:47:32 +00001845def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
1847def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1848 let Latency = 7;
1849 let NumMicroOps = 5;
1850 let ResourceCycles = [1,1,1,2];
1851}
Craig Topper5a69a002018-03-21 06:28:42 +00001852def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1853 "ROL(8|16|32|64)mi",
1854 "ROR(8|16|32|64)m1",
1855 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001856
1857def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1858 let Latency = 7;
1859 let NumMicroOps = 5;
1860 let ResourceCycles = [1,1,1,2];
1861}
Craig Topper5a69a002018-03-21 06:28:42 +00001862def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001863
1864def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1865 let Latency = 7;
1866 let NumMicroOps = 5;
1867 let ResourceCycles = [1,1,1,1,1];
1868}
Craig Topper5a69a002018-03-21 06:28:42 +00001869def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1870 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001871
1872def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1873 let Latency = 7;
1874 let NumMicroOps = 7;
1875 let ResourceCycles = [2,2,1,2];
1876}
Craig Topper2d451e72018-03-18 08:38:06 +00001877def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001878
1879def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1880 let Latency = 8;
1881 let NumMicroOps = 2;
1882 let ResourceCycles = [1,1];
1883}
Craig Topperb369cdb2018-01-25 06:57:42 +00001884def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001885def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001886def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001887 "MMX_CVTPS2PIirm",
1888 "MMX_CVTTPS2PIirm",
1889 "PDEP(32|64)rm",
1890 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001891 "(V?)ADDPDrm",
1892 "(V?)ADDPSrm",
1893 "(V?)ADDSDrm",
1894 "(V?)ADDSSrm",
1895 "(V?)ADDSUBPDrm",
1896 "(V?)ADDSUBPSrm",
1897 "(V?)CMPPDrmi",
1898 "(V?)CMPPSrmi",
1899 "(V?)CMPSDrm",
1900 "(V?)CMPSSrm",
1901 "(V?)COMISDrm",
1902 "(V?)COMISSrm",
1903 "(V?)CVTDQ2PSrm",
1904 "(V?)CVTPS2DQrm",
1905 "(V?)CVTTPS2DQrm",
1906 "(V?)MAX(C?)PDrm",
1907 "(V?)MAX(C?)PSrm",
1908 "(V?)MAX(C?)SDrm",
1909 "(V?)MAX(C?)SSrm",
1910 "(V?)MIN(C?)PDrm",
1911 "(V?)MIN(C?)PSrm",
1912 "(V?)MIN(C?)SDrm",
1913 "(V?)MIN(C?)SSrm",
1914 "(V?)SUBPDrm",
1915 "(V?)SUBPSrm",
1916 "(V?)SUBSDrm",
1917 "(V?)SUBSSrm",
1918 "(V?)UCOMISDrm",
1919 "(V?)UCOMISSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001920
1921def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1922 let Latency = 8;
1923 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001924 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001925}
Craig Topperb369cdb2018-01-25 06:57:42 +00001926def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001927
1928def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1929 let Latency = 8;
1930 let NumMicroOps = 5;
1931}
Craig Topper5a69a002018-03-21 06:28:42 +00001932def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001933
Gadi Haber323f2e12017-10-24 20:19:47 +00001934def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1935 let Latency = 8;
1936 let NumMicroOps = 2;
1937 let ResourceCycles = [1,1];
1938}
Craig Topper5a69a002018-03-21 06:28:42 +00001939def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1940 "VPMOVSXBQYrm",
1941 "VPMOVSXBWYrm",
1942 "VPMOVSXDQYrm",
1943 "VPMOVSXWDYrm",
1944 "VPMOVSXWQYrm",
1945 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001946
1947def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1948 let Latency = 8;
1949 let NumMicroOps = 2;
1950 let ResourceCycles = [1,1];
1951}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001952def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1953 "(V?)MULPSrm",
1954 "(V?)MULSDrm",
1955 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001956
1957def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1958 let Latency = 8;
1959 let NumMicroOps = 3;
1960 let ResourceCycles = [2,1];
1961}
Craig Topper5a69a002018-03-21 06:28:42 +00001962def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1963 "VBLENDVPSYrm",
1964 "VMASKMOVPDYrm",
1965 "VMASKMOVPSYrm",
1966 "VPBLENDVBYrm",
1967 "VPMASKMOVDYrm",
1968 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001969
1970def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1971 let Latency = 8;
1972 let NumMicroOps = 4;
1973 let ResourceCycles = [2,1,1];
1974}
Craig Topper5a69a002018-03-21 06:28:42 +00001975def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1976 "VPSRAVDrm",
1977 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001978
1979def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1980 let Latency = 8;
1981 let NumMicroOps = 4;
1982 let ResourceCycles = [2,1,1];
1983}
Craig Topper5a69a002018-03-21 06:28:42 +00001984def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1985 "MMX_PHADDSWrm",
1986 "MMX_PHADDWrm",
1987 "MMX_PHSUBDrm",
1988 "MMX_PHSUBSWrm",
1989 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001990 "(V?)PHADDDrm",
1991 "(V?)PHADDSWrm",
1992 "(V?)PHADDWrm",
1993 "(V?)PHSUBDrm",
1994 "(V?)PHSUBSWrm",
1995 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001996
1997def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1998 let Latency = 8;
1999 let NumMicroOps = 5;
2000 let ResourceCycles = [1,1,1,2];
2001}
Craig Topper5a69a002018-03-21 06:28:42 +00002002def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
2003 "RCL(8|16|32|64)mi",
2004 "RCR(8|16|32|64)m1",
2005 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002006
2007def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
2008 let Latency = 8;
2009 let NumMicroOps = 5;
2010 let ResourceCycles = [1,1,2,1];
2011}
Craig Topper13a16502018-03-19 00:56:09 +00002012def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002013
2014def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
2015 let Latency = 8;
2016 let NumMicroOps = 6;
2017 let ResourceCycles = [1,1,1,3];
2018}
Craig Topper9f834812018-04-01 21:54:24 +00002019def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002020
2021def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2022 let Latency = 8;
2023 let NumMicroOps = 6;
2024 let ResourceCycles = [1,1,1,2,1];
2025}
Craig Topper9f834812018-04-01 21:54:24 +00002026def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
2027 "ADC(8|16|32|64)mr",
Craig Topper5a69a002018-03-21 06:28:42 +00002028 "CMPXCHG(8|16|32|64)rm",
2029 "ROL(8|16|32|64)mCL",
2030 "SAR(8|16|32|64)mCL",
2031 "SBB(8|16|32|64)mi",
2032 "SBB(8|16|32|64)mr",
2033 "SHL(8|16|32|64)mCL",
2034 "SHR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
2036def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
2037 let Latency = 9;
2038 let NumMicroOps = 2;
2039 let ResourceCycles = [1,1];
2040}
Craig Topper5a69a002018-03-21 06:28:42 +00002041def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
2042 "ADD_F64m",
2043 "ILD_F16m",
2044 "ILD_F32m",
2045 "ILD_F64m",
2046 "SUBR_F32m",
2047 "SUBR_F64m",
2048 "SUB_F32m",
2049 "SUB_F64m",
2050 "VADDPDYrm",
2051 "VADDPSYrm",
2052 "VADDSUBPDYrm",
2053 "VADDSUBPSYrm",
2054 "VCMPPDYrmi",
2055 "VCMPPSYrmi",
2056 "VCVTDQ2PSYrm",
2057 "VCVTPS2DQYrm",
2058 "VCVTTPS2DQYrm",
2059 "VMAX(C?)PDYrm",
2060 "VMAX(C?)PSYrm",
2061 "VMIN(C?)PDYrm",
2062 "VMIN(C?)PSYrm",
2063 "VSUBPDYrm",
2064 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002065
2066def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
2067 let Latency = 9;
2068 let NumMicroOps = 2;
2069 let ResourceCycles = [1,1];
2070}
Craig Topper5a69a002018-03-21 06:28:42 +00002071def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
2072 "VPERM2I128rm",
2073 "VPERMDYrm",
2074 "VPERMPDYmi",
2075 "VPERMPSYrm",
2076 "VPERMQYmi",
2077 "VPMOVZXBDYrm",
2078 "VPMOVZXBQYrm",
2079 "VPMOVZXBWYrm",
2080 "VPMOVZXDQYrm",
2081 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002082
2083def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
2084 let Latency = 9;
2085 let NumMicroOps = 2;
2086 let ResourceCycles = [1,1];
2087}
Craig Topper5a69a002018-03-21 06:28:42 +00002088def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
2089 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002090
2091def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2092 let Latency = 9;
2093 let NumMicroOps = 3;
2094 let ResourceCycles = [1,1,1];
2095}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002096def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002097
2098def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2099 let Latency = 9;
2100 let NumMicroOps = 3;
2101 let ResourceCycles = [1,1,1];
2102}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002103def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2104 "(V?)CVTSD2SIrm",
2105 "(V?)CVTSS2SI64rm",
2106 "(V?)CVTSS2SIrm",
2107 "(V?)CVTTSD2SI64rm",
2108 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002109 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002110 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002111
2112def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2113 let Latency = 9;
2114 let NumMicroOps = 3;
2115 let ResourceCycles = [1,1,1];
2116}
2117def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2118
2119def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2120 let Latency = 9;
2121 let NumMicroOps = 3;
2122 let ResourceCycles = [1,1,1];
2123}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002124def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002125def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002126 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002127 "CVTTPD2DQrm",
2128 "MMX_CVTPD2PIirm",
2129 "MMX_CVTPI2PDirm",
2130 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002131 "(V?)CVTDQ2PDrm",
2132 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002133
2134def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2135 let Latency = 9;
2136 let NumMicroOps = 3;
2137 let ResourceCycles = [1,1,1];
2138}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002139def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2140 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002141
2142def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2143 let Latency = 9;
2144 let NumMicroOps = 4;
2145 let ResourceCycles = [2,1,1];
2146}
Craig Topper5a69a002018-03-21 06:28:42 +00002147def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2148 "VPSRAVDYrm",
2149 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002150
2151def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2152 let Latency = 9;
2153 let NumMicroOps = 4;
2154 let ResourceCycles = [2,1,1];
2155}
Craig Topper5a69a002018-03-21 06:28:42 +00002156def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2157 "VPHADDSWYrm",
2158 "VPHADDWYrm",
2159 "VPHSUBDYrm",
2160 "VPHSUBSWYrm",
2161 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002162
2163def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2164 let Latency = 9;
2165 let NumMicroOps = 4;
2166 let ResourceCycles = [1,1,1,1];
2167}
Craig Topper5a69a002018-03-21 06:28:42 +00002168def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2169 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002170
2171def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2172 let Latency = 9;
2173 let NumMicroOps = 5;
2174 let ResourceCycles = [1,1,3];
2175}
2176def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2177
2178def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2179 let Latency = 9;
2180 let NumMicroOps = 5;
2181 let ResourceCycles = [1,2,1,1];
2182}
Craig Topper5a69a002018-03-21 06:28:42 +00002183def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2184 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002185
Gadi Haber323f2e12017-10-24 20:19:47 +00002186def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2187 let Latency = 10;
2188 let NumMicroOps = 2;
2189 let ResourceCycles = [1,1];
2190}
Craig Topper5a69a002018-03-21 06:28:42 +00002191def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2192 "MMX_PMADDWDirm",
2193 "MMX_PMULHRSWrm",
2194 "MMX_PMULHUWirm",
2195 "MMX_PMULHWirm",
2196 "MMX_PMULLWirm",
2197 "MMX_PMULUDQirm",
2198 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002199 "(V?)PCMPGTQrm",
2200 "(V?)PHMINPOSUWrm",
2201 "(V?)PMADDUBSWrm",
2202 "(V?)PMADDWDrm",
2203 "(V?)PMULDQrm",
2204 "(V?)PMULHRSWrm",
2205 "(V?)PMULHUWrm",
2206 "(V?)PMULHWrm",
2207 "(V?)PMULLWrm",
2208 "(V?)PMULUDQrm",
2209 "(V?)PSADBWrm",
2210 "(V?)RCPPSm",
2211 "(V?)RCPSSm",
2212 "(V?)RSQRTPSm",
2213 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002214
2215def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2216 let Latency = 10;
2217 let NumMicroOps = 2;
2218 let ResourceCycles = [1,1];
2219}
Craig Topperf82867c2017-12-13 23:11:30 +00002220def: InstRW<[BWWriteResGroup116],
2221 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2222 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002223
2224def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2225 let Latency = 10;
2226 let NumMicroOps = 3;
2227 let ResourceCycles = [2,1];
2228}
Craig Topper5a69a002018-03-21 06:28:42 +00002229def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2230 "FICOM32m",
2231 "FICOMP16m",
2232 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002233
2234def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2235 let Latency = 10;
2236 let NumMicroOps = 3;
2237 let ResourceCycles = [1,1,1];
2238}
2239def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2240
2241def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2242 let Latency = 10;
2243 let NumMicroOps = 4;
2244 let ResourceCycles = [1,2,1];
2245}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002246def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2247 "(V?)HADDPSrm",
2248 "(V?)HSUBPDrm",
2249 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002250
2251def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2252 let Latency = 10;
2253 let NumMicroOps = 4;
2254 let ResourceCycles = [1,1,1,1];
2255}
2256def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2257
2258def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002259 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002260 let NumMicroOps = 4;
2261 let ResourceCycles = [1,1,1,1];
2262}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002263def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002264
Craig Topper8104f262018-04-02 05:33:28 +00002265def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002266 let Latency = 11;
2267 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002268 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002269}
Craig Topper8104f262018-04-02 05:33:28 +00002270def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2271
2272def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2273 let Latency = 11;
2274 let NumMicroOps = 1;
2275 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2276}
2277def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002278
2279def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2280 let Latency = 11;
2281 let NumMicroOps = 2;
2282 let ResourceCycles = [1,1];
2283}
Craig Topper5a69a002018-03-21 06:28:42 +00002284def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2285 "MUL_F64m",
2286 "VPCMPGTQYrm",
2287 "VPMADDUBSWYrm",
2288 "VPMADDWDYrm",
2289 "VPMULDQYrm",
2290 "VPMULHRSWYrm",
2291 "VPMULHUWYrm",
2292 "VPMULHWYrm",
2293 "VPMULLWYrm",
2294 "VPMULUDQYrm",
2295 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002296
2297def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2298 let Latency = 11;
2299 let NumMicroOps = 2;
2300 let ResourceCycles = [1,1];
2301}
Craig Topperf82867c2017-12-13 23:11:30 +00002302def: InstRW<[BWWriteResGroup124],
2303 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002304
Gadi Haber323f2e12017-10-24 20:19:47 +00002305def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2306 let Latency = 11;
2307 let NumMicroOps = 3;
2308 let ResourceCycles = [2,1];
2309}
Craig Topper5a69a002018-03-21 06:28:42 +00002310def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2311 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002312
2313def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2314 let Latency = 11;
2315 let NumMicroOps = 3;
2316 let ResourceCycles = [2,1];
2317}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002318def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2319 "(V?)ROUNDPSm",
2320 "(V?)ROUNDSDm",
2321 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002322
2323def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2324 let Latency = 11;
2325 let NumMicroOps = 3;
2326 let ResourceCycles = [1,1,1];
2327}
2328def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2329
2330def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2331 let Latency = 11;
2332 let NumMicroOps = 4;
2333 let ResourceCycles = [1,2,1];
2334}
Craig Topper5a69a002018-03-21 06:28:42 +00002335def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2336 "VHADDPSYrm",
2337 "VHSUBPDYrm",
2338 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002339
2340def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2341 let Latency = 11;
2342 let NumMicroOps = 6;
2343 let ResourceCycles = [1,1,1,1,2];
2344}
Craig Topper5a69a002018-03-21 06:28:42 +00002345def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2346 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002347
2348def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2349 let Latency = 11;
2350 let NumMicroOps = 7;
2351 let ResourceCycles = [2,2,3];
2352}
Craig Topper5a69a002018-03-21 06:28:42 +00002353def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2354 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002355
2356def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2357 let Latency = 11;
2358 let NumMicroOps = 9;
2359 let ResourceCycles = [1,4,1,3];
2360}
2361def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2362
2363def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2364 let Latency = 11;
2365 let NumMicroOps = 11;
2366 let ResourceCycles = [2,9];
2367}
Craig Topper2d451e72018-03-18 08:38:06 +00002368def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2369def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002370
Gadi Haber323f2e12017-10-24 20:19:47 +00002371def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2372 let Latency = 12;
2373 let NumMicroOps = 3;
2374 let ResourceCycles = [2,1];
2375}
Craig Topper5a69a002018-03-21 06:28:42 +00002376def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2377 "ADD_FI32m",
2378 "SUBR_FI16m",
2379 "SUBR_FI32m",
2380 "SUB_FI16m",
2381 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002382 "VROUNDPDYm",
2383 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002384
2385def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2386 let Latency = 12;
2387 let NumMicroOps = 4;
2388 let ResourceCycles = [1,2,1];
2389}
Craig Topper5a69a002018-03-21 06:28:42 +00002390def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002391
Craig Topper8104f262018-04-02 05:33:28 +00002392def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002393 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002394 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002395 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002396}
Craig Topper8104f262018-04-02 05:33:28 +00002397def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2398
2399def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2400 let Latency = 11;
2401 let NumMicroOps = 1;
2402 let ResourceCycles = [1,4];
2403}
2404def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002405
2406def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2407 let Latency = 13;
2408 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002409 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002410}
2411def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2412
Craig Topper8104f262018-04-02 05:33:28 +00002413def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002414 let Latency = 14;
2415 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002416 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002417}
Craig Topper8104f262018-04-02 05:33:28 +00002418def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2419
2420def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2421 let Latency = 14;
2422 let NumMicroOps = 1;
2423 let ResourceCycles = [1,4];
2424}
2425def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002426
Gadi Haber323f2e12017-10-24 20:19:47 +00002427def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2428 let Latency = 14;
2429 let NumMicroOps = 3;
2430 let ResourceCycles = [1,1,1];
2431}
Craig Topper5a69a002018-03-21 06:28:42 +00002432def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2433 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002434
2435def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2436 let Latency = 14;
2437 let NumMicroOps = 4;
2438 let ResourceCycles = [2,1,1];
2439}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002440def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002441
2442def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2443 let Latency = 14;
2444 let NumMicroOps = 4;
2445 let ResourceCycles = [1,1,1,1];
2446}
Craig Topper5a69a002018-03-21 06:28:42 +00002447def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002448
2449def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2450 let Latency = 14;
2451 let NumMicroOps = 8;
2452 let ResourceCycles = [2,2,1,3];
2453}
2454def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2455
2456def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2457 let Latency = 14;
2458 let NumMicroOps = 10;
2459 let ResourceCycles = [2,3,1,4];
2460}
2461def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2462
2463def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2464 let Latency = 14;
2465 let NumMicroOps = 12;
2466 let ResourceCycles = [2,1,4,5];
2467}
2468def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2469
2470def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2471 let Latency = 15;
2472 let NumMicroOps = 1;
2473 let ResourceCycles = [1];
2474}
Craig Topper5a69a002018-03-21 06:28:42 +00002475def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2476 "DIVR_FST0r",
2477 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002478
Gadi Haber323f2e12017-10-24 20:19:47 +00002479def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2480 let Latency = 15;
2481 let NumMicroOps = 10;
2482 let ResourceCycles = [1,1,1,4,1,2];
2483}
Craig Topper13a16502018-03-19 00:56:09 +00002484def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002485
Craig Topper8104f262018-04-02 05:33:28 +00002486def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002487 let Latency = 16;
2488 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002489 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002490}
Craig Topper5a69a002018-03-21 06:28:42 +00002491def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2492 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002493
2494def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2495 let Latency = 16;
2496 let NumMicroOps = 3;
2497 let ResourceCycles = [2,1];
2498}
2499def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2500
Gadi Haber323f2e12017-10-24 20:19:47 +00002501def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2502 let Latency = 16;
2503 let NumMicroOps = 14;
2504 let ResourceCycles = [1,1,1,4,2,5];
2505}
2506def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2507
2508def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2509 let Latency = 16;
2510 let NumMicroOps = 16;
2511 let ResourceCycles = [16];
2512}
Craig Topper5a69a002018-03-21 06:28:42 +00002513def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002514
Craig Topper8104f262018-04-02 05:33:28 +00002515def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002516 let Latency = 17;
2517 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002518 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002519}
2520def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2521
2522def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2523 let Latency = 17;
2524 let NumMicroOps = 4;
2525 let ResourceCycles = [2,1,1];
2526}
Craig Topper5a69a002018-03-21 06:28:42 +00002527def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2528 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002529
Craig Topper8104f262018-04-02 05:33:28 +00002530def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002531 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002532 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002533 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002534}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002535def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2536 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002537
Gadi Haber323f2e12017-10-24 20:19:47 +00002538def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2539 let Latency = 18;
2540 let NumMicroOps = 8;
2541 let ResourceCycles = [1,1,1,5];
2542}
Craig Topper5a69a002018-03-21 06:28:42 +00002543def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002544def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002545
2546def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2547 let Latency = 18;
2548 let NumMicroOps = 11;
2549 let ResourceCycles = [2,1,1,3,1,3];
2550}
Craig Topper13a16502018-03-19 00:56:09 +00002551def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002552
Craig Topper8104f262018-04-02 05:33:28 +00002553def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002554 let Latency = 19;
2555 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002556 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002557}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002558def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002559 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002560
Gadi Haber323f2e12017-10-24 20:19:47 +00002561def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2562 let Latency = 19;
2563 let NumMicroOps = 5;
2564 let ResourceCycles = [2,1,1,1];
2565}
Craig Topper5a69a002018-03-21 06:28:42 +00002566def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002567
Gadi Haber323f2e12017-10-24 20:19:47 +00002568def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2569 let Latency = 20;
2570 let NumMicroOps = 1;
2571 let ResourceCycles = [1];
2572}
Craig Topper5a69a002018-03-21 06:28:42 +00002573def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2574 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002575 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002576
2577def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2578 let Latency = 20;
2579 let NumMicroOps = 5;
2580 let ResourceCycles = [2,1,1,1];
2581}
2582def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2583
2584def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2585 let Latency = 20;
2586 let NumMicroOps = 8;
2587 let ResourceCycles = [1,1,1,1,1,1,2];
2588}
Craig Topper5a69a002018-03-21 06:28:42 +00002589def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2590 "INSL",
2591 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002592
Craig Topper8104f262018-04-02 05:33:28 +00002593def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002594 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002595 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002596 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002597}
Craig Topper8104f262018-04-02 05:33:28 +00002598def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2599
2600def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2601 let Latency = 16;
2602 let NumMicroOps = 1;
2603 let ResourceCycles = [1,8];
2604}
2605def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002606
2607def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2608 let Latency = 21;
2609 let NumMicroOps = 2;
2610 let ResourceCycles = [1,1];
2611}
Craig Topper5a69a002018-03-21 06:28:42 +00002612def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2613 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002614
Craig Topper8104f262018-04-02 05:33:28 +00002615def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002616 let Latency = 21;
2617 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002618 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002619}
2620def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2621
2622def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2623 let Latency = 21;
2624 let NumMicroOps = 19;
2625 let ResourceCycles = [2,1,4,1,1,4,6];
2626}
2627def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2628
2629def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2630 let Latency = 22;
2631 let NumMicroOps = 18;
2632 let ResourceCycles = [1,1,16];
2633}
2634def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2635
Craig Topper8104f262018-04-02 05:33:28 +00002636def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002637 let Latency = 23;
2638 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002639 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002640}
2641def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2642
Craig Topper8104f262018-04-02 05:33:28 +00002643def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002644 let Latency = 23;
2645 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002646 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002647}
2648def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2649
Gadi Haber323f2e12017-10-24 20:19:47 +00002650def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2651 let Latency = 23;
2652 let NumMicroOps = 19;
2653 let ResourceCycles = [3,1,15];
2654}
Craig Topper391c6f92017-12-10 01:24:08 +00002655def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002656
2657def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2658 let Latency = 24;
2659 let NumMicroOps = 3;
2660 let ResourceCycles = [1,1,1];
2661}
Craig Topper5a69a002018-03-21 06:28:42 +00002662def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2663 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002664
Craig Topper8104f262018-04-02 05:33:28 +00002665def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002666 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002667 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002668 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002669}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002670def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2671 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002672
2673def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2674 let Latency = 26;
2675 let NumMicroOps = 2;
2676 let ResourceCycles = [1,1];
2677}
Craig Topper5a69a002018-03-21 06:28:42 +00002678def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002679 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002680
Craig Topper8104f262018-04-02 05:33:28 +00002681def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002682 let Latency = 27;
2683 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002684 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002685}
2686def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2687
2688def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2689 let Latency = 29;
2690 let NumMicroOps = 3;
2691 let ResourceCycles = [1,1,1];
2692}
Craig Topper5a69a002018-03-21 06:28:42 +00002693def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2694 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002695
Craig Topper8104f262018-04-02 05:33:28 +00002696def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002697 let Latency = 29;
2698 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002699 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002700}
2701def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2702
2703def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2704 let Latency = 22;
2705 let NumMicroOps = 7;
2706 let ResourceCycles = [1,3,2,1];
2707}
Craig Topper17a31182017-12-16 18:35:29 +00002708def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002709
2710def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2711 let Latency = 23;
2712 let NumMicroOps = 9;
2713 let ResourceCycles = [1,3,4,1];
2714}
Craig Topper17a31182017-12-16 18:35:29 +00002715def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002716
2717def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2718 let Latency = 24;
2719 let NumMicroOps = 9;
2720 let ResourceCycles = [1,5,2,1];
2721}
Craig Topper17a31182017-12-16 18:35:29 +00002722def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002723
2724def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2725 let Latency = 25;
2726 let NumMicroOps = 7;
2727 let ResourceCycles = [1,3,2,1];
2728}
Craig Topper17a31182017-12-16 18:35:29 +00002729def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2730 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002731
2732def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2733 let Latency = 26;
2734 let NumMicroOps = 9;
2735 let ResourceCycles = [1,5,2,1];
2736}
Craig Topper17a31182017-12-16 18:35:29 +00002737def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002738
2739def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2740 let Latency = 26;
2741 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002742 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002743}
Craig Topper17a31182017-12-16 18:35:29 +00002744def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002745
2746def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2747 let Latency = 27;
2748 let NumMicroOps = 9;
2749 let ResourceCycles = [1,5,2,1];
2750}
Craig Topper17a31182017-12-16 18:35:29 +00002751def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002752
Gadi Haber323f2e12017-10-24 20:19:47 +00002753def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2754 let Latency = 29;
2755 let NumMicroOps = 27;
2756 let ResourceCycles = [1,5,1,1,19];
2757}
2758def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2759
2760def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2761 let Latency = 30;
2762 let NumMicroOps = 28;
2763 let ResourceCycles = [1,6,1,1,19];
2764}
Craig Topper2d451e72018-03-18 08:38:06 +00002765def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002766
2767def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2768 let Latency = 31;
2769 let NumMicroOps = 31;
2770 let ResourceCycles = [8,1,21,1];
2771}
2772def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2773
Craig Topper8104f262018-04-02 05:33:28 +00002774def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2775 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002776 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002777 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002778}
2779def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2780
2781def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2782 let Latency = 34;
2783 let NumMicroOps = 8;
2784 let ResourceCycles = [2,2,2,1,1];
2785}
Craig Topper13a16502018-03-19 00:56:09 +00002786def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002787
2788def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2789 let Latency = 34;
2790 let NumMicroOps = 23;
2791 let ResourceCycles = [1,5,3,4,10];
2792}
Craig Topper5a69a002018-03-21 06:28:42 +00002793def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2794 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002795
2796def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2797 let Latency = 35;
2798 let NumMicroOps = 8;
2799 let ResourceCycles = [2,2,2,1,1];
2800}
Craig Topper13a16502018-03-19 00:56:09 +00002801def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002802
2803def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2804 let Latency = 35;
2805 let NumMicroOps = 23;
2806 let ResourceCycles = [1,5,2,1,4,10];
2807}
Craig Topper5a69a002018-03-21 06:28:42 +00002808def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2809 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002810
Craig Topper8104f262018-04-02 05:33:28 +00002811def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2812 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002813 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002814 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002815}
2816def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2817
2818def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2819 let Latency = 42;
2820 let NumMicroOps = 22;
2821 let ResourceCycles = [2,20];
2822}
Craig Topper2d451e72018-03-18 08:38:06 +00002823def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002824
2825def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2826 let Latency = 60;
2827 let NumMicroOps = 64;
2828 let ResourceCycles = [2,2,8,1,10,2,39];
2829}
2830def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002831
2832def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2833 let Latency = 63;
2834 let NumMicroOps = 88;
2835 let ResourceCycles = [4,4,31,1,2,1,45];
2836}
Craig Topper2d451e72018-03-18 08:38:06 +00002837def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002838
2839def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2840 let Latency = 63;
2841 let NumMicroOps = 90;
2842 let ResourceCycles = [4,2,33,1,2,1,47];
2843}
Craig Topper2d451e72018-03-18 08:38:06 +00002844def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002845
2846def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2847 let Latency = 75;
2848 let NumMicroOps = 15;
2849 let ResourceCycles = [6,3,6];
2850}
2851def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2852
2853def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2854 let Latency = 80;
2855 let NumMicroOps = 32;
2856 let ResourceCycles = [7,7,3,3,1,11];
2857}
2858def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2859
2860def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2861 let Latency = 115;
2862 let NumMicroOps = 100;
2863 let ResourceCycles = [9,9,11,8,1,11,21,30];
2864}
2865def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002866
2867} // SchedModel
2868