blob: d78a35818495066e9eb9819ff562b38dd48d8e4e [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",
Craig Topper5a69a002018-03-21 06:28:42 +0000666 "MOVNTI_64mr",
667 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000668 "ST_FP32m",
669 "ST_FP64m",
670 "ST_FP80m",
671 "VEXTRACTF128mr",
672 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000673 "(V?)MOVAPD(Y?)mr",
674 "(V?)MOVAPS(Y?)mr",
675 "(V?)MOVDQA(Y?)mr",
676 "(V?)MOVDQU(Y?)mr",
677 "(V?)MOVHPDmr",
678 "(V?)MOVHPSmr",
679 "(V?)MOVLPDmr",
680 "(V?)MOVLPSmr",
681 "(V?)MOVNTDQ(V?)mr",
682 "(V?)MOVNTPD(V?)mr",
683 "(V?)MOVNTPS(V?)mr",
684 "(V?)MOVPDI2DImr",
685 "(V?)MOVPQI2QImr",
686 "(V?)MOVPQIto64mr",
687 "(V?)MOVSDmr",
688 "(V?)MOVSSmr",
689 "(V?)MOVUPD(Y?)mr",
690 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000691
692def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
693 let Latency = 2;
694 let NumMicroOps = 2;
695 let ResourceCycles = [2];
696}
Craig Topper5a69a002018-03-21 06:28:42 +0000697def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
698 "BLENDVPSrr0",
699 "MMX_PINSRWrr",
700 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000701 "VBLENDVPD(Y?)rr",
702 "VBLENDVPS(Y?)rr",
703 "VPBLENDVB(Y?)rr",
704 "(V?)PINSRBrr",
705 "(V?)PINSRDrr",
706 "(V?)PINSRQrr",
707 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000708
709def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
710 let Latency = 2;
711 let NumMicroOps = 2;
712 let ResourceCycles = [2];
713}
714def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
715
716def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
717 let Latency = 2;
718 let NumMicroOps = 2;
719 let ResourceCycles = [2];
720}
Craig Topper5a69a002018-03-21 06:28:42 +0000721def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
722 "ROL(8|16|32|64)ri",
723 "ROR(8|16|32|64)r1",
724 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000725
726def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
727 let Latency = 2;
728 let NumMicroOps = 2;
729 let ResourceCycles = [2];
730}
Craig Topper5a69a002018-03-21 06:28:42 +0000731def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
732 "MFENCE",
733 "WAIT",
734 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000735
736def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
737 let Latency = 2;
738 let NumMicroOps = 2;
739 let ResourceCycles = [1,1];
740}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000741def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
742 "VCVTPH2PS(Y?)rr",
743 "(V?)CVTPS2PDrr",
744 "(V?)CVTSS2SDrr",
745 "(V?)EXTRACTPSrr",
746 "(V?)PEXTRBrr",
747 "(V?)PEXTRDrr",
748 "(V?)PEXTRQrr",
749 "(V?)PEXTRWrr",
750 "(V?)PSLLDrr",
751 "(V?)PSLLQrr",
752 "(V?)PSLLWrr",
753 "(V?)PSRADrr",
754 "(V?)PSRAWrr",
755 "(V?)PSRLDrr",
756 "(V?)PSRLQrr",
757 "(V?)PSRLWrr",
758 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000759
760def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
761 let Latency = 2;
762 let NumMicroOps = 2;
763 let ResourceCycles = [1,1];
764}
765def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
766
767def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
768 let Latency = 2;
769 let NumMicroOps = 2;
770 let ResourceCycles = [1,1];
771}
772def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
773
774def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
775 let Latency = 2;
776 let NumMicroOps = 2;
777 let ResourceCycles = [1,1];
778}
779def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
780
781def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
782 let Latency = 2;
783 let NumMicroOps = 2;
784 let ResourceCycles = [1,1];
785}
Craig Topper498875f2018-04-04 17:54:19 +0000786def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
787
788def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
789 let Latency = 1;
790 let NumMicroOps = 1;
791 let ResourceCycles = [1];
792}
793def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000794
795def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
796 let Latency = 2;
797 let NumMicroOps = 2;
798 let ResourceCycles = [1,1];
799}
Craig Topper2d451e72018-03-18 08:38:06 +0000800def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000801def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000802def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
803 "ADC8ri",
804 "CMOV(A|BE)(16|32|64)rr",
805 "SBB8i8",
806 "SBB8ri",
807 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000808
809def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
810 let Latency = 2;
811 let NumMicroOps = 3;
812 let ResourceCycles = [1,1,1];
813}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000814def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
815 "(V?)PEXTRBmr",
816 "(V?)PEXTRDmr",
817 "(V?)PEXTRQmr",
818 "(V?)PEXTRWmr",
819 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000820
821def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
822 let Latency = 2;
823 let NumMicroOps = 3;
824 let ResourceCycles = [1,1,1];
825}
826def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
827
828def BWWriteResGroup23 : SchedWriteRes<[BWPort4,BWPort237,BWPort06]> {
829 let Latency = 2;
830 let NumMicroOps = 3;
831 let ResourceCycles = [1,1,1];
832}
Craig Topperf4cd9082018-01-19 05:47:32 +0000833def: 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 +0000834
835def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
836 let Latency = 2;
837 let NumMicroOps = 3;
838 let ResourceCycles = [1,1,1];
839}
840def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
841
842def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
843 let Latency = 2;
844 let NumMicroOps = 3;
845 let ResourceCycles = [1,1,1];
846}
Craig Topper2d451e72018-03-18 08:38:06 +0000847def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000848def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
849 "PUSH64i8",
850 "STOSB",
851 "STOSL",
852 "STOSQ",
853 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000854
Gadi Haber323f2e12017-10-24 20:19:47 +0000855def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
856 let Latency = 3;
857 let NumMicroOps = 1;
858 let ResourceCycles = [1];
859}
Clement Courbet327fac42018-03-07 08:14:02 +0000860def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000861def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000862def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000863 "ADD_FST0r",
864 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000865 "MMX_CVTPI2PSirr",
866 "PDEP(32|64)rr",
867 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000868 "SHLD(16|32|64)rri8",
869 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000870 "SUBR_FPrST0",
871 "SUBR_FST0r",
872 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000873 "SUB_FPrST0",
874 "SUB_FST0r",
875 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000876 "(V?)ADDPD(Y?)rr",
877 "(V?)ADDPS(Y?)rr",
878 "(V?)ADDSDrr",
879 "(V?)ADDSSrr",
880 "(V?)ADDSUBPD(Y?)rr",
881 "(V?)ADDSUBPS(Y?)rr",
882 "(V?)CMPPD(Y?)rri",
883 "(V?)CMPPS(Y?)rri",
884 "(V?)CMPSDrr",
885 "(V?)CMPSSrr",
886 "(V?)COMISDrr",
887 "(V?)COMISSrr",
888 "(V?)CVTDQ2PS(Y?)rr",
889 "(V?)CVTPS2DQ(Y?)rr",
890 "(V?)CVTTPS2DQ(Y?)rr",
891 "(V?)MAX(C?)PD(Y?)rr",
892 "(V?)MAX(C?)PS(Y?)rr",
893 "(V?)MAX(C?)SDrr",
894 "(V?)MAX(C?)SSrr",
895 "(V?)MIN(C?)PD(Y?)rr",
896 "(V?)MIN(C?)PS(Y?)rr",
897 "(V?)MIN(C?)SDrr",
898 "(V?)MIN(C?)SSrr",
899 "(V?)SUBPD(Y?)rr",
900 "(V?)SUBPS(Y?)rr",
901 "(V?)SUBSDrr",
902 "(V?)SUBSSrr",
903 "(V?)UCOMISDrr",
904 "(V?)UCOMISSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000905
906def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
907 let Latency = 3;
908 let NumMicroOps = 2;
909 let ResourceCycles = [1,1];
910}
Clement Courbet327fac42018-03-07 08:14:02 +0000911def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000912
913def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
914 let Latency = 3;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
917}
Craig Topper5a69a002018-03-21 06:28:42 +0000918def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
919 "VBROADCASTSSYrr",
920 "VEXTRACTF128rr",
921 "VEXTRACTI128rr",
922 "VINSERTF128rr",
923 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000924 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000925 "VPBROADCASTDYrr",
926 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000927 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000928 "VPERM2F128rr",
929 "VPERM2I128rr",
930 "VPERMDYrr",
931 "VPERMPDYri",
932 "VPERMPSYrr",
933 "VPERMQYri",
934 "VPMOVSXBDYrr",
935 "VPMOVSXBQYrr",
936 "VPMOVSXBWYrr",
937 "VPMOVSXDQYrr",
938 "VPMOVSXWDYrr",
939 "VPMOVSXWQYrr",
940 "VPMOVZXBDYrr",
941 "VPMOVZXBQYrr",
942 "VPMOVZXBWYrr",
943 "VPMOVZXDQYrr",
944 "VPMOVZXWDYrr",
945 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000946
947def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
948 let Latency = 3;
949 let NumMicroOps = 1;
950 let ResourceCycles = [1];
951}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000952def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
953 "(V?)MULPS(Y?)rr",
954 "(V?)MULSDrr",
955 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000956
957def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
958 let Latency = 3;
959 let NumMicroOps = 3;
960 let ResourceCycles = [3];
961}
Craig Topper5a69a002018-03-21 06:28:42 +0000962def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
963 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000964
965def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
966 let Latency = 3;
967 let NumMicroOps = 3;
968 let ResourceCycles = [2,1];
969}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000970def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
971 "VPSRAVD(Y?)rr",
972 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000973
974def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
975 let Latency = 3;
976 let NumMicroOps = 3;
977 let ResourceCycles = [2,1];
978}
Craig Topper5a69a002018-03-21 06:28:42 +0000979def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
980 "MMX_PHADDSWrr",
981 "MMX_PHADDWrr",
982 "MMX_PHSUBDrr",
983 "MMX_PHSUBSWrr",
984 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000985 "(V?)PHADDD(Y?)rr",
986 "(V?)PHADDSW(Y?)rr",
987 "(V?)PHADDW(Y?)rr",
988 "(V?)PHSUBD(Y?)rr",
989 "(V?)PHSUBSW(Y?)rr",
990 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000991
992def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
993 let Latency = 3;
994 let NumMicroOps = 3;
995 let ResourceCycles = [2,1];
996}
Craig Topper5a69a002018-03-21 06:28:42 +0000997def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
998 "MMX_PACKSSWBirr",
999 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001000
1001def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
1002 let Latency = 3;
1003 let NumMicroOps = 3;
1004 let ResourceCycles = [1,2];
1005}
1006def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
1007
1008def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
1009 let Latency = 3;
1010 let NumMicroOps = 3;
1011 let ResourceCycles = [1,2];
1012}
Craig Topper5a69a002018-03-21 06:28:42 +00001013def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
1014 "RCL(8|16|32|64)ri",
1015 "RCR(8|16|32|64)r1",
1016 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001017
1018def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
1019 let Latency = 3;
1020 let NumMicroOps = 3;
1021 let ResourceCycles = [2,1];
1022}
Craig Topper5a69a002018-03-21 06:28:42 +00001023def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
1024 "ROR(8|16|32|64)rCL",
1025 "SAR(8|16|32|64)rCL",
1026 "SHL(8|16|32|64)rCL",
1027 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001028
1029def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
1030 let Latency = 3;
1031 let NumMicroOps = 4;
1032 let ResourceCycles = [1,1,1,1];
1033}
1034def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
1035
1036def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
1037 let Latency = 3;
1038 let NumMicroOps = 4;
1039 let ResourceCycles = [1,1,1,1];
1040}
Craig Topper5a69a002018-03-21 06:28:42 +00001041def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
1042 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001043
1044def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
1045 let Latency = 4;
1046 let NumMicroOps = 2;
1047 let ResourceCycles = [1,1];
1048}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001049def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
1050 "(V?)CVTSD2SIrr",
1051 "(V?)CVTSS2SI64rr",
1052 "(V?)CVTSS2SIrr",
1053 "(V?)CVTTSD2SI64rr",
1054 "(V?)CVTTSD2SIrr",
1055 "(V?)CVTTSS2SI64rr",
1056 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001057
1058def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1059 let Latency = 4;
1060 let NumMicroOps = 2;
1061 let ResourceCycles = [1,1];
1062}
Craig Topper5a69a002018-03-21 06:28:42 +00001063def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1064 "VPSLLDYrr",
1065 "VPSLLQYrr",
1066 "VPSLLWYrr",
1067 "VPSRADYrr",
1068 "VPSRAWYrr",
1069 "VPSRLDYrr",
1070 "VPSRLQYrr",
1071 "VPSRLWYrr",
1072 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001073
1074def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1075 let Latency = 4;
1076 let NumMicroOps = 2;
1077 let ResourceCycles = [1,1];
1078}
1079def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1080
1081def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1082 let Latency = 4;
1083 let NumMicroOps = 2;
1084 let ResourceCycles = [1,1];
1085}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001086def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001087def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001088 "MMX_CVTPI2PDirr",
1089 "MMX_CVTPS2PIirr",
1090 "MMX_CVTTPD2PIirr",
1091 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001092 "(V?)CVTDQ2PDrr",
1093 "(V?)CVTPD2DQrr",
1094 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001095 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001096 "(V?)CVTSD2SSrr",
1097 "(V?)CVTSI642SDrr",
1098 "(V?)CVTSI2SDrr",
1099 "(V?)CVTSI2SSrr",
1100 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001101
1102def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1103 let Latency = 4;
1104 let NumMicroOps = 4;
1105}
Craig Topper5a69a002018-03-21 06:28:42 +00001106def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001107
1108def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1109 let Latency = 4;
1110 let NumMicroOps = 3;
1111 let ResourceCycles = [1,1,1];
1112}
1113def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1114
1115def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1116 let Latency = 4;
1117 let NumMicroOps = 3;
1118 let ResourceCycles = [1,1,1];
1119}
Craig Topper5a69a002018-03-21 06:28:42 +00001120def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1121 "ISTT_FP32m",
1122 "ISTT_FP64m",
1123 "IST_F16m",
1124 "IST_F32m",
1125 "IST_FP16m",
1126 "IST_FP32m",
1127 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001128 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001129
1130def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1131 let Latency = 4;
1132 let NumMicroOps = 4;
1133 let ResourceCycles = [4];
1134}
1135def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1136
1137def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1138 let Latency = 4;
1139 let NumMicroOps = 4;
1140 let ResourceCycles = [1,3];
1141}
1142def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1143
1144def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1145 let Latency = 5;
1146 let NumMicroOps = 1;
1147 let ResourceCycles = [1];
1148}
Craig Topper5a69a002018-03-21 06:28:42 +00001149def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1150 "MMX_PMADDWDirr",
1151 "MMX_PMULHRSWrr",
1152 "MMX_PMULHUWirr",
1153 "MMX_PMULHWirr",
1154 "MMX_PMULLWirr",
1155 "MMX_PMULUDQirr",
1156 "MMX_PSADBWirr",
1157 "MUL_FPrST0",
1158 "MUL_FST0r",
1159 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001160 "(V?)PCMPGTQ(Y?)rr",
1161 "(V?)PHMINPOSUWrr",
1162 "(V?)PMADDUBSW(Y?)rr",
1163 "(V?)PMADDWD(Y?)rr",
1164 "(V?)PMULDQ(Y?)rr",
1165 "(V?)PMULHRSW(Y?)rr",
1166 "(V?)PMULHUW(Y?)rr",
1167 "(V?)PMULHW(Y?)rr",
1168 "(V?)PMULLW(Y?)rr",
1169 "(V?)PMULUDQ(Y?)rr",
1170 "(V?)PSADBW(Y?)rr",
1171 "(V?)RCPPSr",
1172 "(V?)RCPSSr",
1173 "(V?)RSQRTPSr",
1174 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001175
1176def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1177 let Latency = 5;
1178 let NumMicroOps = 1;
1179 let ResourceCycles = [1];
1180}
Craig Topperf82867c2017-12-13 23:11:30 +00001181def: InstRW<[BWWriteResGroup48],
1182 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1183 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001184
1185def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1186 let Latency = 5;
1187 let NumMicroOps = 1;
1188 let ResourceCycles = [1];
1189}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001190def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001191 "MMX_MOVD64to64rm",
1192 "MMX_MOVQ64rm",
1193 "MOV(16|32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001194 "MOVSX(16|32|64)rm16",
1195 "MOVSX(16|32|64)rm32",
1196 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001197 "MOVZX(16|32|64)rm16",
1198 "MOVZX(16|32|64)rm8",
1199 "PREFETCHNTA",
1200 "PREFETCHT0",
1201 "PREFETCHT1",
1202 "PREFETCHT2",
1203 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001204 "(V?)LDDQUrm",
1205 "(V?)MOV64toPQIrm",
1206 "(V?)MOVAPDrm",
1207 "(V?)MOVAPSrm",
1208 "(V?)MOVDDUPrm",
1209 "(V?)MOVDI2PDIrm",
1210 "(V?)MOVDQArm",
1211 "(V?)MOVDQUrm",
1212 "(V?)MOVNTDQArm",
1213 "(V?)MOVQI2PQIrm",
1214 "(V?)MOVSDrm",
1215 "(V?)MOVSHDUPrm",
1216 "(V?)MOVSLDUPrm",
1217 "(V?)MOVSSrm",
1218 "(V?)MOVUPDrm",
1219 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001220 "VPBROADCASTDrm",
1221 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001222
1223def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1224 let Latency = 5;
1225 let NumMicroOps = 3;
1226 let ResourceCycles = [1,2];
1227}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001228def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1229 "(V?)HADDPD(Y?)rr",
1230 "(V?)HADDPS(Y?)rr",
1231 "(V?)HSUBPD(Y?)rr",
1232 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001233
1234def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1235 let Latency = 5;
1236 let NumMicroOps = 3;
1237 let ResourceCycles = [1,1,1];
1238}
1239def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1240
1241def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001242 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001243 let NumMicroOps = 3;
1244 let ResourceCycles = [1,1,1];
1245}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001246def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001247
1248def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1249 let Latency = 5;
1250 let NumMicroOps = 4;
1251 let ResourceCycles = [1,1,1,1];
1252}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001253def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1254 "VMASKMOVPS(Y?)mr",
1255 "VPMASKMOVD(Y?)mr",
1256 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001257
1258def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1259 let Latency = 5;
1260 let NumMicroOps = 5;
1261 let ResourceCycles = [1,4];
1262}
1263def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1264
1265def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1266 let Latency = 5;
1267 let NumMicroOps = 5;
1268 let ResourceCycles = [1,4];
1269}
1270def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1271
1272def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1273 let Latency = 5;
1274 let NumMicroOps = 5;
1275 let ResourceCycles = [2,3];
1276}
Craig Topper5a69a002018-03-21 06:28:42 +00001277def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001278
1279def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1280 let Latency = 5;
1281 let NumMicroOps = 6;
1282 let ResourceCycles = [1,1,4];
1283}
Craig Topper5a69a002018-03-21 06:28:42 +00001284def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001285
1286def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1287 let Latency = 6;
1288 let NumMicroOps = 1;
1289 let ResourceCycles = [1];
1290}
Craig Topper5a69a002018-03-21 06:28:42 +00001291def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1292 "LD_F64m",
1293 "LD_F80m",
1294 "VBROADCASTF128",
1295 "VBROADCASTI128",
1296 "VBROADCASTSDYrm",
1297 "VBROADCASTSSYrm",
1298 "VLDDQUYrm",
1299 "VMOVAPDYrm",
1300 "VMOVAPSYrm",
1301 "VMOVDDUPYrm",
1302 "VMOVDQAYrm",
1303 "VMOVDQUYrm",
1304 "VMOVNTDQAYrm",
1305 "VMOVSHDUPYrm",
1306 "VMOVSLDUPYrm",
1307 "VMOVUPDYrm",
1308 "VMOVUPSYrm",
1309 "VPBROADCASTDYrm",
1310 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001311 "(V?)ROUNDPD(Y?)r",
1312 "(V?)ROUNDPS(Y?)r",
1313 "(V?)ROUNDSDr",
1314 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001315
1316def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1317 let Latency = 6;
1318 let NumMicroOps = 2;
1319 let ResourceCycles = [1,1];
1320}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001321def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001322 "MMX_PSLLQrm",
1323 "MMX_PSLLWrm",
1324 "MMX_PSRADrm",
1325 "MMX_PSRAWrm",
1326 "MMX_PSRLDrm",
1327 "MMX_PSRLQrm",
1328 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001329 "VCVTPH2PS(Y?)rm",
1330 "(V?)CVTPS2PDrm",
1331 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001332 "VPSLLVQrm",
1333 "VPSRLVQrm",
1334 "VTESTPDrm",
1335 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001336
1337def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1338 let Latency = 6;
1339 let NumMicroOps = 2;
1340 let ResourceCycles = [1,1];
1341}
Craig Topper5a69a002018-03-21 06:28:42 +00001342def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1343 "VCVTPD2DQYrr",
1344 "VCVTPD2PSYrr",
1345 "VCVTPS2PHYrr",
1346 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001347
1348def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1349 let Latency = 6;
1350 let NumMicroOps = 2;
1351 let ResourceCycles = [1,1];
1352}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001353def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001354 "MMX_PINSRWrm",
1355 "MMX_PSHUFBrm",
1356 "MMX_PSHUFWmi",
1357 "MMX_PUNPCKHBWirm",
1358 "MMX_PUNPCKHDQirm",
1359 "MMX_PUNPCKHWDirm",
1360 "MMX_PUNPCKLBWirm",
1361 "MMX_PUNPCKLDQirm",
1362 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001363 "(V?)ANDNPDrm",
1364 "(V?)ANDNPSrm",
1365 "(V?)ANDPDrm",
1366 "(V?)ANDPSrm",
1367 "(V?)INSERTPSrm",
1368 "(V?)MOVHPDrm",
1369 "(V?)MOVHPSrm",
1370 "(V?)MOVLPDrm",
1371 "(V?)MOVLPSrm",
1372 "(V?)ORPDrm",
1373 "(V?)ORPSrm",
1374 "(V?)PACKSSDWrm",
1375 "(V?)PACKSSWBrm",
1376 "(V?)PACKUSDWrm",
1377 "(V?)PACKUSWBrm",
1378 "(V?)PALIGNRrmi",
1379 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001380 "VPERMILPDmi",
1381 "VPERMILPDrm",
1382 "VPERMILPSmi",
1383 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001384 "(V?)PINSRBrm",
1385 "(V?)PINSRDrm",
1386 "(V?)PINSRQrm",
1387 "(V?)PINSRWrm",
1388 "(V?)PMOVSXBDrm",
1389 "(V?)PMOVSXBQrm",
1390 "(V?)PMOVSXBWrm",
1391 "(V?)PMOVSXDQrm",
1392 "(V?)PMOVSXWDrm",
1393 "(V?)PMOVSXWQrm",
1394 "(V?)PMOVZXBDrm",
1395 "(V?)PMOVZXBQrm",
1396 "(V?)PMOVZXBWrm",
1397 "(V?)PMOVZXDQrm",
1398 "(V?)PMOVZXWDrm",
1399 "(V?)PMOVZXWQrm",
1400 "(V?)PSHUFBrm",
1401 "(V?)PSHUFDmi",
1402 "(V?)PSHUFHWmi",
1403 "(V?)PSHUFLWmi",
1404 "(V?)PUNPCKHBWrm",
1405 "(V?)PUNPCKHDQrm",
1406 "(V?)PUNPCKHQDQrm",
1407 "(V?)PUNPCKHWDrm",
1408 "(V?)PUNPCKLBWrm",
1409 "(V?)PUNPCKLDQrm",
1410 "(V?)PUNPCKLQDQrm",
1411 "(V?)PUNPCKLWDrm",
1412 "(V?)SHUFPDrmi",
1413 "(V?)SHUFPSrmi",
1414 "(V?)UNPCKHPDrm",
1415 "(V?)UNPCKHPSrm",
1416 "(V?)UNPCKLPDrm",
1417 "(V?)UNPCKLPSrm",
1418 "(V?)XORPDrm",
1419 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001420
1421def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1422 let Latency = 6;
1423 let NumMicroOps = 2;
1424 let ResourceCycles = [1,1];
1425}
Craig Topper5a69a002018-03-21 06:28:42 +00001426def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1427 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001428
1429def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1430 let Latency = 6;
1431 let NumMicroOps = 2;
1432 let ResourceCycles = [1,1];
1433}
Craig Topper5a69a002018-03-21 06:28:42 +00001434def: InstRW<[BWWriteResGroup63], (instregex "ADC(8|16|32|64)rm",
1435 "ADCX(32|64)rm",
1436 "ADOX(32|64)rm",
1437 "BT(16|32|64)mi8",
1438 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1439 "RORX(32|64)mi",
1440 "SARX(32|64)rm",
1441 "SBB(8|16|32|64)rm",
1442 "SHLX(32|64)rm",
1443 "SHRX(32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001444
1445def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1446 let Latency = 6;
1447 let NumMicroOps = 2;
1448 let ResourceCycles = [1,1];
1449}
Craig Topper5a69a002018-03-21 06:28:42 +00001450def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1451 "BLSI(32|64)rm",
1452 "BLSMSK(32|64)rm",
1453 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001454 "MMX_PABSBrm",
1455 "MMX_PABSDrm",
1456 "MMX_PABSWrm",
1457 "MMX_PADDBirm",
1458 "MMX_PADDDirm",
1459 "MMX_PADDQirm",
1460 "MMX_PADDSBirm",
1461 "MMX_PADDSWirm",
1462 "MMX_PADDUSBirm",
1463 "MMX_PADDUSWirm",
1464 "MMX_PADDWirm",
1465 "MMX_PAVGBirm",
1466 "MMX_PAVGWirm",
1467 "MMX_PCMPEQBirm",
1468 "MMX_PCMPEQDirm",
1469 "MMX_PCMPEQWirm",
1470 "MMX_PCMPGTBirm",
1471 "MMX_PCMPGTDirm",
1472 "MMX_PCMPGTWirm",
1473 "MMX_PMAXSWirm",
1474 "MMX_PMAXUBirm",
1475 "MMX_PMINSWirm",
1476 "MMX_PMINUBirm",
1477 "MMX_PSIGNBrm",
1478 "MMX_PSIGNDrm",
1479 "MMX_PSIGNWrm",
1480 "MMX_PSUBBirm",
1481 "MMX_PSUBDirm",
1482 "MMX_PSUBQirm",
1483 "MMX_PSUBSBirm",
1484 "MMX_PSUBSWirm",
1485 "MMX_PSUBUSBirm",
1486 "MMX_PSUBUSWirm",
1487 "MMX_PSUBWirm",
1488 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001489 "(V?)PABSBrm",
1490 "(V?)PABSDrm",
1491 "(V?)PABSWrm",
1492 "(V?)PADDBrm",
1493 "(V?)PADDDrm",
1494 "(V?)PADDQrm",
1495 "(V?)PADDSBrm",
1496 "(V?)PADDSWrm",
1497 "(V?)PADDUSBrm",
1498 "(V?)PADDUSWrm",
1499 "(V?)PADDWrm",
1500 "(V?)PAVGBrm",
1501 "(V?)PAVGWrm",
1502 "(V?)PCMPEQBrm",
1503 "(V?)PCMPEQDrm",
1504 "(V?)PCMPEQQrm",
1505 "(V?)PCMPEQWrm",
1506 "(V?)PCMPGTBrm",
1507 "(V?)PCMPGTDrm",
1508 "(V?)PCMPGTWrm",
1509 "(V?)PMAXSBrm",
1510 "(V?)PMAXSDrm",
1511 "(V?)PMAXSWrm",
1512 "(V?)PMAXUBrm",
1513 "(V?)PMAXUDrm",
1514 "(V?)PMAXUWrm",
1515 "(V?)PMINSBrm",
1516 "(V?)PMINSDrm",
1517 "(V?)PMINSWrm",
1518 "(V?)PMINUBrm",
1519 "(V?)PMINUDrm",
1520 "(V?)PMINUWrm",
1521 "(V?)PSIGNBrm",
1522 "(V?)PSIGNDrm",
1523 "(V?)PSIGNWrm",
1524 "(V?)PSUBBrm",
1525 "(V?)PSUBDrm",
1526 "(V?)PSUBQrm",
1527 "(V?)PSUBSBrm",
1528 "(V?)PSUBSWrm",
1529 "(V?)PSUBUSBrm",
1530 "(V?)PSUBUSWrm",
1531 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001532
1533def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1534 let Latency = 6;
1535 let NumMicroOps = 2;
1536 let ResourceCycles = [1,1];
1537}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001538def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001539 "MMX_PANDirm",
1540 "MMX_PORirm",
1541 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001542 "(V?)BLENDPDrmi",
1543 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001544 "VINSERTF128rm",
1545 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001546 "(V?)PANDNrm",
1547 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001548 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001549 "(V?)PORrm",
1550 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001551
1552def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1553 let Latency = 6;
1554 let NumMicroOps = 2;
1555 let ResourceCycles = [1,1];
1556}
Craig Topper2d451e72018-03-18 08:38:06 +00001557def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001558def: InstRW<[BWWriteResGroup66], (instregex "ADD(8|16|32|64)rm",
1559 "AND(8|16|32|64)rm",
1560 "CMP(8|16|32|64)mi",
1561 "CMP(8|16|32|64)mr",
1562 "CMP(8|16|32|64)rm",
1563 "OR(8|16|32|64)rm",
1564 "POP(16|32|64)rmr",
1565 "SUB(8|16|32|64)rm",
1566 "TEST(8|16|32|64)mr",
1567 "TEST(8|16|32|64)mi",
1568 "XOR(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001569
1570def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1571 let Latency = 6;
1572 let NumMicroOps = 4;
1573 let ResourceCycles = [1,1,2];
1574}
Craig Topper5a69a002018-03-21 06:28:42 +00001575def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1576 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001577
1578def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1579 let Latency = 6;
1580 let NumMicroOps = 4;
1581 let ResourceCycles = [1,1,1,1];
1582}
1583def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1584
1585def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1586 let Latency = 6;
1587 let NumMicroOps = 4;
1588 let ResourceCycles = [1,1,1,1];
1589}
Craig Topper5a69a002018-03-21 06:28:42 +00001590def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1591 "BTR(16|32|64)mi8",
1592 "BTS(16|32|64)mi8",
1593 "SAR(8|16|32|64)m1",
1594 "SAR(8|16|32|64)mi",
1595 "SHL(8|16|32|64)m1",
1596 "SHL(8|16|32|64)mi",
1597 "SHR(8|16|32|64)m1",
1598 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001599
1600def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1601 let Latency = 6;
1602 let NumMicroOps = 4;
1603 let ResourceCycles = [1,1,1,1];
1604}
Craig Topper5a69a002018-03-21 06:28:42 +00001605def: InstRW<[BWWriteResGroup70], (instregex "ADD(8|16|32|64)mi",
1606 "ADD(8|16|32|64)mr",
1607 "AND(8|16|32|64)mi",
1608 "AND(8|16|32|64)mr",
1609 "DEC(8|16|32|64)m",
1610 "INC(8|16|32|64)m",
1611 "NEG(8|16|32|64)m",
1612 "NOT(8|16|32|64)m",
1613 "OR(8|16|32|64)mi",
1614 "OR(8|16|32|64)mr",
1615 "POP(16|32|64)rmm",
1616 "PUSH(16|32|64)rmm",
1617 "SUB(8|16|32|64)mi",
1618 "SUB(8|16|32|64)mr",
1619 "XOR(8|16|32|64)mi",
1620 "XOR(8|16|32|64)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001621
1622def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1623 let Latency = 6;
1624 let NumMicroOps = 6;
1625 let ResourceCycles = [1,5];
1626}
1627def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1628
Gadi Haber323f2e12017-10-24 20:19:47 +00001629def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1630 let Latency = 7;
1631 let NumMicroOps = 2;
1632 let ResourceCycles = [1,1];
1633}
Craig Topper5a69a002018-03-21 06:28:42 +00001634def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1635 "VPSLLQYrm",
1636 "VPSLLVQYrm",
1637 "VPSLLWYrm",
1638 "VPSRADYrm",
1639 "VPSRAWYrm",
1640 "VPSRLDYrm",
1641 "VPSRLQYrm",
1642 "VPSRLVQYrm",
1643 "VPSRLWYrm",
1644 "VTESTPDYrm",
1645 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001646
1647def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1648 let Latency = 7;
1649 let NumMicroOps = 2;
1650 let ResourceCycles = [1,1];
1651}
Craig Topper5a69a002018-03-21 06:28:42 +00001652def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1653 "FCOM64m",
1654 "FCOMP32m",
1655 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001656
1657def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1658 let Latency = 7;
1659 let NumMicroOps = 2;
1660 let ResourceCycles = [1,1];
1661}
Craig Topper5a69a002018-03-21 06:28:42 +00001662def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1663 "VANDNPSYrm",
1664 "VANDPDYrm",
1665 "VANDPSYrm",
1666 "VORPDYrm",
1667 "VORPSYrm",
1668 "VPACKSSDWYrm",
1669 "VPACKSSWBYrm",
1670 "VPACKUSDWYrm",
1671 "VPACKUSWBYrm",
1672 "VPALIGNRYrmi",
1673 "VPBLENDWYrmi",
1674 "VPERMILPDYmi",
1675 "VPERMILPDYrm",
1676 "VPERMILPSYmi",
1677 "VPERMILPSYrm",
1678 "VPSHUFBYrm",
1679 "VPSHUFDYmi",
1680 "VPSHUFHWYmi",
1681 "VPSHUFLWYmi",
1682 "VPUNPCKHBWYrm",
1683 "VPUNPCKHDQYrm",
1684 "VPUNPCKHQDQYrm",
1685 "VPUNPCKHWDYrm",
1686 "VPUNPCKLBWYrm",
1687 "VPUNPCKLDQYrm",
1688 "VPUNPCKLQDQYrm",
1689 "VPUNPCKLWDYrm",
1690 "VSHUFPDYrmi",
1691 "VSHUFPSYrmi",
1692 "VUNPCKHPDYrm",
1693 "VUNPCKHPSYrm",
1694 "VUNPCKLPDYrm",
1695 "VUNPCKLPSYrm",
1696 "VXORPDYrm",
1697 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001698
1699def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1700 let Latency = 7;
1701 let NumMicroOps = 2;
1702 let ResourceCycles = [1,1];
1703}
Craig Topper5a69a002018-03-21 06:28:42 +00001704def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1705 "VPABSDYrm",
1706 "VPABSWYrm",
1707 "VPADDBYrm",
1708 "VPADDDYrm",
1709 "VPADDQYrm",
1710 "VPADDSBYrm",
1711 "VPADDSWYrm",
1712 "VPADDUSBYrm",
1713 "VPADDUSWYrm",
1714 "VPADDWYrm",
1715 "VPAVGBYrm",
1716 "VPAVGWYrm",
1717 "VPCMPEQBYrm",
1718 "VPCMPEQDYrm",
1719 "VPCMPEQQYrm",
1720 "VPCMPEQWYrm",
1721 "VPCMPGTBYrm",
1722 "VPCMPGTDYrm",
1723 "VPCMPGTWYrm",
1724 "VPMAXSBYrm",
1725 "VPMAXSDYrm",
1726 "VPMAXSWYrm",
1727 "VPMAXUBYrm",
1728 "VPMAXUDYrm",
1729 "VPMAXUWYrm",
1730 "VPMINSBYrm",
1731 "VPMINSDYrm",
1732 "VPMINSWYrm",
1733 "VPMINUBYrm",
1734 "VPMINUDYrm",
1735 "VPMINUWYrm",
1736 "VPSIGNBYrm",
1737 "VPSIGNDYrm",
1738 "VPSIGNWYrm",
1739 "VPSUBBYrm",
1740 "VPSUBDYrm",
1741 "VPSUBQYrm",
1742 "VPSUBSBYrm",
1743 "VPSUBSWYrm",
1744 "VPSUBUSBYrm",
1745 "VPSUBUSWYrm",
1746 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001747
1748def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1749 let Latency = 7;
1750 let NumMicroOps = 2;
1751 let ResourceCycles = [1,1];
1752}
Craig Topper5a69a002018-03-21 06:28:42 +00001753def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1754 "VBLENDPSYrmi",
1755 "VPANDNYrm",
1756 "VPANDYrm",
1757 "VPBLENDDYrmi",
1758 "VPORYrm",
1759 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001760
1761def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1762 let Latency = 7;
1763 let NumMicroOps = 3;
1764 let ResourceCycles = [1,2];
1765}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001766def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001767
1768def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1769 let Latency = 7;
1770 let NumMicroOps = 3;
1771 let ResourceCycles = [2,1];
1772}
Craig Topper5a69a002018-03-21 06:28:42 +00001773def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1774 "BLENDVPSrm0",
1775 "MMX_PACKSSDWirm",
1776 "MMX_PACKSSWBirm",
1777 "MMX_PACKUSWBirm",
1778 "PBLENDVBrm0",
1779 "VBLENDVPDrm",
1780 "VBLENDVPSrm",
1781 "VMASKMOVPDrm",
1782 "VMASKMOVPSrm",
1783 "VPBLENDVBrm",
1784 "VPMASKMOVDrm",
1785 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001786
1787def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1788 let Latency = 7;
1789 let NumMicroOps = 3;
1790 let ResourceCycles = [1,2];
1791}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001792def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1793 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
1795def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1796 let Latency = 7;
1797 let NumMicroOps = 3;
1798 let ResourceCycles = [1,1,1];
1799}
Craig Topper5a69a002018-03-21 06:28:42 +00001800def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1801 "PSLLQrm",
1802 "PSLLWrm",
1803 "PSRADrm",
1804 "PSRAWrm",
1805 "PSRLDrm",
1806 "PSRLQrm",
1807 "PSRLWrm",
1808 "PTESTrm",
1809 "VPSLLDrm",
1810 "VPSLLQrm",
1811 "VPSLLWrm",
1812 "VPSRADrm",
1813 "VPSRAWrm",
1814 "VPSRLDrm",
1815 "VPSRLQrm",
1816 "VPSRLWrm",
1817 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001818
1819def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1820 let Latency = 7;
1821 let NumMicroOps = 3;
1822 let ResourceCycles = [1,1,1];
1823}
1824def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1825
1826def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1827 let Latency = 7;
1828 let NumMicroOps = 3;
1829 let ResourceCycles = [1,1,1];
1830}
Craig Topper5a69a002018-03-21 06:28:42 +00001831def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001832
1833def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1834 let Latency = 7;
1835 let NumMicroOps = 3;
1836 let ResourceCycles = [1,1,1];
1837}
Craig Topper5a69a002018-03-21 06:28:42 +00001838def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1839 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001840
Gadi Haber323f2e12017-10-24 20:19:47 +00001841def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1842 let Latency = 7;
1843 let NumMicroOps = 3;
1844 let ResourceCycles = [1,1,1];
1845}
Craig Topperf4cd9082018-01-19 05:47:32 +00001846def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001847
1848def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1849 let Latency = 7;
1850 let NumMicroOps = 5;
1851 let ResourceCycles = [1,1,1,2];
1852}
Craig Topper5a69a002018-03-21 06:28:42 +00001853def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1854 "ROL(8|16|32|64)mi",
1855 "ROR(8|16|32|64)m1",
1856 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001857
1858def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1859 let Latency = 7;
1860 let NumMicroOps = 5;
1861 let ResourceCycles = [1,1,1,2];
1862}
Craig Topper5a69a002018-03-21 06:28:42 +00001863def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001864
1865def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1866 let Latency = 7;
1867 let NumMicroOps = 5;
1868 let ResourceCycles = [1,1,1,1,1];
1869}
Craig Topper5a69a002018-03-21 06:28:42 +00001870def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1871 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001872
1873def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1874 let Latency = 7;
1875 let NumMicroOps = 7;
1876 let ResourceCycles = [2,2,1,2];
1877}
Craig Topper2d451e72018-03-18 08:38:06 +00001878def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001879
1880def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1881 let Latency = 8;
1882 let NumMicroOps = 2;
1883 let ResourceCycles = [1,1];
1884}
Craig Topperb369cdb2018-01-25 06:57:42 +00001885def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001886def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001887def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001888 "MMX_CVTPS2PIirm",
1889 "MMX_CVTTPS2PIirm",
1890 "PDEP(32|64)rm",
1891 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001892 "(V?)ADDPDrm",
1893 "(V?)ADDPSrm",
1894 "(V?)ADDSDrm",
1895 "(V?)ADDSSrm",
1896 "(V?)ADDSUBPDrm",
1897 "(V?)ADDSUBPSrm",
1898 "(V?)CMPPDrmi",
1899 "(V?)CMPPSrmi",
1900 "(V?)CMPSDrm",
1901 "(V?)CMPSSrm",
1902 "(V?)COMISDrm",
1903 "(V?)COMISSrm",
1904 "(V?)CVTDQ2PSrm",
1905 "(V?)CVTPS2DQrm",
1906 "(V?)CVTTPS2DQrm",
1907 "(V?)MAX(C?)PDrm",
1908 "(V?)MAX(C?)PSrm",
1909 "(V?)MAX(C?)SDrm",
1910 "(V?)MAX(C?)SSrm",
1911 "(V?)MIN(C?)PDrm",
1912 "(V?)MIN(C?)PSrm",
1913 "(V?)MIN(C?)SDrm",
1914 "(V?)MIN(C?)SSrm",
1915 "(V?)SUBPDrm",
1916 "(V?)SUBPSrm",
1917 "(V?)SUBSDrm",
1918 "(V?)SUBSSrm",
1919 "(V?)UCOMISDrm",
1920 "(V?)UCOMISSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001921
1922def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1923 let Latency = 8;
1924 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001925 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001926}
Craig Topperb369cdb2018-01-25 06:57:42 +00001927def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001928
1929def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1930 let Latency = 8;
1931 let NumMicroOps = 5;
1932}
Craig Topper5a69a002018-03-21 06:28:42 +00001933def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001934
Gadi Haber323f2e12017-10-24 20:19:47 +00001935def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1936 let Latency = 8;
1937 let NumMicroOps = 2;
1938 let ResourceCycles = [1,1];
1939}
Craig Topper5a69a002018-03-21 06:28:42 +00001940def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1941 "VPMOVSXBQYrm",
1942 "VPMOVSXBWYrm",
1943 "VPMOVSXDQYrm",
1944 "VPMOVSXWDYrm",
1945 "VPMOVSXWQYrm",
1946 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001947
1948def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1949 let Latency = 8;
1950 let NumMicroOps = 2;
1951 let ResourceCycles = [1,1];
1952}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001953def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1954 "(V?)MULPSrm",
1955 "(V?)MULSDrm",
1956 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001957
1958def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1959 let Latency = 8;
1960 let NumMicroOps = 3;
1961 let ResourceCycles = [2,1];
1962}
Craig Topper5a69a002018-03-21 06:28:42 +00001963def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1964 "VBLENDVPSYrm",
1965 "VMASKMOVPDYrm",
1966 "VMASKMOVPSYrm",
1967 "VPBLENDVBYrm",
1968 "VPMASKMOVDYrm",
1969 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001970
1971def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1972 let Latency = 8;
1973 let NumMicroOps = 4;
1974 let ResourceCycles = [2,1,1];
1975}
Craig Topper5a69a002018-03-21 06:28:42 +00001976def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1977 "VPSRAVDrm",
1978 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001979
1980def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1981 let Latency = 8;
1982 let NumMicroOps = 4;
1983 let ResourceCycles = [2,1,1];
1984}
Craig Topper5a69a002018-03-21 06:28:42 +00001985def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1986 "MMX_PHADDSWrm",
1987 "MMX_PHADDWrm",
1988 "MMX_PHSUBDrm",
1989 "MMX_PHSUBSWrm",
1990 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001991 "(V?)PHADDDrm",
1992 "(V?)PHADDSWrm",
1993 "(V?)PHADDWrm",
1994 "(V?)PHSUBDrm",
1995 "(V?)PHSUBSWrm",
1996 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001997
1998def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1999 let Latency = 8;
2000 let NumMicroOps = 5;
2001 let ResourceCycles = [1,1,1,2];
2002}
Craig Topper5a69a002018-03-21 06:28:42 +00002003def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
2004 "RCL(8|16|32|64)mi",
2005 "RCR(8|16|32|64)m1",
2006 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002007
2008def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
2009 let Latency = 8;
2010 let NumMicroOps = 5;
2011 let ResourceCycles = [1,1,2,1];
2012}
Craig Topper13a16502018-03-19 00:56:09 +00002013def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002014
2015def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
2016 let Latency = 8;
2017 let NumMicroOps = 6;
2018 let ResourceCycles = [1,1,1,3];
2019}
Craig Topper9f834812018-04-01 21:54:24 +00002020def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002021
2022def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2023 let Latency = 8;
2024 let NumMicroOps = 6;
2025 let ResourceCycles = [1,1,1,2,1];
2026}
Craig Topper9f834812018-04-01 21:54:24 +00002027def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
2028 "ADC(8|16|32|64)mr",
Craig Topper5a69a002018-03-21 06:28:42 +00002029 "CMPXCHG(8|16|32|64)rm",
2030 "ROL(8|16|32|64)mCL",
2031 "SAR(8|16|32|64)mCL",
2032 "SBB(8|16|32|64)mi",
2033 "SBB(8|16|32|64)mr",
2034 "SHL(8|16|32|64)mCL",
2035 "SHR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002036
2037def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
2038 let Latency = 9;
2039 let NumMicroOps = 2;
2040 let ResourceCycles = [1,1];
2041}
Craig Topper5a69a002018-03-21 06:28:42 +00002042def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
2043 "ADD_F64m",
2044 "ILD_F16m",
2045 "ILD_F32m",
2046 "ILD_F64m",
2047 "SUBR_F32m",
2048 "SUBR_F64m",
2049 "SUB_F32m",
2050 "SUB_F64m",
2051 "VADDPDYrm",
2052 "VADDPSYrm",
2053 "VADDSUBPDYrm",
2054 "VADDSUBPSYrm",
2055 "VCMPPDYrmi",
2056 "VCMPPSYrmi",
2057 "VCVTDQ2PSYrm",
2058 "VCVTPS2DQYrm",
2059 "VCVTTPS2DQYrm",
2060 "VMAX(C?)PDYrm",
2061 "VMAX(C?)PSYrm",
2062 "VMIN(C?)PDYrm",
2063 "VMIN(C?)PSYrm",
2064 "VSUBPDYrm",
2065 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002066
2067def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
2068 let Latency = 9;
2069 let NumMicroOps = 2;
2070 let ResourceCycles = [1,1];
2071}
Craig Topper5a69a002018-03-21 06:28:42 +00002072def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
2073 "VPERM2I128rm",
2074 "VPERMDYrm",
2075 "VPERMPDYmi",
2076 "VPERMPSYrm",
2077 "VPERMQYmi",
2078 "VPMOVZXBDYrm",
2079 "VPMOVZXBQYrm",
2080 "VPMOVZXBWYrm",
2081 "VPMOVZXDQYrm",
2082 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002083
2084def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
2085 let Latency = 9;
2086 let NumMicroOps = 2;
2087 let ResourceCycles = [1,1];
2088}
Craig Topper5a69a002018-03-21 06:28:42 +00002089def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
2090 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002091
2092def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2093 let Latency = 9;
2094 let NumMicroOps = 3;
2095 let ResourceCycles = [1,1,1];
2096}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002097def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002098
2099def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2100 let Latency = 9;
2101 let NumMicroOps = 3;
2102 let ResourceCycles = [1,1,1];
2103}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002104def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2105 "(V?)CVTSD2SIrm",
2106 "(V?)CVTSS2SI64rm",
2107 "(V?)CVTSS2SIrm",
2108 "(V?)CVTTSD2SI64rm",
2109 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002110 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002111 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002112
2113def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2114 let Latency = 9;
2115 let NumMicroOps = 3;
2116 let ResourceCycles = [1,1,1];
2117}
2118def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2119
2120def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2121 let Latency = 9;
2122 let NumMicroOps = 3;
2123 let ResourceCycles = [1,1,1];
2124}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002125def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002126def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002127 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002128 "CVTTPD2DQrm",
2129 "MMX_CVTPD2PIirm",
2130 "MMX_CVTPI2PDirm",
2131 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002132 "(V?)CVTDQ2PDrm",
2133 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002134
2135def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2136 let Latency = 9;
2137 let NumMicroOps = 3;
2138 let ResourceCycles = [1,1,1];
2139}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002140def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2141 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002142
2143def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2144 let Latency = 9;
2145 let NumMicroOps = 4;
2146 let ResourceCycles = [2,1,1];
2147}
Craig Topper5a69a002018-03-21 06:28:42 +00002148def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2149 "VPSRAVDYrm",
2150 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002151
2152def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2153 let Latency = 9;
2154 let NumMicroOps = 4;
2155 let ResourceCycles = [2,1,1];
2156}
Craig Topper5a69a002018-03-21 06:28:42 +00002157def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2158 "VPHADDSWYrm",
2159 "VPHADDWYrm",
2160 "VPHSUBDYrm",
2161 "VPHSUBSWYrm",
2162 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002163
2164def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2165 let Latency = 9;
2166 let NumMicroOps = 4;
2167 let ResourceCycles = [1,1,1,1];
2168}
Craig Topper5a69a002018-03-21 06:28:42 +00002169def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2170 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002171
2172def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2173 let Latency = 9;
2174 let NumMicroOps = 5;
2175 let ResourceCycles = [1,1,3];
2176}
2177def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2178
2179def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2180 let Latency = 9;
2181 let NumMicroOps = 5;
2182 let ResourceCycles = [1,2,1,1];
2183}
Craig Topper5a69a002018-03-21 06:28:42 +00002184def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2185 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002186
Gadi Haber323f2e12017-10-24 20:19:47 +00002187def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2188 let Latency = 10;
2189 let NumMicroOps = 2;
2190 let ResourceCycles = [1,1];
2191}
Craig Topper5a69a002018-03-21 06:28:42 +00002192def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2193 "MMX_PMADDWDirm",
2194 "MMX_PMULHRSWrm",
2195 "MMX_PMULHUWirm",
2196 "MMX_PMULHWirm",
2197 "MMX_PMULLWirm",
2198 "MMX_PMULUDQirm",
2199 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002200 "(V?)PCMPGTQrm",
2201 "(V?)PHMINPOSUWrm",
2202 "(V?)PMADDUBSWrm",
2203 "(V?)PMADDWDrm",
2204 "(V?)PMULDQrm",
2205 "(V?)PMULHRSWrm",
2206 "(V?)PMULHUWrm",
2207 "(V?)PMULHWrm",
2208 "(V?)PMULLWrm",
2209 "(V?)PMULUDQrm",
2210 "(V?)PSADBWrm",
2211 "(V?)RCPPSm",
2212 "(V?)RCPSSm",
2213 "(V?)RSQRTPSm",
2214 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002215
2216def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2217 let Latency = 10;
2218 let NumMicroOps = 2;
2219 let ResourceCycles = [1,1];
2220}
Craig Topperf82867c2017-12-13 23:11:30 +00002221def: InstRW<[BWWriteResGroup116],
2222 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2223 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002224
2225def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2226 let Latency = 10;
2227 let NumMicroOps = 3;
2228 let ResourceCycles = [2,1];
2229}
Craig Topper5a69a002018-03-21 06:28:42 +00002230def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2231 "FICOM32m",
2232 "FICOMP16m",
2233 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002234
2235def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2236 let Latency = 10;
2237 let NumMicroOps = 3;
2238 let ResourceCycles = [1,1,1];
2239}
2240def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2241
2242def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2243 let Latency = 10;
2244 let NumMicroOps = 4;
2245 let ResourceCycles = [1,2,1];
2246}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002247def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2248 "(V?)HADDPSrm",
2249 "(V?)HSUBPDrm",
2250 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002251
2252def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2253 let Latency = 10;
2254 let NumMicroOps = 4;
2255 let ResourceCycles = [1,1,1,1];
2256}
2257def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2258
2259def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002260 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002261 let NumMicroOps = 4;
2262 let ResourceCycles = [1,1,1,1];
2263}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002264def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002265
Craig Topper8104f262018-04-02 05:33:28 +00002266def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002267 let Latency = 11;
2268 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002269 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002270}
Craig Topper8104f262018-04-02 05:33:28 +00002271def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2272
2273def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2274 let Latency = 11;
2275 let NumMicroOps = 1;
2276 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2277}
2278def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002279
2280def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2281 let Latency = 11;
2282 let NumMicroOps = 2;
2283 let ResourceCycles = [1,1];
2284}
Craig Topper5a69a002018-03-21 06:28:42 +00002285def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2286 "MUL_F64m",
2287 "VPCMPGTQYrm",
2288 "VPMADDUBSWYrm",
2289 "VPMADDWDYrm",
2290 "VPMULDQYrm",
2291 "VPMULHRSWYrm",
2292 "VPMULHUWYrm",
2293 "VPMULHWYrm",
2294 "VPMULLWYrm",
2295 "VPMULUDQYrm",
2296 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002297
2298def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2299 let Latency = 11;
2300 let NumMicroOps = 2;
2301 let ResourceCycles = [1,1];
2302}
Craig Topperf82867c2017-12-13 23:11:30 +00002303def: InstRW<[BWWriteResGroup124],
2304 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002305
Gadi Haber323f2e12017-10-24 20:19:47 +00002306def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2307 let Latency = 11;
2308 let NumMicroOps = 3;
2309 let ResourceCycles = [2,1];
2310}
Craig Topper5a69a002018-03-21 06:28:42 +00002311def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2312 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002313
2314def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2315 let Latency = 11;
2316 let NumMicroOps = 3;
2317 let ResourceCycles = [2,1];
2318}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002319def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2320 "(V?)ROUNDPSm",
2321 "(V?)ROUNDSDm",
2322 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002323
2324def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2325 let Latency = 11;
2326 let NumMicroOps = 3;
2327 let ResourceCycles = [1,1,1];
2328}
2329def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2330
2331def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2332 let Latency = 11;
2333 let NumMicroOps = 4;
2334 let ResourceCycles = [1,2,1];
2335}
Craig Topper5a69a002018-03-21 06:28:42 +00002336def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2337 "VHADDPSYrm",
2338 "VHSUBPDYrm",
2339 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002340
2341def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2342 let Latency = 11;
2343 let NumMicroOps = 6;
2344 let ResourceCycles = [1,1,1,1,2];
2345}
Craig Topper5a69a002018-03-21 06:28:42 +00002346def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2347 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002348
2349def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2350 let Latency = 11;
2351 let NumMicroOps = 7;
2352 let ResourceCycles = [2,2,3];
2353}
Craig Topper5a69a002018-03-21 06:28:42 +00002354def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2355 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002356
2357def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2358 let Latency = 11;
2359 let NumMicroOps = 9;
2360 let ResourceCycles = [1,4,1,3];
2361}
2362def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2363
2364def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2365 let Latency = 11;
2366 let NumMicroOps = 11;
2367 let ResourceCycles = [2,9];
2368}
Craig Topper2d451e72018-03-18 08:38:06 +00002369def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2370def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002371
Gadi Haber323f2e12017-10-24 20:19:47 +00002372def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2373 let Latency = 12;
2374 let NumMicroOps = 3;
2375 let ResourceCycles = [2,1];
2376}
Craig Topper5a69a002018-03-21 06:28:42 +00002377def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2378 "ADD_FI32m",
2379 "SUBR_FI16m",
2380 "SUBR_FI32m",
2381 "SUB_FI16m",
2382 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002383 "VROUNDPDYm",
2384 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002385
2386def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2387 let Latency = 12;
2388 let NumMicroOps = 4;
2389 let ResourceCycles = [1,2,1];
2390}
Craig Topper5a69a002018-03-21 06:28:42 +00002391def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002392
Craig Topper8104f262018-04-02 05:33:28 +00002393def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002394 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002395 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002396 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002397}
Craig Topper8104f262018-04-02 05:33:28 +00002398def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2399
2400def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2401 let Latency = 11;
2402 let NumMicroOps = 1;
2403 let ResourceCycles = [1,4];
2404}
2405def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002406
2407def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2408 let Latency = 13;
2409 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002410 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002411}
2412def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2413
Craig Topper8104f262018-04-02 05:33:28 +00002414def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002415 let Latency = 14;
2416 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002417 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002418}
Craig Topper8104f262018-04-02 05:33:28 +00002419def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2420
2421def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2422 let Latency = 14;
2423 let NumMicroOps = 1;
2424 let ResourceCycles = [1,4];
2425}
2426def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002427
Gadi Haber323f2e12017-10-24 20:19:47 +00002428def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2429 let Latency = 14;
2430 let NumMicroOps = 3;
2431 let ResourceCycles = [1,1,1];
2432}
Craig Topper5a69a002018-03-21 06:28:42 +00002433def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2434 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002435
2436def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2437 let Latency = 14;
2438 let NumMicroOps = 4;
2439 let ResourceCycles = [2,1,1];
2440}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002441def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002442
2443def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2444 let Latency = 14;
2445 let NumMicroOps = 4;
2446 let ResourceCycles = [1,1,1,1];
2447}
Craig Topper5a69a002018-03-21 06:28:42 +00002448def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002449
2450def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2451 let Latency = 14;
2452 let NumMicroOps = 8;
2453 let ResourceCycles = [2,2,1,3];
2454}
2455def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2456
2457def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2458 let Latency = 14;
2459 let NumMicroOps = 10;
2460 let ResourceCycles = [2,3,1,4];
2461}
2462def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2463
2464def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2465 let Latency = 14;
2466 let NumMicroOps = 12;
2467 let ResourceCycles = [2,1,4,5];
2468}
2469def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2470
2471def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2472 let Latency = 15;
2473 let NumMicroOps = 1;
2474 let ResourceCycles = [1];
2475}
Craig Topper5a69a002018-03-21 06:28:42 +00002476def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2477 "DIVR_FST0r",
2478 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002479
Gadi Haber323f2e12017-10-24 20:19:47 +00002480def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2481 let Latency = 15;
2482 let NumMicroOps = 10;
2483 let ResourceCycles = [1,1,1,4,1,2];
2484}
Craig Topper13a16502018-03-19 00:56:09 +00002485def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002486
Craig Topper8104f262018-04-02 05:33:28 +00002487def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002488 let Latency = 16;
2489 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002490 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002491}
Craig Topper5a69a002018-03-21 06:28:42 +00002492def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2493 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002494
2495def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2496 let Latency = 16;
2497 let NumMicroOps = 3;
2498 let ResourceCycles = [2,1];
2499}
2500def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2501
Gadi Haber323f2e12017-10-24 20:19:47 +00002502def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2503 let Latency = 16;
2504 let NumMicroOps = 14;
2505 let ResourceCycles = [1,1,1,4,2,5];
2506}
2507def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2508
2509def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2510 let Latency = 16;
2511 let NumMicroOps = 16;
2512 let ResourceCycles = [16];
2513}
Craig Topper5a69a002018-03-21 06:28:42 +00002514def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002515
Craig Topper8104f262018-04-02 05:33:28 +00002516def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002517 let Latency = 17;
2518 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002519 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002520}
2521def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2522
2523def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2524 let Latency = 17;
2525 let NumMicroOps = 4;
2526 let ResourceCycles = [2,1,1];
2527}
Craig Topper5a69a002018-03-21 06:28:42 +00002528def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2529 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002530
Craig Topper8104f262018-04-02 05:33:28 +00002531def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002532 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002533 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002534 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002535}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002536def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2537 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002538
Gadi Haber323f2e12017-10-24 20:19:47 +00002539def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2540 let Latency = 18;
2541 let NumMicroOps = 8;
2542 let ResourceCycles = [1,1,1,5];
2543}
Craig Topper5a69a002018-03-21 06:28:42 +00002544def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002545def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002546
2547def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2548 let Latency = 18;
2549 let NumMicroOps = 11;
2550 let ResourceCycles = [2,1,1,3,1,3];
2551}
Craig Topper13a16502018-03-19 00:56:09 +00002552def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002553
Craig Topper8104f262018-04-02 05:33:28 +00002554def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002555 let Latency = 19;
2556 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002557 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002558}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002559def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002560 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002561
Gadi Haber323f2e12017-10-24 20:19:47 +00002562def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2563 let Latency = 19;
2564 let NumMicroOps = 5;
2565 let ResourceCycles = [2,1,1,1];
2566}
Craig Topper5a69a002018-03-21 06:28:42 +00002567def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002568
Gadi Haber323f2e12017-10-24 20:19:47 +00002569def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2570 let Latency = 20;
2571 let NumMicroOps = 1;
2572 let ResourceCycles = [1];
2573}
Craig Topper5a69a002018-03-21 06:28:42 +00002574def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2575 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002576 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002577
2578def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2579 let Latency = 20;
2580 let NumMicroOps = 5;
2581 let ResourceCycles = [2,1,1,1];
2582}
2583def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2584
2585def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2586 let Latency = 20;
2587 let NumMicroOps = 8;
2588 let ResourceCycles = [1,1,1,1,1,1,2];
2589}
Craig Topper5a69a002018-03-21 06:28:42 +00002590def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2591 "INSL",
2592 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002593
Craig Topper8104f262018-04-02 05:33:28 +00002594def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002595 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002596 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002597 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002598}
Craig Topper8104f262018-04-02 05:33:28 +00002599def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2600
2601def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2602 let Latency = 16;
2603 let NumMicroOps = 1;
2604 let ResourceCycles = [1,8];
2605}
2606def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002607
2608def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2609 let Latency = 21;
2610 let NumMicroOps = 2;
2611 let ResourceCycles = [1,1];
2612}
Craig Topper5a69a002018-03-21 06:28:42 +00002613def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2614 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002615
Craig Topper8104f262018-04-02 05:33:28 +00002616def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002617 let Latency = 21;
2618 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002619 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002620}
2621def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2622
2623def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2624 let Latency = 21;
2625 let NumMicroOps = 19;
2626 let ResourceCycles = [2,1,4,1,1,4,6];
2627}
2628def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2629
2630def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2631 let Latency = 22;
2632 let NumMicroOps = 18;
2633 let ResourceCycles = [1,1,16];
2634}
2635def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2636
Craig Topper8104f262018-04-02 05:33:28 +00002637def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002638 let Latency = 23;
2639 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002640 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002641}
2642def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2643
Craig Topper8104f262018-04-02 05:33:28 +00002644def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002645 let Latency = 23;
2646 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002647 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002648}
2649def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2650
Gadi Haber323f2e12017-10-24 20:19:47 +00002651def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2652 let Latency = 23;
2653 let NumMicroOps = 19;
2654 let ResourceCycles = [3,1,15];
2655}
Craig Topper391c6f92017-12-10 01:24:08 +00002656def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002657
2658def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2659 let Latency = 24;
2660 let NumMicroOps = 3;
2661 let ResourceCycles = [1,1,1];
2662}
Craig Topper5a69a002018-03-21 06:28:42 +00002663def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2664 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002665
Craig Topper8104f262018-04-02 05:33:28 +00002666def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002667 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002668 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002669 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002670}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002671def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2672 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002673
2674def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2675 let Latency = 26;
2676 let NumMicroOps = 2;
2677 let ResourceCycles = [1,1];
2678}
Craig Topper5a69a002018-03-21 06:28:42 +00002679def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002680 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002681
Craig Topper8104f262018-04-02 05:33:28 +00002682def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002683 let Latency = 27;
2684 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002685 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002686}
2687def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2688
2689def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2690 let Latency = 29;
2691 let NumMicroOps = 3;
2692 let ResourceCycles = [1,1,1];
2693}
Craig Topper5a69a002018-03-21 06:28:42 +00002694def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2695 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002696
Craig Topper8104f262018-04-02 05:33:28 +00002697def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002698 let Latency = 29;
2699 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002700 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002701}
2702def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2703
2704def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2705 let Latency = 22;
2706 let NumMicroOps = 7;
2707 let ResourceCycles = [1,3,2,1];
2708}
Craig Topper17a31182017-12-16 18:35:29 +00002709def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002710
2711def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2712 let Latency = 23;
2713 let NumMicroOps = 9;
2714 let ResourceCycles = [1,3,4,1];
2715}
Craig Topper17a31182017-12-16 18:35:29 +00002716def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002717
2718def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2719 let Latency = 24;
2720 let NumMicroOps = 9;
2721 let ResourceCycles = [1,5,2,1];
2722}
Craig Topper17a31182017-12-16 18:35:29 +00002723def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002724
2725def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2726 let Latency = 25;
2727 let NumMicroOps = 7;
2728 let ResourceCycles = [1,3,2,1];
2729}
Craig Topper17a31182017-12-16 18:35:29 +00002730def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2731 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002732
2733def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2734 let Latency = 26;
2735 let NumMicroOps = 9;
2736 let ResourceCycles = [1,5,2,1];
2737}
Craig Topper17a31182017-12-16 18:35:29 +00002738def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002739
2740def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2741 let Latency = 26;
2742 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002743 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002744}
Craig Topper17a31182017-12-16 18:35:29 +00002745def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002746
2747def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2748 let Latency = 27;
2749 let NumMicroOps = 9;
2750 let ResourceCycles = [1,5,2,1];
2751}
Craig Topper17a31182017-12-16 18:35:29 +00002752def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002753
Gadi Haber323f2e12017-10-24 20:19:47 +00002754def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2755 let Latency = 29;
2756 let NumMicroOps = 27;
2757 let ResourceCycles = [1,5,1,1,19];
2758}
2759def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2760
2761def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2762 let Latency = 30;
2763 let NumMicroOps = 28;
2764 let ResourceCycles = [1,6,1,1,19];
2765}
Craig Topper2d451e72018-03-18 08:38:06 +00002766def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002767
2768def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2769 let Latency = 31;
2770 let NumMicroOps = 31;
2771 let ResourceCycles = [8,1,21,1];
2772}
2773def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2774
Craig Topper8104f262018-04-02 05:33:28 +00002775def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2776 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002777 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002778 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002779}
2780def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2781
2782def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2783 let Latency = 34;
2784 let NumMicroOps = 8;
2785 let ResourceCycles = [2,2,2,1,1];
2786}
Craig Topper13a16502018-03-19 00:56:09 +00002787def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002788
2789def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2790 let Latency = 34;
2791 let NumMicroOps = 23;
2792 let ResourceCycles = [1,5,3,4,10];
2793}
Craig Topper5a69a002018-03-21 06:28:42 +00002794def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2795 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002796
2797def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2798 let Latency = 35;
2799 let NumMicroOps = 8;
2800 let ResourceCycles = [2,2,2,1,1];
2801}
Craig Topper13a16502018-03-19 00:56:09 +00002802def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002803
2804def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2805 let Latency = 35;
2806 let NumMicroOps = 23;
2807 let ResourceCycles = [1,5,2,1,4,10];
2808}
Craig Topper5a69a002018-03-21 06:28:42 +00002809def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2810 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002811
Craig Topper8104f262018-04-02 05:33:28 +00002812def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2813 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002814 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002815 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002816}
2817def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2818
2819def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2820 let Latency = 42;
2821 let NumMicroOps = 22;
2822 let ResourceCycles = [2,20];
2823}
Craig Topper2d451e72018-03-18 08:38:06 +00002824def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002825
2826def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2827 let Latency = 60;
2828 let NumMicroOps = 64;
2829 let ResourceCycles = [2,2,8,1,10,2,39];
2830}
2831def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002832
2833def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2834 let Latency = 63;
2835 let NumMicroOps = 88;
2836 let ResourceCycles = [4,4,31,1,2,1,45];
2837}
Craig Topper2d451e72018-03-18 08:38:06 +00002838def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002839
2840def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2841 let Latency = 63;
2842 let NumMicroOps = 90;
2843 let ResourceCycles = [4,2,33,1,2,1,47];
2844}
Craig Topper2d451e72018-03-18 08:38:06 +00002845def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002846
2847def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2848 let Latency = 75;
2849 let NumMicroOps = 15;
2850 let ResourceCycles = [6,3,6];
2851}
2852def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2853
2854def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2855 let Latency = 80;
2856 let NumMicroOps = 32;
2857 let ResourceCycles = [7,7,3,3,1,11];
2858}
2859def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2860
2861def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2862 let Latency = 115;
2863 let NumMicroOps = 100;
2864 let ResourceCycles = [9,9,11,8,1,11,21,30];
2865}
2866def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002867
2868} // SchedModel
2869