blob: 79a259592629fa84895d9d2d2457919db0b8e7d3 [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub/compare.
158defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
159defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
160defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
161defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
162defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
163defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
164defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000165defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000166defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000167defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000168
169// FMA Scheduling helper class.
170// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
174def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
175def : WriteRes<WriteVecMove, [BWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
178defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
179defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000180defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000181defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000182defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
184defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
185defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber323f2e12017-10-24 20:19:47 +0000186
187// Vector bitwise operations.
188// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector and/or/xor.
Gadi Haber323f2e12017-10-24 20:19:47 +0000190
191// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
193defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
194defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000195
196// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000197
Gadi Haber323f2e12017-10-24 20:19:47 +0000198// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000199def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let Latency = 11;
201 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000202 let ResourceCycles = [3];
203}
204def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205 let Latency = 16;
206 let NumMicroOps = 4;
207 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000208}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000209
210// Packed Compare Explicit Length Strings, Return Mask
211def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
212 let Latency = 19;
213 let NumMicroOps = 9;
214 let ResourceCycles = [4,3,1,1];
215}
216def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
217 let Latency = 24;
218 let NumMicroOps = 10;
219 let ResourceCycles = [4,3,1,1,1];
220}
221
222// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000223def : WriteRes<WritePCmpIStrI, [BWPort0]> {
224 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000226 let ResourceCycles = [3];
227}
228def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229 let Latency = 16;
230 let NumMicroOps = 4;
231 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000232}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233
234// Packed Compare Explicit Length Strings, Return Index
235def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
236 let Latency = 18;
237 let NumMicroOps = 8;
238 let ResourceCycles = [4,3,1];
239}
240def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
241 let Latency = 23;
242 let NumMicroOps = 9;
243 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000244}
245
Simon Pilgrima2f26782018-03-27 20:38:54 +0000246// MOVMSK Instructions.
247def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
248def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
249def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
250
Gadi Haber323f2e12017-10-24 20:19:47 +0000251// AES instructions.
252def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
253 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000255 let ResourceCycles = [1];
256}
257def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000258 let Latency = 12;
259 let NumMicroOps = 2;
260 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000261}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000262
Gadi Haber323f2e12017-10-24 20:19:47 +0000263def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
264 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000266 let ResourceCycles = [2];
267}
268def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let Latency = 19;
270 let NumMicroOps = 3;
271 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000272}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000273
274def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
275 let Latency = 29;
276 let NumMicroOps = 11;
277 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000278}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000279def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
280 let Latency = 33;
281 let NumMicroOps = 11;
282 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000283}
284
285// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000286defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000287
288// Catch-all for expensive system instructions.
289def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
290
291// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000292defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000293defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000295defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000296defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000297
298// Old microcoded instructions that nobody use.
299def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
300
301// Fence instructions.
302def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
303
304// Nop, not very useful expect it provides a model for nops!
305def : WriteRes<WriteNop, []>;
306
307////////////////////////////////////////////////////////////////////////////////
308// Horizontal add/sub instructions.
309////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000310
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000311defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
312defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000313
314// Remaining instrs.
315
316def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
317 let Latency = 1;
318 let NumMicroOps = 1;
319 let ResourceCycles = [1];
320}
Craig Topper5a69a002018-03-21 06:28:42 +0000321def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
322 "MMX_MOVD64grr",
Craig Topper5a69a002018-03-21 06:28:42 +0000323 "MMX_PSLLDri",
324 "MMX_PSLLDrr",
325 "MMX_PSLLQri",
326 "MMX_PSLLQrr",
327 "MMX_PSLLWri",
328 "MMX_PSLLWrr",
329 "MMX_PSRADri",
330 "MMX_PSRADrr",
331 "MMX_PSRAWri",
332 "MMX_PSRAWrr",
333 "MMX_PSRLDri",
334 "MMX_PSRLDrr",
335 "MMX_PSRLQri",
336 "MMX_PSRLQrr",
337 "MMX_PSRLWri",
338 "MMX_PSRLWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000339 "(V?)MOVPDI2DIrr",
340 "(V?)MOVPQIto64rr",
341 "(V?)PSLLD(Y?)ri",
342 "(V?)PSLLQ(Y?)ri",
343 "VPSLLVQ(Y?)rr",
344 "(V?)PSLLW(Y?)ri",
345 "(V?)PSRAD(Y?)ri",
346 "(V?)PSRAW(Y?)ri",
347 "(V?)PSRLD(Y?)ri",
348 "(V?)PSRLQ(Y?)ri",
349 "VPSRLVQ(Y?)rr",
350 "(V?)PSRLW(Y?)ri",
351 "VTESTPD(Y?)rr",
352 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000353
354def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
355 let Latency = 1;
356 let NumMicroOps = 1;
357 let ResourceCycles = [1];
358}
Craig Topper5a69a002018-03-21 06:28:42 +0000359def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
360 "COM_FST0r",
361 "UCOM_FPr",
362 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000363
364def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
365 let Latency = 1;
366 let NumMicroOps = 1;
367 let ResourceCycles = [1];
368}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000369def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000370 "MMX_MOVD64to64rr",
371 "MMX_MOVQ2DQrr",
372 "MMX_PALIGNRrri",
Craig Topper5a69a002018-03-21 06:28:42 +0000373 "MMX_PSHUFWri",
374 "MMX_PUNPCKHBWirr",
375 "MMX_PUNPCKHDQirr",
376 "MMX_PUNPCKHWDirr",
377 "MMX_PUNPCKLBWirr",
378 "MMX_PUNPCKLDQirr",
379 "MMX_PUNPCKLWDirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000380 "(V?)ANDNPD(Y?)rr",
381 "(V?)ANDNPS(Y?)rr",
382 "(V?)ANDPD(Y?)rr",
383 "(V?)ANDPS(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000384 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000385 "(V?)INSERTPSrr",
386 "(V?)MOV64toPQIrr",
387 "(V?)MOVAPD(Y?)rr",
388 "(V?)MOVAPS(Y?)rr",
389 "(V?)MOVDDUP(Y?)rr",
390 "(V?)MOVDI2PDIrr",
391 "(V?)MOVHLPSrr",
392 "(V?)MOVLHPSrr",
393 "(V?)MOVSDrr",
394 "(V?)MOVSHDUP(Y?)rr",
395 "(V?)MOVSLDUP(Y?)rr",
396 "(V?)MOVSSrr",
397 "(V?)MOVUPD(Y?)rr",
398 "(V?)MOVUPS(Y?)rr",
399 "(V?)ORPD(Y?)rr",
400 "(V?)ORPS(Y?)rr",
401 "(V?)PACKSSDW(Y?)rr",
402 "(V?)PACKSSWB(Y?)rr",
403 "(V?)PACKUSDW(Y?)rr",
404 "(V?)PACKUSWB(Y?)rr",
405 "(V?)PALIGNR(Y?)rri",
406 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000407 "VPBROADCASTDrr",
408 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000409 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000410 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000411 "(V?)PMOVSXBDrr",
412 "(V?)PMOVSXBQrr",
413 "(V?)PMOVSXBWrr",
414 "(V?)PMOVSXDQrr",
415 "(V?)PMOVSXWDrr",
416 "(V?)PMOVSXWQrr",
417 "(V?)PMOVZXBDrr",
418 "(V?)PMOVZXBQrr",
419 "(V?)PMOVZXBWrr",
420 "(V?)PMOVZXDQrr",
421 "(V?)PMOVZXWDrr",
422 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000423 "(V?)PSHUFD(Y?)ri",
424 "(V?)PSHUFHW(Y?)ri",
425 "(V?)PSHUFLW(Y?)ri",
426 "(V?)PSLLDQ(Y?)ri",
427 "(V?)PSRLDQ(Y?)ri",
428 "(V?)PUNPCKHBW(Y?)rr",
429 "(V?)PUNPCKHDQ(Y?)rr",
430 "(V?)PUNPCKHQDQ(Y?)rr",
431 "(V?)PUNPCKHWD(Y?)rr",
432 "(V?)PUNPCKLBW(Y?)rr",
433 "(V?)PUNPCKLDQ(Y?)rr",
434 "(V?)PUNPCKLQDQ(Y?)rr",
435 "(V?)PUNPCKLWD(Y?)rr",
436 "(V?)SHUFPD(Y?)rri",
437 "(V?)SHUFPS(Y?)rri",
438 "(V?)UNPCKHPD(Y?)rr",
439 "(V?)UNPCKHPS(Y?)rr",
440 "(V?)UNPCKLPD(Y?)rr",
441 "(V?)UNPCKLPS(Y?)rr",
442 "(V?)XORPD(Y?)rr",
443 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000444
445def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
446 let Latency = 1;
447 let NumMicroOps = 1;
448 let ResourceCycles = [1];
449}
450def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
451
452def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
453 let Latency = 1;
454 let NumMicroOps = 1;
455 let ResourceCycles = [1];
456}
Craig Topper5a69a002018-03-21 06:28:42 +0000457def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
458 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000459
460def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
461 let Latency = 1;
462 let NumMicroOps = 1;
463 let ResourceCycles = [1];
464}
Craig Topperfbe31322018-04-05 21:56:19 +0000465def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000466def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
467 "ADC(16|32|64)i",
468 "ADC(8|16|32|64)rr",
469 "ADCX(32|64)rr",
470 "ADOX(32|64)rr",
471 "BT(16|32|64)ri8",
472 "BT(16|32|64)rr",
473 "BTC(16|32|64)ri8",
474 "BTC(16|32|64)rr",
475 "BTR(16|32|64)ri8",
476 "BTR(16|32|64)rr",
477 "BTS(16|32|64)ri8",
478 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000479 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
480 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
481 "JMP_1",
482 "JMP_4",
483 "RORX(32|64)ri",
484 "SAR(8|16|32|64)r1",
485 "SAR(8|16|32|64)ri",
486 "SARX(32|64)rr",
487 "SBB(16|32|64)ri",
488 "SBB(16|32|64)i",
489 "SBB(8|16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000490 "SHL(8|16|32|64)r1",
491 "SHL(8|16|32|64)ri",
492 "SHLX(32|64)rr",
493 "SHR(8|16|32|64)r1",
494 "SHR(8|16|32|64)ri",
495 "SHRX(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000496
497def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
498 let Latency = 1;
499 let NumMicroOps = 1;
500 let ResourceCycles = [1];
501}
Craig Topper5a69a002018-03-21 06:28:42 +0000502def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
503 "BLSI(32|64)rr",
504 "BLSMSK(32|64)rr",
505 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000506 "LEA(16|32|64)(_32)?r",
507 "MMX_PABSBrr",
508 "MMX_PABSDrr",
509 "MMX_PABSWrr",
510 "MMX_PADDBirr",
511 "MMX_PADDDirr",
512 "MMX_PADDQirr",
513 "MMX_PADDSBirr",
514 "MMX_PADDSWirr",
515 "MMX_PADDUSBirr",
516 "MMX_PADDUSWirr",
517 "MMX_PADDWirr",
518 "MMX_PAVGBirr",
519 "MMX_PAVGWirr",
520 "MMX_PCMPEQBirr",
521 "MMX_PCMPEQDirr",
522 "MMX_PCMPEQWirr",
523 "MMX_PCMPGTBirr",
524 "MMX_PCMPGTDirr",
525 "MMX_PCMPGTWirr",
526 "MMX_PMAXSWirr",
527 "MMX_PMAXUBirr",
528 "MMX_PMINSWirr",
529 "MMX_PMINUBirr",
530 "MMX_PSIGNBrr",
531 "MMX_PSIGNDrr",
532 "MMX_PSIGNWrr",
533 "MMX_PSUBBirr",
534 "MMX_PSUBDirr",
535 "MMX_PSUBQirr",
536 "MMX_PSUBSBirr",
537 "MMX_PSUBSWirr",
538 "MMX_PSUBUSBirr",
539 "MMX_PSUBUSWirr",
540 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000541 "(V?)PABSB(Y?)rr",
542 "(V?)PABSD(Y?)rr",
543 "(V?)PABSW(Y?)rr",
544 "(V?)PADDB(Y?)rr",
545 "(V?)PADDD(Y?)rr",
546 "(V?)PADDQ(Y?)rr",
547 "(V?)PADDSB(Y?)rr",
548 "(V?)PADDSW(Y?)rr",
549 "(V?)PADDUSB(Y?)rr",
550 "(V?)PADDUSW(Y?)rr",
551 "(V?)PADDW(Y?)rr",
552 "(V?)PAVGB(Y?)rr",
553 "(V?)PAVGW(Y?)rr",
554 "(V?)PCMPEQB(Y?)rr",
555 "(V?)PCMPEQD(Y?)rr",
556 "(V?)PCMPEQQ(Y?)rr",
557 "(V?)PCMPEQW(Y?)rr",
558 "(V?)PCMPGTB(Y?)rr",
559 "(V?)PCMPGTD(Y?)rr",
560 "(V?)PCMPGTW(Y?)rr",
561 "(V?)PMAXSB(Y?)rr",
562 "(V?)PMAXSD(Y?)rr",
563 "(V?)PMAXSW(Y?)rr",
564 "(V?)PMAXUB(Y?)rr",
565 "(V?)PMAXUD(Y?)rr",
566 "(V?)PMAXUW(Y?)rr",
567 "(V?)PMINSB(Y?)rr",
568 "(V?)PMINSD(Y?)rr",
569 "(V?)PMINSW(Y?)rr",
570 "(V?)PMINUB(Y?)rr",
571 "(V?)PMINUD(Y?)rr",
572 "(V?)PMINUW(Y?)rr",
573 "(V?)PSIGNB(Y?)rr",
574 "(V?)PSIGND(Y?)rr",
575 "(V?)PSIGNW(Y?)rr",
576 "(V?)PSUBB(Y?)rr",
577 "(V?)PSUBD(Y?)rr",
578 "(V?)PSUBQ(Y?)rr",
579 "(V?)PSUBSB(Y?)rr",
580 "(V?)PSUBSW(Y?)rr",
581 "(V?)PSUBUSB(Y?)rr",
582 "(V?)PSUBUSW(Y?)rr",
583 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000584
585def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
586 let Latency = 1;
587 let NumMicroOps = 1;
588 let ResourceCycles = [1];
589}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000590def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000591 "MMX_PANDNirr",
592 "MMX_PANDirr",
593 "MMX_PORirr",
594 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000595 "(V?)BLENDPD(Y?)rri",
596 "(V?)BLENDPS(Y?)rri",
597 "(V?)MOVDQA(Y?)rr",
598 "(V?)MOVDQU(Y?)rr",
599 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000600 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000601 "(V?)PANDN(Y?)rr",
602 "(V?)PAND(Y?)rr",
603 "VPBLENDD(Y?)rri",
604 "(V?)POR(Y?)rr",
605 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000606
607def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
608 let Latency = 1;
609 let NumMicroOps = 1;
610 let ResourceCycles = [1];
611}
Craig Topperfbe31322018-04-05 21:56:19 +0000612def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000613def: InstRW<[BWWriteResGroup9], (instregex "CLC",
Craig Topper5a69a002018-03-21 06:28:42 +0000614 "CMC",
Craig Topper5a69a002018-03-21 06:28:42 +0000615 "LAHF",
Craig Topper5a69a002018-03-21 06:28:42 +0000616 "NOOP",
Craig Topper5a69a002018-03-21 06:28:42 +0000617 "SAHF",
618 "SGDT64m",
619 "SIDT64m",
620 "SLDT64m",
621 "SMSW16m",
622 "STC",
623 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000624 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000625 "XCHG(16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000626
627def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
628 let Latency = 1;
629 let NumMicroOps = 2;
630 let ResourceCycles = [1,1];
631}
Craig Topper5a69a002018-03-21 06:28:42 +0000632def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
633 "MMX_MOVD64from64rm",
634 "MMX_MOVD64mr",
635 "MMX_MOVNTQmr",
636 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000637 "MOVNTI_64mr",
638 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "ST_FP32m",
640 "ST_FP64m",
641 "ST_FP80m",
642 "VEXTRACTF128mr",
643 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000644 "(V?)MOVAPD(Y?)mr",
645 "(V?)MOVAPS(Y?)mr",
646 "(V?)MOVDQA(Y?)mr",
647 "(V?)MOVDQU(Y?)mr",
648 "(V?)MOVHPDmr",
649 "(V?)MOVHPSmr",
650 "(V?)MOVLPDmr",
651 "(V?)MOVLPSmr",
652 "(V?)MOVNTDQ(V?)mr",
653 "(V?)MOVNTPD(V?)mr",
654 "(V?)MOVNTPS(V?)mr",
655 "(V?)MOVPDI2DImr",
656 "(V?)MOVPQI2QImr",
657 "(V?)MOVPQIto64mr",
658 "(V?)MOVSDmr",
659 "(V?)MOVSSmr",
660 "(V?)MOVUPD(Y?)mr",
661 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000662
663def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
664 let Latency = 2;
665 let NumMicroOps = 2;
666 let ResourceCycles = [2];
667}
Craig Topper5a69a002018-03-21 06:28:42 +0000668def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
669 "BLENDVPSrr0",
670 "MMX_PINSRWrr",
671 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000672 "VBLENDVPD(Y?)rr",
673 "VBLENDVPS(Y?)rr",
674 "VPBLENDVB(Y?)rr",
675 "(V?)PINSRBrr",
676 "(V?)PINSRDrr",
677 "(V?)PINSRQrr",
678 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000679
680def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
681 let Latency = 2;
682 let NumMicroOps = 2;
683 let ResourceCycles = [2];
684}
685def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
686
687def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
688 let Latency = 2;
689 let NumMicroOps = 2;
690 let ResourceCycles = [2];
691}
Craig Topper5a69a002018-03-21 06:28:42 +0000692def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
693 "ROL(8|16|32|64)ri",
694 "ROR(8|16|32|64)r1",
695 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000696
697def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
698 let Latency = 2;
699 let NumMicroOps = 2;
700 let ResourceCycles = [2];
701}
Craig Topper5a69a002018-03-21 06:28:42 +0000702def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
703 "MFENCE",
704 "WAIT",
705 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000706
707def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
708 let Latency = 2;
709 let NumMicroOps = 2;
710 let ResourceCycles = [1,1];
711}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000712def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
713 "VCVTPH2PS(Y?)rr",
714 "(V?)CVTPS2PDrr",
715 "(V?)CVTSS2SDrr",
716 "(V?)EXTRACTPSrr",
717 "(V?)PEXTRBrr",
718 "(V?)PEXTRDrr",
719 "(V?)PEXTRQrr",
720 "(V?)PEXTRWrr",
721 "(V?)PSLLDrr",
722 "(V?)PSLLQrr",
723 "(V?)PSLLWrr",
724 "(V?)PSRADrr",
725 "(V?)PSRAWrr",
726 "(V?)PSRLDrr",
727 "(V?)PSRLQrr",
728 "(V?)PSRLWrr",
729 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000730
731def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
732 let Latency = 2;
733 let NumMicroOps = 2;
734 let ResourceCycles = [1,1];
735}
736def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
737
738def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
739 let Latency = 2;
740 let NumMicroOps = 2;
741 let ResourceCycles = [1,1];
742}
743def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
744
745def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
746 let Latency = 2;
747 let NumMicroOps = 2;
748 let ResourceCycles = [1,1];
749}
750def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
751
752def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
753 let Latency = 2;
754 let NumMicroOps = 2;
755 let ResourceCycles = [1,1];
756}
Craig Topper498875f2018-04-04 17:54:19 +0000757def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
758
759def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
760 let Latency = 1;
761 let NumMicroOps = 1;
762 let ResourceCycles = [1];
763}
764def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000765
766def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
767 let Latency = 2;
768 let NumMicroOps = 2;
769 let ResourceCycles = [1,1];
770}
Craig Topper2d451e72018-03-18 08:38:06 +0000771def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000772def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000773def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
774 "ADC8ri",
775 "CMOV(A|BE)(16|32|64)rr",
776 "SBB8i8",
777 "SBB8ri",
778 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000779
780def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
781 let Latency = 2;
782 let NumMicroOps = 3;
783 let ResourceCycles = [1,1,1];
784}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000785def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
786 "(V?)PEXTRBmr",
787 "(V?)PEXTRDmr",
788 "(V?)PEXTRQmr",
789 "(V?)PEXTRWmr",
790 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000791
792def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
793 let Latency = 2;
794 let NumMicroOps = 3;
795 let ResourceCycles = [1,1,1];
796}
797def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
798
Gadi Haber323f2e12017-10-24 20:19:47 +0000799def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
800 let Latency = 2;
801 let NumMicroOps = 3;
802 let ResourceCycles = [1,1,1];
803}
804def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
805
806def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
807 let Latency = 2;
808 let NumMicroOps = 3;
809 let ResourceCycles = [1,1,1];
810}
Craig Topper2d451e72018-03-18 08:38:06 +0000811def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000812def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
813 "PUSH64i8",
814 "STOSB",
815 "STOSL",
816 "STOSQ",
817 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000818
Gadi Haber323f2e12017-10-24 20:19:47 +0000819def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
820 let Latency = 3;
821 let NumMicroOps = 1;
822 let ResourceCycles = [1];
823}
Clement Courbet327fac42018-03-07 08:14:02 +0000824def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000825def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000826def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000827 "ADD_FST0r",
828 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000829 "MMX_CVTPI2PSirr",
830 "PDEP(32|64)rr",
831 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000832 "SHLD(16|32|64)rri8",
833 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000834 "SUBR_FPrST0",
835 "SUBR_FST0r",
836 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000837 "SUB_FPrST0",
838 "SUB_FST0r",
839 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000840 "(V?)ADDPD(Y?)rr",
841 "(V?)ADDPS(Y?)rr",
842 "(V?)ADDSDrr",
843 "(V?)ADDSSrr",
844 "(V?)ADDSUBPD(Y?)rr",
845 "(V?)ADDSUBPS(Y?)rr",
846 "(V?)CMPPD(Y?)rri",
847 "(V?)CMPPS(Y?)rri",
848 "(V?)CMPSDrr",
849 "(V?)CMPSSrr",
850 "(V?)COMISDrr",
851 "(V?)COMISSrr",
852 "(V?)CVTDQ2PS(Y?)rr",
853 "(V?)CVTPS2DQ(Y?)rr",
854 "(V?)CVTTPS2DQ(Y?)rr",
855 "(V?)MAX(C?)PD(Y?)rr",
856 "(V?)MAX(C?)PS(Y?)rr",
857 "(V?)MAX(C?)SDrr",
858 "(V?)MAX(C?)SSrr",
859 "(V?)MIN(C?)PD(Y?)rr",
860 "(V?)MIN(C?)PS(Y?)rr",
861 "(V?)MIN(C?)SDrr",
862 "(V?)MIN(C?)SSrr",
863 "(V?)SUBPD(Y?)rr",
864 "(V?)SUBPS(Y?)rr",
865 "(V?)SUBSDrr",
866 "(V?)SUBSSrr",
867 "(V?)UCOMISDrr",
868 "(V?)UCOMISSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000869
870def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
871 let Latency = 3;
872 let NumMicroOps = 2;
873 let ResourceCycles = [1,1];
874}
Clement Courbet327fac42018-03-07 08:14:02 +0000875def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000876
877def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
878 let Latency = 3;
879 let NumMicroOps = 1;
880 let ResourceCycles = [1];
881}
Craig Topper5a69a002018-03-21 06:28:42 +0000882def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
883 "VBROADCASTSSYrr",
884 "VEXTRACTF128rr",
885 "VEXTRACTI128rr",
886 "VINSERTF128rr",
887 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000888 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000889 "VPBROADCASTDYrr",
890 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000891 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000892 "VPERM2F128rr",
893 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000894 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000895 "VPERMQYri",
896 "VPMOVSXBDYrr",
897 "VPMOVSXBQYrr",
898 "VPMOVSXBWYrr",
899 "VPMOVSXDQYrr",
900 "VPMOVSXWDYrr",
901 "VPMOVSXWQYrr",
902 "VPMOVZXBDYrr",
903 "VPMOVZXBQYrr",
904 "VPMOVZXBWYrr",
905 "VPMOVZXDQYrr",
906 "VPMOVZXWDYrr",
907 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
910 let Latency = 3;
911 let NumMicroOps = 1;
912 let ResourceCycles = [1];
913}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000914def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
915 "(V?)MULPS(Y?)rr",
916 "(V?)MULSDrr",
917 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000918
919def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
920 let Latency = 3;
921 let NumMicroOps = 3;
922 let ResourceCycles = [3];
923}
Craig Topper5a69a002018-03-21 06:28:42 +0000924def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
925 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000926
927def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
928 let Latency = 3;
929 let NumMicroOps = 3;
930 let ResourceCycles = [2,1];
931}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000932def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
933 "VPSRAVD(Y?)rr",
934 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000935
936def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
937 let Latency = 3;
938 let NumMicroOps = 3;
939 let ResourceCycles = [2,1];
940}
Craig Topper5a69a002018-03-21 06:28:42 +0000941def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
942 "MMX_PHADDSWrr",
943 "MMX_PHADDWrr",
944 "MMX_PHSUBDrr",
945 "MMX_PHSUBSWrr",
946 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000947 "(V?)PHADDD(Y?)rr",
948 "(V?)PHADDSW(Y?)rr",
949 "(V?)PHADDW(Y?)rr",
950 "(V?)PHSUBD(Y?)rr",
951 "(V?)PHSUBSW(Y?)rr",
952 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000953
954def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
955 let Latency = 3;
956 let NumMicroOps = 3;
957 let ResourceCycles = [2,1];
958}
Craig Topper5a69a002018-03-21 06:28:42 +0000959def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
960 "MMX_PACKSSWBirr",
961 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000962
963def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
964 let Latency = 3;
965 let NumMicroOps = 3;
966 let ResourceCycles = [1,2];
967}
968def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
969
970def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
971 let Latency = 3;
972 let NumMicroOps = 3;
973 let ResourceCycles = [1,2];
974}
Craig Topper5a69a002018-03-21 06:28:42 +0000975def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
976 "RCL(8|16|32|64)ri",
977 "RCR(8|16|32|64)r1",
978 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000979
980def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
981 let Latency = 3;
982 let NumMicroOps = 3;
983 let ResourceCycles = [2,1];
984}
Craig Topper5a69a002018-03-21 06:28:42 +0000985def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
986 "ROR(8|16|32|64)rCL",
987 "SAR(8|16|32|64)rCL",
988 "SHL(8|16|32|64)rCL",
989 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000990
991def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
992 let Latency = 3;
993 let NumMicroOps = 4;
994 let ResourceCycles = [1,1,1,1];
995}
996def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
997
998def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
999 let Latency = 3;
1000 let NumMicroOps = 4;
1001 let ResourceCycles = [1,1,1,1];
1002}
Craig Topper5a69a002018-03-21 06:28:42 +00001003def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
1004 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001005
1006def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
1007 let Latency = 4;
1008 let NumMicroOps = 2;
1009 let ResourceCycles = [1,1];
1010}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001011def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
1012 "(V?)CVTSD2SIrr",
1013 "(V?)CVTSS2SI64rr",
1014 "(V?)CVTSS2SIrr",
1015 "(V?)CVTTSD2SI64rr",
1016 "(V?)CVTTSD2SIrr",
1017 "(V?)CVTTSS2SI64rr",
1018 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001019
1020def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1021 let Latency = 4;
1022 let NumMicroOps = 2;
1023 let ResourceCycles = [1,1];
1024}
Craig Topper5a69a002018-03-21 06:28:42 +00001025def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1026 "VPSLLDYrr",
1027 "VPSLLQYrr",
1028 "VPSLLWYrr",
1029 "VPSRADYrr",
1030 "VPSRAWYrr",
1031 "VPSRLDYrr",
1032 "VPSRLQYrr",
1033 "VPSRLWYrr",
1034 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001035
1036def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1037 let Latency = 4;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [1,1];
1040}
1041def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1042
1043def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1044 let Latency = 4;
1045 let NumMicroOps = 2;
1046 let ResourceCycles = [1,1];
1047}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001048def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001049def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001050 "MMX_CVTPI2PDirr",
1051 "MMX_CVTPS2PIirr",
1052 "MMX_CVTTPD2PIirr",
1053 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001054 "(V?)CVTDQ2PDrr",
1055 "(V?)CVTPD2DQrr",
1056 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001057 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001058 "(V?)CVTSD2SSrr",
1059 "(V?)CVTSI642SDrr",
1060 "(V?)CVTSI2SDrr",
1061 "(V?)CVTSI2SSrr",
1062 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001063
1064def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1065 let Latency = 4;
1066 let NumMicroOps = 4;
1067}
Craig Topper5a69a002018-03-21 06:28:42 +00001068def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001069
1070def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1071 let Latency = 4;
1072 let NumMicroOps = 3;
1073 let ResourceCycles = [1,1,1];
1074}
1075def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1076
1077def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1078 let Latency = 4;
1079 let NumMicroOps = 3;
1080 let ResourceCycles = [1,1,1];
1081}
Craig Topper5a69a002018-03-21 06:28:42 +00001082def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1083 "ISTT_FP32m",
1084 "ISTT_FP64m",
1085 "IST_F16m",
1086 "IST_F32m",
1087 "IST_FP16m",
1088 "IST_FP32m",
1089 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001090 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001091
1092def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1093 let Latency = 4;
1094 let NumMicroOps = 4;
1095 let ResourceCycles = [4];
1096}
1097def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1098
1099def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1100 let Latency = 4;
1101 let NumMicroOps = 4;
1102 let ResourceCycles = [1,3];
1103}
1104def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1105
1106def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1107 let Latency = 5;
1108 let NumMicroOps = 1;
1109 let ResourceCycles = [1];
1110}
Craig Topper5a69a002018-03-21 06:28:42 +00001111def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1112 "MMX_PMADDWDirr",
1113 "MMX_PMULHRSWrr",
1114 "MMX_PMULHUWirr",
1115 "MMX_PMULHWirr",
1116 "MMX_PMULLWirr",
1117 "MMX_PMULUDQirr",
1118 "MMX_PSADBWirr",
1119 "MUL_FPrST0",
1120 "MUL_FST0r",
1121 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001122 "(V?)PCMPGTQ(Y?)rr",
1123 "(V?)PHMINPOSUWrr",
1124 "(V?)PMADDUBSW(Y?)rr",
1125 "(V?)PMADDWD(Y?)rr",
1126 "(V?)PMULDQ(Y?)rr",
1127 "(V?)PMULHRSW(Y?)rr",
1128 "(V?)PMULHUW(Y?)rr",
1129 "(V?)PMULHW(Y?)rr",
1130 "(V?)PMULLW(Y?)rr",
1131 "(V?)PMULUDQ(Y?)rr",
1132 "(V?)PSADBW(Y?)rr",
1133 "(V?)RCPPSr",
1134 "(V?)RCPSSr",
1135 "(V?)RSQRTPSr",
1136 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001137
1138def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1139 let Latency = 5;
1140 let NumMicroOps = 1;
1141 let ResourceCycles = [1];
1142}
Craig Topperf82867c2017-12-13 23:11:30 +00001143def: InstRW<[BWWriteResGroup48],
1144 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1145 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001146
1147def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1148 let Latency = 5;
1149 let NumMicroOps = 1;
1150 let ResourceCycles = [1];
1151}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001152def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001153 "MMX_MOVD64to64rm",
1154 "MMX_MOVQ64rm",
1155 "MOV(16|32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001156 "MOVSX(16|32|64)rm16",
1157 "MOVSX(16|32|64)rm32",
1158 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001159 "MOVZX(16|32|64)rm16",
1160 "MOVZX(16|32|64)rm8",
1161 "PREFETCHNTA",
1162 "PREFETCHT0",
1163 "PREFETCHT1",
1164 "PREFETCHT2",
1165 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001166 "(V?)LDDQUrm",
1167 "(V?)MOV64toPQIrm",
1168 "(V?)MOVAPDrm",
1169 "(V?)MOVAPSrm",
1170 "(V?)MOVDDUPrm",
1171 "(V?)MOVDI2PDIrm",
1172 "(V?)MOVDQArm",
1173 "(V?)MOVDQUrm",
1174 "(V?)MOVNTDQArm",
1175 "(V?)MOVQI2PQIrm",
1176 "(V?)MOVSDrm",
1177 "(V?)MOVSHDUPrm",
1178 "(V?)MOVSLDUPrm",
1179 "(V?)MOVSSrm",
1180 "(V?)MOVUPDrm",
1181 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001182 "VPBROADCASTDrm",
1183 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001184
1185def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1186 let Latency = 5;
1187 let NumMicroOps = 3;
1188 let ResourceCycles = [1,2];
1189}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001190def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1191 "(V?)HADDPD(Y?)rr",
1192 "(V?)HADDPS(Y?)rr",
1193 "(V?)HSUBPD(Y?)rr",
1194 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001195
1196def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1197 let Latency = 5;
1198 let NumMicroOps = 3;
1199 let ResourceCycles = [1,1,1];
1200}
1201def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1202
1203def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001204 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001205 let NumMicroOps = 3;
1206 let ResourceCycles = [1,1,1];
1207}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001208def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001209
1210def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1211 let Latency = 5;
1212 let NumMicroOps = 4;
1213 let ResourceCycles = [1,1,1,1];
1214}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001215def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1216 "VMASKMOVPS(Y?)mr",
1217 "VPMASKMOVD(Y?)mr",
1218 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001219
1220def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1221 let Latency = 5;
1222 let NumMicroOps = 5;
1223 let ResourceCycles = [1,4];
1224}
1225def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1226
1227def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1228 let Latency = 5;
1229 let NumMicroOps = 5;
1230 let ResourceCycles = [1,4];
1231}
1232def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1233
1234def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1235 let Latency = 5;
1236 let NumMicroOps = 5;
1237 let ResourceCycles = [2,3];
1238}
Craig Topper5a69a002018-03-21 06:28:42 +00001239def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001240
1241def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1242 let Latency = 5;
1243 let NumMicroOps = 6;
1244 let ResourceCycles = [1,1,4];
1245}
Craig Topper5a69a002018-03-21 06:28:42 +00001246def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001247
1248def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1249 let Latency = 6;
1250 let NumMicroOps = 1;
1251 let ResourceCycles = [1];
1252}
Craig Topper5a69a002018-03-21 06:28:42 +00001253def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1254 "LD_F64m",
1255 "LD_F80m",
1256 "VBROADCASTF128",
1257 "VBROADCASTI128",
1258 "VBROADCASTSDYrm",
1259 "VBROADCASTSSYrm",
1260 "VLDDQUYrm",
1261 "VMOVAPDYrm",
1262 "VMOVAPSYrm",
1263 "VMOVDDUPYrm",
1264 "VMOVDQAYrm",
1265 "VMOVDQUYrm",
1266 "VMOVNTDQAYrm",
1267 "VMOVSHDUPYrm",
1268 "VMOVSLDUPYrm",
1269 "VMOVUPDYrm",
1270 "VMOVUPSYrm",
1271 "VPBROADCASTDYrm",
1272 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001273 "(V?)ROUNDPD(Y?)r",
1274 "(V?)ROUNDPS(Y?)r",
1275 "(V?)ROUNDSDr",
1276 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001277
1278def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1279 let Latency = 6;
1280 let NumMicroOps = 2;
1281 let ResourceCycles = [1,1];
1282}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001283def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001284 "MMX_PSLLQrm",
1285 "MMX_PSLLWrm",
1286 "MMX_PSRADrm",
1287 "MMX_PSRAWrm",
1288 "MMX_PSRLDrm",
1289 "MMX_PSRLQrm",
1290 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001291 "VCVTPH2PS(Y?)rm",
1292 "(V?)CVTPS2PDrm",
1293 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001294 "VPSLLVQrm",
1295 "VPSRLVQrm",
1296 "VTESTPDrm",
1297 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001298
1299def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1300 let Latency = 6;
1301 let NumMicroOps = 2;
1302 let ResourceCycles = [1,1];
1303}
Craig Topper5a69a002018-03-21 06:28:42 +00001304def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1305 "VCVTPD2DQYrr",
1306 "VCVTPD2PSYrr",
1307 "VCVTPS2PHYrr",
1308 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001309
1310def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1311 let Latency = 6;
1312 let NumMicroOps = 2;
1313 let ResourceCycles = [1,1];
1314}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001315def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001316 "MMX_PINSRWrm",
1317 "MMX_PSHUFBrm",
1318 "MMX_PSHUFWmi",
1319 "MMX_PUNPCKHBWirm",
1320 "MMX_PUNPCKHDQirm",
1321 "MMX_PUNPCKHWDirm",
1322 "MMX_PUNPCKLBWirm",
1323 "MMX_PUNPCKLDQirm",
1324 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001325 "(V?)ANDNPDrm",
1326 "(V?)ANDNPSrm",
1327 "(V?)ANDPDrm",
1328 "(V?)ANDPSrm",
1329 "(V?)INSERTPSrm",
1330 "(V?)MOVHPDrm",
1331 "(V?)MOVHPSrm",
1332 "(V?)MOVLPDrm",
1333 "(V?)MOVLPSrm",
1334 "(V?)ORPDrm",
1335 "(V?)ORPSrm",
1336 "(V?)PACKSSDWrm",
1337 "(V?)PACKSSWBrm",
1338 "(V?)PACKUSDWrm",
1339 "(V?)PACKUSWBrm",
1340 "(V?)PALIGNRrmi",
1341 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001342 "VPERMILPDmi",
1343 "VPERMILPDrm",
1344 "VPERMILPSmi",
1345 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001346 "(V?)PINSRBrm",
1347 "(V?)PINSRDrm",
1348 "(V?)PINSRQrm",
1349 "(V?)PINSRWrm",
1350 "(V?)PMOVSXBDrm",
1351 "(V?)PMOVSXBQrm",
1352 "(V?)PMOVSXBWrm",
1353 "(V?)PMOVSXDQrm",
1354 "(V?)PMOVSXWDrm",
1355 "(V?)PMOVSXWQrm",
1356 "(V?)PMOVZXBDrm",
1357 "(V?)PMOVZXBQrm",
1358 "(V?)PMOVZXBWrm",
1359 "(V?)PMOVZXDQrm",
1360 "(V?)PMOVZXWDrm",
1361 "(V?)PMOVZXWQrm",
1362 "(V?)PSHUFBrm",
1363 "(V?)PSHUFDmi",
1364 "(V?)PSHUFHWmi",
1365 "(V?)PSHUFLWmi",
1366 "(V?)PUNPCKHBWrm",
1367 "(V?)PUNPCKHDQrm",
1368 "(V?)PUNPCKHQDQrm",
1369 "(V?)PUNPCKHWDrm",
1370 "(V?)PUNPCKLBWrm",
1371 "(V?)PUNPCKLDQrm",
1372 "(V?)PUNPCKLQDQrm",
1373 "(V?)PUNPCKLWDrm",
1374 "(V?)SHUFPDrmi",
1375 "(V?)SHUFPSrmi",
1376 "(V?)UNPCKHPDrm",
1377 "(V?)UNPCKHPSrm",
1378 "(V?)UNPCKLPDrm",
1379 "(V?)UNPCKLPSrm",
1380 "(V?)XORPDrm",
1381 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001382
1383def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1384 let Latency = 6;
1385 let NumMicroOps = 2;
1386 let ResourceCycles = [1,1];
1387}
Craig Topper5a69a002018-03-21 06:28:42 +00001388def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1389 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001390
1391def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1392 let Latency = 6;
1393 let NumMicroOps = 2;
1394 let ResourceCycles = [1,1];
1395}
Craig Topperc50570f2018-04-06 17:12:18 +00001396def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8",
Craig Topper5a69a002018-03-21 06:28:42 +00001397 "RORX(32|64)mi",
1398 "SARX(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001399 "SHLX(32|64)rm",
1400 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001401def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1402 ADCX32rm, ADCX64rm,
1403 ADOX32rm, ADOX64rm,
1404 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001405
1406def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1407 let Latency = 6;
1408 let NumMicroOps = 2;
1409 let ResourceCycles = [1,1];
1410}
Craig Topper5a69a002018-03-21 06:28:42 +00001411def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1412 "BLSI(32|64)rm",
1413 "BLSMSK(32|64)rm",
1414 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001415 "MMX_PABSBrm",
1416 "MMX_PABSDrm",
1417 "MMX_PABSWrm",
1418 "MMX_PADDBirm",
1419 "MMX_PADDDirm",
1420 "MMX_PADDQirm",
1421 "MMX_PADDSBirm",
1422 "MMX_PADDSWirm",
1423 "MMX_PADDUSBirm",
1424 "MMX_PADDUSWirm",
1425 "MMX_PADDWirm",
1426 "MMX_PAVGBirm",
1427 "MMX_PAVGWirm",
1428 "MMX_PCMPEQBirm",
1429 "MMX_PCMPEQDirm",
1430 "MMX_PCMPEQWirm",
1431 "MMX_PCMPGTBirm",
1432 "MMX_PCMPGTDirm",
1433 "MMX_PCMPGTWirm",
1434 "MMX_PMAXSWirm",
1435 "MMX_PMAXUBirm",
1436 "MMX_PMINSWirm",
1437 "MMX_PMINUBirm",
1438 "MMX_PSIGNBrm",
1439 "MMX_PSIGNDrm",
1440 "MMX_PSIGNWrm",
1441 "MMX_PSUBBirm",
1442 "MMX_PSUBDirm",
1443 "MMX_PSUBQirm",
1444 "MMX_PSUBSBirm",
1445 "MMX_PSUBSWirm",
1446 "MMX_PSUBUSBirm",
1447 "MMX_PSUBUSWirm",
1448 "MMX_PSUBWirm",
1449 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001450 "(V?)PABSBrm",
1451 "(V?)PABSDrm",
1452 "(V?)PABSWrm",
1453 "(V?)PADDBrm",
1454 "(V?)PADDDrm",
1455 "(V?)PADDQrm",
1456 "(V?)PADDSBrm",
1457 "(V?)PADDSWrm",
1458 "(V?)PADDUSBrm",
1459 "(V?)PADDUSWrm",
1460 "(V?)PADDWrm",
1461 "(V?)PAVGBrm",
1462 "(V?)PAVGWrm",
1463 "(V?)PCMPEQBrm",
1464 "(V?)PCMPEQDrm",
1465 "(V?)PCMPEQQrm",
1466 "(V?)PCMPEQWrm",
1467 "(V?)PCMPGTBrm",
1468 "(V?)PCMPGTDrm",
1469 "(V?)PCMPGTWrm",
1470 "(V?)PMAXSBrm",
1471 "(V?)PMAXSDrm",
1472 "(V?)PMAXSWrm",
1473 "(V?)PMAXUBrm",
1474 "(V?)PMAXUDrm",
1475 "(V?)PMAXUWrm",
1476 "(V?)PMINSBrm",
1477 "(V?)PMINSDrm",
1478 "(V?)PMINSWrm",
1479 "(V?)PMINUBrm",
1480 "(V?)PMINUDrm",
1481 "(V?)PMINUWrm",
1482 "(V?)PSIGNBrm",
1483 "(V?)PSIGNDrm",
1484 "(V?)PSIGNWrm",
1485 "(V?)PSUBBrm",
1486 "(V?)PSUBDrm",
1487 "(V?)PSUBQrm",
1488 "(V?)PSUBSBrm",
1489 "(V?)PSUBSWrm",
1490 "(V?)PSUBUSBrm",
1491 "(V?)PSUBUSWrm",
1492 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001493
1494def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1495 let Latency = 6;
1496 let NumMicroOps = 2;
1497 let ResourceCycles = [1,1];
1498}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001499def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001500 "MMX_PANDirm",
1501 "MMX_PORirm",
1502 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001503 "(V?)BLENDPDrmi",
1504 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001505 "VINSERTF128rm",
1506 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001507 "(V?)PANDNrm",
1508 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001509 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001510 "(V?)PORrm",
1511 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001512
1513def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1514 let Latency = 6;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Craig Topper2d451e72018-03-18 08:38:06 +00001518def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001519def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001520
1521def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1522 let Latency = 6;
1523 let NumMicroOps = 4;
1524 let ResourceCycles = [1,1,2];
1525}
Craig Topper5a69a002018-03-21 06:28:42 +00001526def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1527 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001528
1529def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1530 let Latency = 6;
1531 let NumMicroOps = 4;
1532 let ResourceCycles = [1,1,1,1];
1533}
1534def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1535
1536def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1537 let Latency = 6;
1538 let NumMicroOps = 4;
1539 let ResourceCycles = [1,1,1,1];
1540}
Craig Topper5a69a002018-03-21 06:28:42 +00001541def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1542 "BTR(16|32|64)mi8",
1543 "BTS(16|32|64)mi8",
1544 "SAR(8|16|32|64)m1",
1545 "SAR(8|16|32|64)mi",
1546 "SHL(8|16|32|64)m1",
1547 "SHL(8|16|32|64)mi",
1548 "SHR(8|16|32|64)m1",
1549 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001550
1551def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1552 let Latency = 6;
1553 let NumMicroOps = 4;
1554 let ResourceCycles = [1,1,1,1];
1555}
Craig Topperf0d04262018-04-06 16:16:48 +00001556def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1557 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001558
1559def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1560 let Latency = 6;
1561 let NumMicroOps = 6;
1562 let ResourceCycles = [1,5];
1563}
1564def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1565
Gadi Haber323f2e12017-10-24 20:19:47 +00001566def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1567 let Latency = 7;
1568 let NumMicroOps = 2;
1569 let ResourceCycles = [1,1];
1570}
Craig Topper5a69a002018-03-21 06:28:42 +00001571def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1572 "VPSLLQYrm",
1573 "VPSLLVQYrm",
1574 "VPSLLWYrm",
1575 "VPSRADYrm",
1576 "VPSRAWYrm",
1577 "VPSRLDYrm",
1578 "VPSRLQYrm",
1579 "VPSRLVQYrm",
1580 "VPSRLWYrm",
1581 "VTESTPDYrm",
1582 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001583
1584def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1585 let Latency = 7;
1586 let NumMicroOps = 2;
1587 let ResourceCycles = [1,1];
1588}
Craig Topper5a69a002018-03-21 06:28:42 +00001589def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1590 "FCOM64m",
1591 "FCOMP32m",
1592 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001593
1594def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1595 let Latency = 7;
1596 let NumMicroOps = 2;
1597 let ResourceCycles = [1,1];
1598}
Craig Topper5a69a002018-03-21 06:28:42 +00001599def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1600 "VANDNPSYrm",
1601 "VANDPDYrm",
1602 "VANDPSYrm",
1603 "VORPDYrm",
1604 "VORPSYrm",
1605 "VPACKSSDWYrm",
1606 "VPACKSSWBYrm",
1607 "VPACKUSDWYrm",
1608 "VPACKUSWBYrm",
1609 "VPALIGNRYrmi",
1610 "VPBLENDWYrmi",
1611 "VPERMILPDYmi",
1612 "VPERMILPDYrm",
1613 "VPERMILPSYmi",
1614 "VPERMILPSYrm",
1615 "VPSHUFBYrm",
1616 "VPSHUFDYmi",
1617 "VPSHUFHWYmi",
1618 "VPSHUFLWYmi",
1619 "VPUNPCKHBWYrm",
1620 "VPUNPCKHDQYrm",
1621 "VPUNPCKHQDQYrm",
1622 "VPUNPCKHWDYrm",
1623 "VPUNPCKLBWYrm",
1624 "VPUNPCKLDQYrm",
1625 "VPUNPCKLQDQYrm",
1626 "VPUNPCKLWDYrm",
1627 "VSHUFPDYrmi",
1628 "VSHUFPSYrmi",
1629 "VUNPCKHPDYrm",
1630 "VUNPCKHPSYrm",
1631 "VUNPCKLPDYrm",
1632 "VUNPCKLPSYrm",
1633 "VXORPDYrm",
1634 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001635
1636def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1637 let Latency = 7;
1638 let NumMicroOps = 2;
1639 let ResourceCycles = [1,1];
1640}
Craig Topper5a69a002018-03-21 06:28:42 +00001641def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1642 "VPABSDYrm",
1643 "VPABSWYrm",
1644 "VPADDBYrm",
1645 "VPADDDYrm",
1646 "VPADDQYrm",
1647 "VPADDSBYrm",
1648 "VPADDSWYrm",
1649 "VPADDUSBYrm",
1650 "VPADDUSWYrm",
1651 "VPADDWYrm",
1652 "VPAVGBYrm",
1653 "VPAVGWYrm",
1654 "VPCMPEQBYrm",
1655 "VPCMPEQDYrm",
1656 "VPCMPEQQYrm",
1657 "VPCMPEQWYrm",
1658 "VPCMPGTBYrm",
1659 "VPCMPGTDYrm",
1660 "VPCMPGTWYrm",
1661 "VPMAXSBYrm",
1662 "VPMAXSDYrm",
1663 "VPMAXSWYrm",
1664 "VPMAXUBYrm",
1665 "VPMAXUDYrm",
1666 "VPMAXUWYrm",
1667 "VPMINSBYrm",
1668 "VPMINSDYrm",
1669 "VPMINSWYrm",
1670 "VPMINUBYrm",
1671 "VPMINUDYrm",
1672 "VPMINUWYrm",
1673 "VPSIGNBYrm",
1674 "VPSIGNDYrm",
1675 "VPSIGNWYrm",
1676 "VPSUBBYrm",
1677 "VPSUBDYrm",
1678 "VPSUBQYrm",
1679 "VPSUBSBYrm",
1680 "VPSUBSWYrm",
1681 "VPSUBUSBYrm",
1682 "VPSUBUSWYrm",
1683 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001684
1685def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1686 let Latency = 7;
1687 let NumMicroOps = 2;
1688 let ResourceCycles = [1,1];
1689}
Craig Topper5a69a002018-03-21 06:28:42 +00001690def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1691 "VBLENDPSYrmi",
1692 "VPANDNYrm",
1693 "VPANDYrm",
1694 "VPBLENDDYrmi",
1695 "VPORYrm",
1696 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001697
1698def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1699 let Latency = 7;
1700 let NumMicroOps = 3;
1701 let ResourceCycles = [1,2];
1702}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001703def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001704
1705def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1706 let Latency = 7;
1707 let NumMicroOps = 3;
1708 let ResourceCycles = [2,1];
1709}
Craig Topper5a69a002018-03-21 06:28:42 +00001710def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1711 "BLENDVPSrm0",
1712 "MMX_PACKSSDWirm",
1713 "MMX_PACKSSWBirm",
1714 "MMX_PACKUSWBirm",
1715 "PBLENDVBrm0",
1716 "VBLENDVPDrm",
1717 "VBLENDVPSrm",
1718 "VMASKMOVPDrm",
1719 "VMASKMOVPSrm",
1720 "VPBLENDVBrm",
1721 "VPMASKMOVDrm",
1722 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001723
1724def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1725 let Latency = 7;
1726 let NumMicroOps = 3;
1727 let ResourceCycles = [1,2];
1728}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001729def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1730 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001731
1732def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1733 let Latency = 7;
1734 let NumMicroOps = 3;
1735 let ResourceCycles = [1,1,1];
1736}
Craig Topper5a69a002018-03-21 06:28:42 +00001737def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1738 "PSLLQrm",
1739 "PSLLWrm",
1740 "PSRADrm",
1741 "PSRAWrm",
1742 "PSRLDrm",
1743 "PSRLQrm",
1744 "PSRLWrm",
1745 "PTESTrm",
1746 "VPSLLDrm",
1747 "VPSLLQrm",
1748 "VPSLLWrm",
1749 "VPSRADrm",
1750 "VPSRAWrm",
1751 "VPSRLDrm",
1752 "VPSRLQrm",
1753 "VPSRLWrm",
1754 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001755
1756def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1757 let Latency = 7;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
1761def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1762
1763def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1764 let Latency = 7;
1765 let NumMicroOps = 3;
1766 let ResourceCycles = [1,1,1];
1767}
Craig Topper5a69a002018-03-21 06:28:42 +00001768def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001769
1770def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1771 let Latency = 7;
1772 let NumMicroOps = 3;
1773 let ResourceCycles = [1,1,1];
1774}
Craig Topper5a69a002018-03-21 06:28:42 +00001775def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1776 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001777
Gadi Haber323f2e12017-10-24 20:19:47 +00001778def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1779 let Latency = 7;
1780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,1,1];
1782}
Craig Topperf4cd9082018-01-19 05:47:32 +00001783def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001784
1785def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1786 let Latency = 7;
1787 let NumMicroOps = 5;
1788 let ResourceCycles = [1,1,1,2];
1789}
Craig Topper5a69a002018-03-21 06:28:42 +00001790def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1791 "ROL(8|16|32|64)mi",
1792 "ROR(8|16|32|64)m1",
1793 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
1795def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1796 let Latency = 7;
1797 let NumMicroOps = 5;
1798 let ResourceCycles = [1,1,1,2];
1799}
Craig Topper5a69a002018-03-21 06:28:42 +00001800def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001801
1802def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1803 let Latency = 7;
1804 let NumMicroOps = 5;
1805 let ResourceCycles = [1,1,1,1,1];
1806}
Craig Topper5a69a002018-03-21 06:28:42 +00001807def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1808 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001809
1810def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1811 let Latency = 7;
1812 let NumMicroOps = 7;
1813 let ResourceCycles = [2,2,1,2];
1814}
Craig Topper2d451e72018-03-18 08:38:06 +00001815def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001816
1817def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1818 let Latency = 8;
1819 let NumMicroOps = 2;
1820 let ResourceCycles = [1,1];
1821}
Craig Topperb369cdb2018-01-25 06:57:42 +00001822def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001823def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001824def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001825 "MMX_CVTPS2PIirm",
1826 "MMX_CVTTPS2PIirm",
1827 "PDEP(32|64)rm",
1828 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001829 "(V?)ADDPDrm",
1830 "(V?)ADDPSrm",
1831 "(V?)ADDSDrm",
1832 "(V?)ADDSSrm",
1833 "(V?)ADDSUBPDrm",
1834 "(V?)ADDSUBPSrm",
1835 "(V?)CMPPDrmi",
1836 "(V?)CMPPSrmi",
1837 "(V?)CMPSDrm",
1838 "(V?)CMPSSrm",
1839 "(V?)COMISDrm",
1840 "(V?)COMISSrm",
1841 "(V?)CVTDQ2PSrm",
1842 "(V?)CVTPS2DQrm",
1843 "(V?)CVTTPS2DQrm",
1844 "(V?)MAX(C?)PDrm",
1845 "(V?)MAX(C?)PSrm",
1846 "(V?)MAX(C?)SDrm",
1847 "(V?)MAX(C?)SSrm",
1848 "(V?)MIN(C?)PDrm",
1849 "(V?)MIN(C?)PSrm",
1850 "(V?)MIN(C?)SDrm",
1851 "(V?)MIN(C?)SSrm",
1852 "(V?)SUBPDrm",
1853 "(V?)SUBPSrm",
1854 "(V?)SUBSDrm",
1855 "(V?)SUBSSrm",
1856 "(V?)UCOMISDrm",
1857 "(V?)UCOMISSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001858
1859def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1860 let Latency = 8;
1861 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001862 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001863}
Craig Topperb369cdb2018-01-25 06:57:42 +00001864def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001865
1866def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1867 let Latency = 8;
1868 let NumMicroOps = 5;
1869}
Craig Topper5a69a002018-03-21 06:28:42 +00001870def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001871
Gadi Haber323f2e12017-10-24 20:19:47 +00001872def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1873 let Latency = 8;
1874 let NumMicroOps = 2;
1875 let ResourceCycles = [1,1];
1876}
Craig Topper5a69a002018-03-21 06:28:42 +00001877def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1878 "VPMOVSXBQYrm",
1879 "VPMOVSXBWYrm",
1880 "VPMOVSXDQYrm",
1881 "VPMOVSXWDYrm",
1882 "VPMOVSXWQYrm",
1883 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001884
1885def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1886 let Latency = 8;
1887 let NumMicroOps = 2;
1888 let ResourceCycles = [1,1];
1889}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001890def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1891 "(V?)MULPSrm",
1892 "(V?)MULSDrm",
1893 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001894
1895def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1896 let Latency = 8;
1897 let NumMicroOps = 3;
1898 let ResourceCycles = [2,1];
1899}
Craig Topper5a69a002018-03-21 06:28:42 +00001900def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1901 "VBLENDVPSYrm",
1902 "VMASKMOVPDYrm",
1903 "VMASKMOVPSYrm",
1904 "VPBLENDVBYrm",
1905 "VPMASKMOVDYrm",
1906 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001907
1908def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1909 let Latency = 8;
1910 let NumMicroOps = 4;
1911 let ResourceCycles = [2,1,1];
1912}
Craig Topper5a69a002018-03-21 06:28:42 +00001913def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1914 "VPSRAVDrm",
1915 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001916
1917def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1918 let Latency = 8;
1919 let NumMicroOps = 4;
1920 let ResourceCycles = [2,1,1];
1921}
Craig Topper5a69a002018-03-21 06:28:42 +00001922def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1923 "MMX_PHADDSWrm",
1924 "MMX_PHADDWrm",
1925 "MMX_PHSUBDrm",
1926 "MMX_PHSUBSWrm",
1927 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001928 "(V?)PHADDDrm",
1929 "(V?)PHADDSWrm",
1930 "(V?)PHADDWrm",
1931 "(V?)PHSUBDrm",
1932 "(V?)PHSUBSWrm",
1933 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001934
1935def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1936 let Latency = 8;
1937 let NumMicroOps = 5;
1938 let ResourceCycles = [1,1,1,2];
1939}
Craig Topper5a69a002018-03-21 06:28:42 +00001940def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1941 "RCL(8|16|32|64)mi",
1942 "RCR(8|16|32|64)m1",
1943 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001944
1945def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1946 let Latency = 8;
1947 let NumMicroOps = 5;
1948 let ResourceCycles = [1,1,2,1];
1949}
Craig Topper13a16502018-03-19 00:56:09 +00001950def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001951
1952def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1953 let Latency = 8;
1954 let NumMicroOps = 6;
1955 let ResourceCycles = [1,1,1,3];
1956}
Craig Topper9f834812018-04-01 21:54:24 +00001957def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001958
1959def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1960 let Latency = 8;
1961 let NumMicroOps = 6;
1962 let ResourceCycles = [1,1,1,2,1];
1963}
Craig Topper9f834812018-04-01 21:54:24 +00001964def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001965 "CMPXCHG(8|16|32|64)rm",
1966 "ROL(8|16|32|64)mCL",
1967 "SAR(8|16|32|64)mCL",
1968 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001969 "SHL(8|16|32|64)mCL",
1970 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001971def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1972 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001973
1974def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1975 let Latency = 9;
1976 let NumMicroOps = 2;
1977 let ResourceCycles = [1,1];
1978}
Craig Topper5a69a002018-03-21 06:28:42 +00001979def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1980 "ADD_F64m",
1981 "ILD_F16m",
1982 "ILD_F32m",
1983 "ILD_F64m",
1984 "SUBR_F32m",
1985 "SUBR_F64m",
1986 "SUB_F32m",
1987 "SUB_F64m",
1988 "VADDPDYrm",
1989 "VADDPSYrm",
1990 "VADDSUBPDYrm",
1991 "VADDSUBPSYrm",
1992 "VCMPPDYrmi",
1993 "VCMPPSYrmi",
1994 "VCVTDQ2PSYrm",
1995 "VCVTPS2DQYrm",
1996 "VCVTTPS2DQYrm",
1997 "VMAX(C?)PDYrm",
1998 "VMAX(C?)PSYrm",
1999 "VMIN(C?)PDYrm",
2000 "VMIN(C?)PSYrm",
2001 "VSUBPDYrm",
2002 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002003
2004def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
2005 let Latency = 9;
2006 let NumMicroOps = 2;
2007 let ResourceCycles = [1,1];
2008}
Craig Topper5a69a002018-03-21 06:28:42 +00002009def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
2010 "VPERM2I128rm",
2011 "VPERMDYrm",
2012 "VPERMPDYmi",
2013 "VPERMPSYrm",
2014 "VPERMQYmi",
2015 "VPMOVZXBDYrm",
2016 "VPMOVZXBQYrm",
2017 "VPMOVZXBWYrm",
2018 "VPMOVZXDQYrm",
2019 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002020
2021def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
2022 let Latency = 9;
2023 let NumMicroOps = 2;
2024 let ResourceCycles = [1,1];
2025}
Craig Topper5a69a002018-03-21 06:28:42 +00002026def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
2027 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002028
2029def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2030 let Latency = 9;
2031 let NumMicroOps = 3;
2032 let ResourceCycles = [1,1,1];
2033}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002034def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
2036def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2037 let Latency = 9;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [1,1,1];
2040}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002041def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2042 "(V?)CVTSD2SIrm",
2043 "(V?)CVTSS2SI64rm",
2044 "(V?)CVTSS2SIrm",
2045 "(V?)CVTTSD2SI64rm",
2046 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002047 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002048 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002049
2050def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2051 let Latency = 9;
2052 let NumMicroOps = 3;
2053 let ResourceCycles = [1,1,1];
2054}
2055def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2056
2057def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2058 let Latency = 9;
2059 let NumMicroOps = 3;
2060 let ResourceCycles = [1,1,1];
2061}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002062def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002063def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002064 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002065 "CVTTPD2DQrm",
2066 "MMX_CVTPD2PIirm",
2067 "MMX_CVTPI2PDirm",
2068 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002069 "(V?)CVTDQ2PDrm",
2070 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002071
2072def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2073 let Latency = 9;
2074 let NumMicroOps = 3;
2075 let ResourceCycles = [1,1,1];
2076}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002077def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2078 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002079
2080def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2081 let Latency = 9;
2082 let NumMicroOps = 4;
2083 let ResourceCycles = [2,1,1];
2084}
Craig Topper5a69a002018-03-21 06:28:42 +00002085def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2086 "VPSRAVDYrm",
2087 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002088
2089def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2090 let Latency = 9;
2091 let NumMicroOps = 4;
2092 let ResourceCycles = [2,1,1];
2093}
Craig Topper5a69a002018-03-21 06:28:42 +00002094def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2095 "VPHADDSWYrm",
2096 "VPHADDWYrm",
2097 "VPHSUBDYrm",
2098 "VPHSUBSWYrm",
2099 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002100
2101def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2102 let Latency = 9;
2103 let NumMicroOps = 4;
2104 let ResourceCycles = [1,1,1,1];
2105}
Craig Topper5a69a002018-03-21 06:28:42 +00002106def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2107 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002108
2109def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2110 let Latency = 9;
2111 let NumMicroOps = 5;
2112 let ResourceCycles = [1,1,3];
2113}
2114def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2115
2116def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2117 let Latency = 9;
2118 let NumMicroOps = 5;
2119 let ResourceCycles = [1,2,1,1];
2120}
Craig Topper5a69a002018-03-21 06:28:42 +00002121def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2122 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002123
Gadi Haber323f2e12017-10-24 20:19:47 +00002124def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2125 let Latency = 10;
2126 let NumMicroOps = 2;
2127 let ResourceCycles = [1,1];
2128}
Craig Topper5a69a002018-03-21 06:28:42 +00002129def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2130 "MMX_PMADDWDirm",
2131 "MMX_PMULHRSWrm",
2132 "MMX_PMULHUWirm",
2133 "MMX_PMULHWirm",
2134 "MMX_PMULLWirm",
2135 "MMX_PMULUDQirm",
2136 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002137 "(V?)PCMPGTQrm",
2138 "(V?)PHMINPOSUWrm",
2139 "(V?)PMADDUBSWrm",
2140 "(V?)PMADDWDrm",
2141 "(V?)PMULDQrm",
2142 "(V?)PMULHRSWrm",
2143 "(V?)PMULHUWrm",
2144 "(V?)PMULHWrm",
2145 "(V?)PMULLWrm",
2146 "(V?)PMULUDQrm",
2147 "(V?)PSADBWrm",
2148 "(V?)RCPPSm",
2149 "(V?)RCPSSm",
2150 "(V?)RSQRTPSm",
2151 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002152
2153def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2154 let Latency = 10;
2155 let NumMicroOps = 2;
2156 let ResourceCycles = [1,1];
2157}
Craig Topperf82867c2017-12-13 23:11:30 +00002158def: InstRW<[BWWriteResGroup116],
2159 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2160 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002161
2162def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2163 let Latency = 10;
2164 let NumMicroOps = 3;
2165 let ResourceCycles = [2,1];
2166}
Craig Topper5a69a002018-03-21 06:28:42 +00002167def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2168 "FICOM32m",
2169 "FICOMP16m",
2170 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002171
2172def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2173 let Latency = 10;
2174 let NumMicroOps = 3;
2175 let ResourceCycles = [1,1,1];
2176}
2177def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2178
2179def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2180 let Latency = 10;
2181 let NumMicroOps = 4;
2182 let ResourceCycles = [1,2,1];
2183}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002184def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2185 "(V?)HADDPSrm",
2186 "(V?)HSUBPDrm",
2187 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002188
2189def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2190 let Latency = 10;
2191 let NumMicroOps = 4;
2192 let ResourceCycles = [1,1,1,1];
2193}
2194def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2195
2196def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002197 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198 let NumMicroOps = 4;
2199 let ResourceCycles = [1,1,1,1];
2200}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002201def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002202
Craig Topper8104f262018-04-02 05:33:28 +00002203def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002204 let Latency = 11;
2205 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002206 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002207}
Craig Topper8104f262018-04-02 05:33:28 +00002208def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2209
2210def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2211 let Latency = 11;
2212 let NumMicroOps = 1;
2213 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2214}
2215def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002216
2217def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2218 let Latency = 11;
2219 let NumMicroOps = 2;
2220 let ResourceCycles = [1,1];
2221}
Craig Topper5a69a002018-03-21 06:28:42 +00002222def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2223 "MUL_F64m",
2224 "VPCMPGTQYrm",
2225 "VPMADDUBSWYrm",
2226 "VPMADDWDYrm",
2227 "VPMULDQYrm",
2228 "VPMULHRSWYrm",
2229 "VPMULHUWYrm",
2230 "VPMULHWYrm",
2231 "VPMULLWYrm",
2232 "VPMULUDQYrm",
2233 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002234
2235def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2236 let Latency = 11;
2237 let NumMicroOps = 2;
2238 let ResourceCycles = [1,1];
2239}
Craig Topperf82867c2017-12-13 23:11:30 +00002240def: InstRW<[BWWriteResGroup124],
2241 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002242
Gadi Haber323f2e12017-10-24 20:19:47 +00002243def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2244 let Latency = 11;
2245 let NumMicroOps = 3;
2246 let ResourceCycles = [2,1];
2247}
Craig Topper5a69a002018-03-21 06:28:42 +00002248def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2249 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002250
2251def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2252 let Latency = 11;
2253 let NumMicroOps = 3;
2254 let ResourceCycles = [2,1];
2255}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002256def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2257 "(V?)ROUNDPSm",
2258 "(V?)ROUNDSDm",
2259 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002260
2261def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2262 let Latency = 11;
2263 let NumMicroOps = 3;
2264 let ResourceCycles = [1,1,1];
2265}
2266def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2267
2268def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2269 let Latency = 11;
2270 let NumMicroOps = 4;
2271 let ResourceCycles = [1,2,1];
2272}
Craig Topper5a69a002018-03-21 06:28:42 +00002273def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2274 "VHADDPSYrm",
2275 "VHSUBPDYrm",
2276 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002277
2278def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2279 let Latency = 11;
2280 let NumMicroOps = 6;
2281 let ResourceCycles = [1,1,1,1,2];
2282}
Craig Topper5a69a002018-03-21 06:28:42 +00002283def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2284 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002285
2286def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2287 let Latency = 11;
2288 let NumMicroOps = 7;
2289 let ResourceCycles = [2,2,3];
2290}
Craig Topper5a69a002018-03-21 06:28:42 +00002291def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2292 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002293
2294def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2295 let Latency = 11;
2296 let NumMicroOps = 9;
2297 let ResourceCycles = [1,4,1,3];
2298}
2299def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2300
2301def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2302 let Latency = 11;
2303 let NumMicroOps = 11;
2304 let ResourceCycles = [2,9];
2305}
Craig Topper2d451e72018-03-18 08:38:06 +00002306def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2307def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002308
Gadi Haber323f2e12017-10-24 20:19:47 +00002309def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2310 let Latency = 12;
2311 let NumMicroOps = 3;
2312 let ResourceCycles = [2,1];
2313}
Craig Topper5a69a002018-03-21 06:28:42 +00002314def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2315 "ADD_FI32m",
2316 "SUBR_FI16m",
2317 "SUBR_FI32m",
2318 "SUB_FI16m",
2319 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002320 "VROUNDPDYm",
2321 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002322
2323def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2324 let Latency = 12;
2325 let NumMicroOps = 4;
2326 let ResourceCycles = [1,2,1];
2327}
Craig Topper5a69a002018-03-21 06:28:42 +00002328def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002329
Craig Topper8104f262018-04-02 05:33:28 +00002330def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002331 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002332 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002333 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002334}
Craig Topper8104f262018-04-02 05:33:28 +00002335def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2336
2337def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2338 let Latency = 11;
2339 let NumMicroOps = 1;
2340 let ResourceCycles = [1,4];
2341}
2342def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002343
2344def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2345 let Latency = 13;
2346 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002347 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002348}
2349def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2350
Craig Topper8104f262018-04-02 05:33:28 +00002351def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002352 let Latency = 14;
2353 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002354 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002355}
Craig Topper8104f262018-04-02 05:33:28 +00002356def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2357
2358def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2359 let Latency = 14;
2360 let NumMicroOps = 1;
2361 let ResourceCycles = [1,4];
2362}
2363def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002364
Gadi Haber323f2e12017-10-24 20:19:47 +00002365def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2366 let Latency = 14;
2367 let NumMicroOps = 3;
2368 let ResourceCycles = [1,1,1];
2369}
Craig Topper5a69a002018-03-21 06:28:42 +00002370def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2371 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002372
2373def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2374 let Latency = 14;
2375 let NumMicroOps = 4;
2376 let ResourceCycles = [2,1,1];
2377}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002378def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002379
2380def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2381 let Latency = 14;
2382 let NumMicroOps = 4;
2383 let ResourceCycles = [1,1,1,1];
2384}
Craig Topper5a69a002018-03-21 06:28:42 +00002385def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002386
2387def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2388 let Latency = 14;
2389 let NumMicroOps = 8;
2390 let ResourceCycles = [2,2,1,3];
2391}
2392def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2393
2394def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2395 let Latency = 14;
2396 let NumMicroOps = 10;
2397 let ResourceCycles = [2,3,1,4];
2398}
2399def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2400
2401def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2402 let Latency = 14;
2403 let NumMicroOps = 12;
2404 let ResourceCycles = [2,1,4,5];
2405}
2406def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2407
2408def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2409 let Latency = 15;
2410 let NumMicroOps = 1;
2411 let ResourceCycles = [1];
2412}
Craig Topper5a69a002018-03-21 06:28:42 +00002413def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2414 "DIVR_FST0r",
2415 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002416
Gadi Haber323f2e12017-10-24 20:19:47 +00002417def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2418 let Latency = 15;
2419 let NumMicroOps = 10;
2420 let ResourceCycles = [1,1,1,4,1,2];
2421}
Craig Topper13a16502018-03-19 00:56:09 +00002422def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002423
Craig Topper8104f262018-04-02 05:33:28 +00002424def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002425 let Latency = 16;
2426 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002427 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002428}
Craig Topper5a69a002018-03-21 06:28:42 +00002429def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2430 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002431
2432def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2433 let Latency = 16;
2434 let NumMicroOps = 3;
2435 let ResourceCycles = [2,1];
2436}
2437def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2438
Gadi Haber323f2e12017-10-24 20:19:47 +00002439def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2440 let Latency = 16;
2441 let NumMicroOps = 14;
2442 let ResourceCycles = [1,1,1,4,2,5];
2443}
2444def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2445
2446def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2447 let Latency = 16;
2448 let NumMicroOps = 16;
2449 let ResourceCycles = [16];
2450}
Craig Topper5a69a002018-03-21 06:28:42 +00002451def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002452
Craig Topper8104f262018-04-02 05:33:28 +00002453def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002454 let Latency = 17;
2455 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002456 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002457}
2458def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2459
2460def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2461 let Latency = 17;
2462 let NumMicroOps = 4;
2463 let ResourceCycles = [2,1,1];
2464}
Craig Topper5a69a002018-03-21 06:28:42 +00002465def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2466 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002467
Craig Topper8104f262018-04-02 05:33:28 +00002468def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002469 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002470 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002471 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002472}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002473def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2474 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002475
Gadi Haber323f2e12017-10-24 20:19:47 +00002476def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2477 let Latency = 18;
2478 let NumMicroOps = 8;
2479 let ResourceCycles = [1,1,1,5];
2480}
Craig Topper5a69a002018-03-21 06:28:42 +00002481def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002482def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002483
2484def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2485 let Latency = 18;
2486 let NumMicroOps = 11;
2487 let ResourceCycles = [2,1,1,3,1,3];
2488}
Craig Topper13a16502018-03-19 00:56:09 +00002489def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002490
Craig Topper8104f262018-04-02 05:33:28 +00002491def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002492 let Latency = 19;
2493 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002494 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002495}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002496def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002497 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002498
Gadi Haber323f2e12017-10-24 20:19:47 +00002499def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2500 let Latency = 19;
2501 let NumMicroOps = 5;
2502 let ResourceCycles = [2,1,1,1];
2503}
Craig Topper5a69a002018-03-21 06:28:42 +00002504def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002505
Gadi Haber323f2e12017-10-24 20:19:47 +00002506def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2507 let Latency = 20;
2508 let NumMicroOps = 1;
2509 let ResourceCycles = [1];
2510}
Craig Topper5a69a002018-03-21 06:28:42 +00002511def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2512 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002513 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002514
2515def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2516 let Latency = 20;
2517 let NumMicroOps = 5;
2518 let ResourceCycles = [2,1,1,1];
2519}
2520def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2521
2522def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2523 let Latency = 20;
2524 let NumMicroOps = 8;
2525 let ResourceCycles = [1,1,1,1,1,1,2];
2526}
Craig Topper5a69a002018-03-21 06:28:42 +00002527def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2528 "INSL",
2529 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002530
Craig Topper8104f262018-04-02 05:33:28 +00002531def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002532 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002533 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002534 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002535}
Craig Topper8104f262018-04-02 05:33:28 +00002536def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2537
2538def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2539 let Latency = 16;
2540 let NumMicroOps = 1;
2541 let ResourceCycles = [1,8];
2542}
2543def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002544
2545def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2546 let Latency = 21;
2547 let NumMicroOps = 2;
2548 let ResourceCycles = [1,1];
2549}
Craig Topper5a69a002018-03-21 06:28:42 +00002550def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2551 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002552
Craig Topper8104f262018-04-02 05:33:28 +00002553def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002554 let Latency = 21;
2555 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002556 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002557}
2558def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2559
2560def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2561 let Latency = 21;
2562 let NumMicroOps = 19;
2563 let ResourceCycles = [2,1,4,1,1,4,6];
2564}
2565def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2566
2567def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2568 let Latency = 22;
2569 let NumMicroOps = 18;
2570 let ResourceCycles = [1,1,16];
2571}
2572def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2573
Craig Topper8104f262018-04-02 05:33:28 +00002574def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002575 let Latency = 23;
2576 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002577 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002578}
2579def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2580
Craig Topper8104f262018-04-02 05:33:28 +00002581def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002582 let Latency = 23;
2583 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002584 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002585}
2586def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2587
Gadi Haber323f2e12017-10-24 20:19:47 +00002588def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2589 let Latency = 23;
2590 let NumMicroOps = 19;
2591 let ResourceCycles = [3,1,15];
2592}
Craig Topper391c6f92017-12-10 01:24:08 +00002593def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002594
2595def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2596 let Latency = 24;
2597 let NumMicroOps = 3;
2598 let ResourceCycles = [1,1,1];
2599}
Craig Topper5a69a002018-03-21 06:28:42 +00002600def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2601 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002602
Craig Topper8104f262018-04-02 05:33:28 +00002603def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002604 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002605 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002606 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002607}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002608def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2609 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002610
2611def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2612 let Latency = 26;
2613 let NumMicroOps = 2;
2614 let ResourceCycles = [1,1];
2615}
Craig Topper5a69a002018-03-21 06:28:42 +00002616def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002617 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002618
Craig Topper8104f262018-04-02 05:33:28 +00002619def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002620 let Latency = 27;
2621 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002622 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002623}
2624def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2625
2626def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2627 let Latency = 29;
2628 let NumMicroOps = 3;
2629 let ResourceCycles = [1,1,1];
2630}
Craig Topper5a69a002018-03-21 06:28:42 +00002631def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2632 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002633
Craig Topper8104f262018-04-02 05:33:28 +00002634def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002635 let Latency = 29;
2636 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002637 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002638}
2639def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2640
2641def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2642 let Latency = 22;
2643 let NumMicroOps = 7;
2644 let ResourceCycles = [1,3,2,1];
2645}
Craig Topper17a31182017-12-16 18:35:29 +00002646def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002647
2648def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2649 let Latency = 23;
2650 let NumMicroOps = 9;
2651 let ResourceCycles = [1,3,4,1];
2652}
Craig Topper17a31182017-12-16 18:35:29 +00002653def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002654
2655def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2656 let Latency = 24;
2657 let NumMicroOps = 9;
2658 let ResourceCycles = [1,5,2,1];
2659}
Craig Topper17a31182017-12-16 18:35:29 +00002660def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002661
2662def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2663 let Latency = 25;
2664 let NumMicroOps = 7;
2665 let ResourceCycles = [1,3,2,1];
2666}
Craig Topper17a31182017-12-16 18:35:29 +00002667def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2668 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002669
2670def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2671 let Latency = 26;
2672 let NumMicroOps = 9;
2673 let ResourceCycles = [1,5,2,1];
2674}
Craig Topper17a31182017-12-16 18:35:29 +00002675def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002676
2677def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2678 let Latency = 26;
2679 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002680 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002681}
Craig Topper17a31182017-12-16 18:35:29 +00002682def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002683
2684def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2685 let Latency = 27;
2686 let NumMicroOps = 9;
2687 let ResourceCycles = [1,5,2,1];
2688}
Craig Topper17a31182017-12-16 18:35:29 +00002689def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002690
Gadi Haber323f2e12017-10-24 20:19:47 +00002691def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2692 let Latency = 29;
2693 let NumMicroOps = 27;
2694 let ResourceCycles = [1,5,1,1,19];
2695}
2696def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2697
2698def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2699 let Latency = 30;
2700 let NumMicroOps = 28;
2701 let ResourceCycles = [1,6,1,1,19];
2702}
Craig Topper2d451e72018-03-18 08:38:06 +00002703def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002704
2705def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2706 let Latency = 31;
2707 let NumMicroOps = 31;
2708 let ResourceCycles = [8,1,21,1];
2709}
2710def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2711
Craig Topper8104f262018-04-02 05:33:28 +00002712def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2713 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002714 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002715 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002716}
2717def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2718
2719def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2720 let Latency = 34;
2721 let NumMicroOps = 8;
2722 let ResourceCycles = [2,2,2,1,1];
2723}
Craig Topper13a16502018-03-19 00:56:09 +00002724def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002725
2726def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2727 let Latency = 34;
2728 let NumMicroOps = 23;
2729 let ResourceCycles = [1,5,3,4,10];
2730}
Craig Topper5a69a002018-03-21 06:28:42 +00002731def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2732 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002733
2734def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2735 let Latency = 35;
2736 let NumMicroOps = 8;
2737 let ResourceCycles = [2,2,2,1,1];
2738}
Craig Topper13a16502018-03-19 00:56:09 +00002739def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002740
2741def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2742 let Latency = 35;
2743 let NumMicroOps = 23;
2744 let ResourceCycles = [1,5,2,1,4,10];
2745}
Craig Topper5a69a002018-03-21 06:28:42 +00002746def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2747 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002748
Craig Topper8104f262018-04-02 05:33:28 +00002749def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2750 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002751 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002752 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002753}
2754def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2755
2756def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2757 let Latency = 42;
2758 let NumMicroOps = 22;
2759 let ResourceCycles = [2,20];
2760}
Craig Topper2d451e72018-03-18 08:38:06 +00002761def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002762
2763def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2764 let Latency = 60;
2765 let NumMicroOps = 64;
2766 let ResourceCycles = [2,2,8,1,10,2,39];
2767}
2768def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002769
2770def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2771 let Latency = 63;
2772 let NumMicroOps = 88;
2773 let ResourceCycles = [4,4,31,1,2,1,45];
2774}
Craig Topper2d451e72018-03-18 08:38:06 +00002775def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002776
2777def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2778 let Latency = 63;
2779 let NumMicroOps = 90;
2780 let ResourceCycles = [4,2,33,1,2,1,47];
2781}
Craig Topper2d451e72018-03-18 08:38:06 +00002782def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002783
2784def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2785 let Latency = 75;
2786 let NumMicroOps = 15;
2787 let ResourceCycles = [6,3,6];
2788}
2789def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2790
2791def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2792 let Latency = 80;
2793 let NumMicroOps = 32;
2794 let ResourceCycles = [7,7,3,3,1,11];
2795}
2796def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2797
2798def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2799 let Latency = 115;
2800 let NumMicroOps = 100;
2801 let ResourceCycles = [9,9,11,8,1,11,21,30];
2802}
2803def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002804
2805} // SchedModel
2806