blob: 6c1f6fc8c13fa2ca45d76099a644522ab2953a46 [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000167defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000169defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000170
171// FMA Scheduling helper class.
172// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
173
174// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000175def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
176def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
177def : WriteRes<WriteVecMove, [BWPort015]>;
178
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
180defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
181defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
186defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
187defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber323f2e12017-10-24 20:19:47 +0000188
189// Vector bitwise operations.
190// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector and/or/xor.
Gadi Haber323f2e12017-10-24 20:19:47 +0000192
193// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
195defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
196defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000197
198// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199
Gadi Haber323f2e12017-10-24 20:19:47 +0000200// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000201def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 11;
203 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000204 let ResourceCycles = [3];
205}
206def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207 let Latency = 16;
208 let NumMicroOps = 4;
209 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000210}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000211
212// Packed Compare Explicit Length Strings, Return Mask
213def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
214 let Latency = 19;
215 let NumMicroOps = 9;
216 let ResourceCycles = [4,3,1,1];
217}
218def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
219 let Latency = 24;
220 let NumMicroOps = 10;
221 let ResourceCycles = [4,3,1,1,1];
222}
223
224// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000225def : WriteRes<WritePCmpIStrI, [BWPort0]> {
226 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000227 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000228 let ResourceCycles = [3];
229}
230def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 16;
232 let NumMicroOps = 4;
233 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000234}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000235
236// Packed Compare Explicit Length Strings, Return Index
237def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
238 let Latency = 18;
239 let NumMicroOps = 8;
240 let ResourceCycles = [4,3,1];
241}
242def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
243 let Latency = 23;
244 let NumMicroOps = 9;
245 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000246}
247
Simon Pilgrima2f26782018-03-27 20:38:54 +0000248// MOVMSK Instructions.
249def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
250def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
252
Gadi Haber323f2e12017-10-24 20:19:47 +0000253// AES instructions.
254def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
255 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [1];
258}
259def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 12;
261 let NumMicroOps = 2;
262 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000264
Gadi Haber323f2e12017-10-24 20:19:47 +0000265def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
266 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000268 let ResourceCycles = [2];
269}
270def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000271 let Latency = 19;
272 let NumMicroOps = 3;
273 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275
276def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
277 let Latency = 29;
278 let NumMicroOps = 11;
279 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000280}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000281def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
282 let Latency = 33;
283 let NumMicroOps = 11;
284 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000285}
286
287// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000289
290// Catch-all for expensive system instructions.
291def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
292
293// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000295defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000296defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000297defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000298defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000299
300// Old microcoded instructions that nobody use.
301def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
302
303// Fence instructions.
304def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
305
306// Nop, not very useful expect it provides a model for nops!
307def : WriteRes<WriteNop, []>;
308
309////////////////////////////////////////////////////////////////////////////////
310// Horizontal add/sub instructions.
311////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000312
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000313defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
314defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000315
316// Remaining instrs.
317
318def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
319 let Latency = 1;
320 let NumMicroOps = 1;
321 let ResourceCycles = [1];
322}
Craig Topper5a69a002018-03-21 06:28:42 +0000323def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
324 "MMX_MOVD64grr",
Craig Topper5a69a002018-03-21 06:28:42 +0000325 "MMX_PSLLDri",
326 "MMX_PSLLDrr",
327 "MMX_PSLLQri",
328 "MMX_PSLLQrr",
329 "MMX_PSLLWri",
330 "MMX_PSLLWrr",
331 "MMX_PSRADri",
332 "MMX_PSRADrr",
333 "MMX_PSRAWri",
334 "MMX_PSRAWrr",
335 "MMX_PSRLDri",
336 "MMX_PSRLDrr",
337 "MMX_PSRLQri",
338 "MMX_PSRLQrr",
339 "MMX_PSRLWri",
340 "MMX_PSRLWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000341 "(V?)MOVPDI2DIrr",
342 "(V?)MOVPQIto64rr",
343 "(V?)PSLLD(Y?)ri",
344 "(V?)PSLLQ(Y?)ri",
345 "VPSLLVQ(Y?)rr",
346 "(V?)PSLLW(Y?)ri",
347 "(V?)PSRAD(Y?)ri",
348 "(V?)PSRAW(Y?)ri",
349 "(V?)PSRLD(Y?)ri",
350 "(V?)PSRLQ(Y?)ri",
351 "VPSRLVQ(Y?)rr",
352 "(V?)PSRLW(Y?)ri",
353 "VTESTPD(Y?)rr",
354 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000355
356def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
357 let Latency = 1;
358 let NumMicroOps = 1;
359 let ResourceCycles = [1];
360}
Craig Topper5a69a002018-03-21 06:28:42 +0000361def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
362 "COM_FST0r",
363 "UCOM_FPr",
364 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000365
366def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
367 let Latency = 1;
368 let NumMicroOps = 1;
369 let ResourceCycles = [1];
370}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000371def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000372 "MMX_MOVD64to64rr",
373 "MMX_MOVQ2DQrr",
374 "MMX_PALIGNRrri",
Craig Topper5a69a002018-03-21 06:28:42 +0000375 "MMX_PSHUFWri",
376 "MMX_PUNPCKHBWirr",
377 "MMX_PUNPCKHDQirr",
378 "MMX_PUNPCKHWDirr",
379 "MMX_PUNPCKLBWirr",
380 "MMX_PUNPCKLDQirr",
381 "MMX_PUNPCKLWDirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000382 "(V?)ANDNPD(Y?)rr",
383 "(V?)ANDNPS(Y?)rr",
384 "(V?)ANDPD(Y?)rr",
385 "(V?)ANDPS(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000386 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000387 "(V?)INSERTPSrr",
388 "(V?)MOV64toPQIrr",
389 "(V?)MOVAPD(Y?)rr",
390 "(V?)MOVAPS(Y?)rr",
391 "(V?)MOVDDUP(Y?)rr",
392 "(V?)MOVDI2PDIrr",
393 "(V?)MOVHLPSrr",
394 "(V?)MOVLHPSrr",
395 "(V?)MOVSDrr",
396 "(V?)MOVSHDUP(Y?)rr",
397 "(V?)MOVSLDUP(Y?)rr",
398 "(V?)MOVSSrr",
399 "(V?)MOVUPD(Y?)rr",
400 "(V?)MOVUPS(Y?)rr",
401 "(V?)ORPD(Y?)rr",
402 "(V?)ORPS(Y?)rr",
403 "(V?)PACKSSDW(Y?)rr",
404 "(V?)PACKSSWB(Y?)rr",
405 "(V?)PACKUSDW(Y?)rr",
406 "(V?)PACKUSWB(Y?)rr",
407 "(V?)PALIGNR(Y?)rri",
408 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000409 "VPBROADCASTDrr",
410 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000411 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000412 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000413 "(V?)PMOVSXBDrr",
414 "(V?)PMOVSXBQrr",
415 "(V?)PMOVSXBWrr",
416 "(V?)PMOVSXDQrr",
417 "(V?)PMOVSXWDrr",
418 "(V?)PMOVSXWQrr",
419 "(V?)PMOVZXBDrr",
420 "(V?)PMOVZXBQrr",
421 "(V?)PMOVZXBWrr",
422 "(V?)PMOVZXDQrr",
423 "(V?)PMOVZXWDrr",
424 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000425 "(V?)PSHUFD(Y?)ri",
426 "(V?)PSHUFHW(Y?)ri",
427 "(V?)PSHUFLW(Y?)ri",
428 "(V?)PSLLDQ(Y?)ri",
429 "(V?)PSRLDQ(Y?)ri",
430 "(V?)PUNPCKHBW(Y?)rr",
431 "(V?)PUNPCKHDQ(Y?)rr",
432 "(V?)PUNPCKHQDQ(Y?)rr",
433 "(V?)PUNPCKHWD(Y?)rr",
434 "(V?)PUNPCKLBW(Y?)rr",
435 "(V?)PUNPCKLDQ(Y?)rr",
436 "(V?)PUNPCKLQDQ(Y?)rr",
437 "(V?)PUNPCKLWD(Y?)rr",
438 "(V?)SHUFPD(Y?)rri",
439 "(V?)SHUFPS(Y?)rri",
440 "(V?)UNPCKHPD(Y?)rr",
441 "(V?)UNPCKHPS(Y?)rr",
442 "(V?)UNPCKLPD(Y?)rr",
443 "(V?)UNPCKLPS(Y?)rr",
444 "(V?)XORPD(Y?)rr",
445 "(V?)XORPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000446
447def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
448 let Latency = 1;
449 let NumMicroOps = 1;
450 let ResourceCycles = [1];
451}
452def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
453
454def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
455 let Latency = 1;
456 let NumMicroOps = 1;
457 let ResourceCycles = [1];
458}
Craig Topper5a69a002018-03-21 06:28:42 +0000459def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
460 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000461
462def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
463 let Latency = 1;
464 let NumMicroOps = 1;
465 let ResourceCycles = [1];
466}
Craig Topperfbe31322018-04-05 21:56:19 +0000467def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000468def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
469 "ADC(16|32|64)i",
470 "ADC(8|16|32|64)rr",
471 "ADCX(32|64)rr",
472 "ADOX(32|64)rr",
473 "BT(16|32|64)ri8",
474 "BT(16|32|64)rr",
475 "BTC(16|32|64)ri8",
476 "BTC(16|32|64)rr",
477 "BTR(16|32|64)ri8",
478 "BTR(16|32|64)rr",
479 "BTS(16|32|64)ri8",
480 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000481 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
482 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
483 "JMP_1",
484 "JMP_4",
485 "RORX(32|64)ri",
486 "SAR(8|16|32|64)r1",
487 "SAR(8|16|32|64)ri",
488 "SARX(32|64)rr",
489 "SBB(16|32|64)ri",
490 "SBB(16|32|64)i",
491 "SBB(8|16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000492 "SHL(8|16|32|64)r1",
493 "SHL(8|16|32|64)ri",
494 "SHLX(32|64)rr",
495 "SHR(8|16|32|64)r1",
496 "SHR(8|16|32|64)ri",
497 "SHRX(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000498
499def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
500 let Latency = 1;
501 let NumMicroOps = 1;
502 let ResourceCycles = [1];
503}
Craig Topper5a69a002018-03-21 06:28:42 +0000504def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
505 "BLSI(32|64)rr",
506 "BLSMSK(32|64)rr",
507 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000508 "LEA(16|32|64)(_32)?r",
509 "MMX_PABSBrr",
510 "MMX_PABSDrr",
511 "MMX_PABSWrr",
512 "MMX_PADDBirr",
513 "MMX_PADDDirr",
514 "MMX_PADDQirr",
515 "MMX_PADDSBirr",
516 "MMX_PADDSWirr",
517 "MMX_PADDUSBirr",
518 "MMX_PADDUSWirr",
519 "MMX_PADDWirr",
520 "MMX_PAVGBirr",
521 "MMX_PAVGWirr",
522 "MMX_PCMPEQBirr",
523 "MMX_PCMPEQDirr",
524 "MMX_PCMPEQWirr",
525 "MMX_PCMPGTBirr",
526 "MMX_PCMPGTDirr",
527 "MMX_PCMPGTWirr",
528 "MMX_PMAXSWirr",
529 "MMX_PMAXUBirr",
530 "MMX_PMINSWirr",
531 "MMX_PMINUBirr",
532 "MMX_PSIGNBrr",
533 "MMX_PSIGNDrr",
534 "MMX_PSIGNWrr",
535 "MMX_PSUBBirr",
536 "MMX_PSUBDirr",
537 "MMX_PSUBQirr",
538 "MMX_PSUBSBirr",
539 "MMX_PSUBSWirr",
540 "MMX_PSUBUSBirr",
541 "MMX_PSUBUSWirr",
542 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000543 "(V?)PABSB(Y?)rr",
544 "(V?)PABSD(Y?)rr",
545 "(V?)PABSW(Y?)rr",
546 "(V?)PADDB(Y?)rr",
547 "(V?)PADDD(Y?)rr",
548 "(V?)PADDQ(Y?)rr",
549 "(V?)PADDSB(Y?)rr",
550 "(V?)PADDSW(Y?)rr",
551 "(V?)PADDUSB(Y?)rr",
552 "(V?)PADDUSW(Y?)rr",
553 "(V?)PADDW(Y?)rr",
554 "(V?)PAVGB(Y?)rr",
555 "(V?)PAVGW(Y?)rr",
556 "(V?)PCMPEQB(Y?)rr",
557 "(V?)PCMPEQD(Y?)rr",
558 "(V?)PCMPEQQ(Y?)rr",
559 "(V?)PCMPEQW(Y?)rr",
560 "(V?)PCMPGTB(Y?)rr",
561 "(V?)PCMPGTD(Y?)rr",
562 "(V?)PCMPGTW(Y?)rr",
563 "(V?)PMAXSB(Y?)rr",
564 "(V?)PMAXSD(Y?)rr",
565 "(V?)PMAXSW(Y?)rr",
566 "(V?)PMAXUB(Y?)rr",
567 "(V?)PMAXUD(Y?)rr",
568 "(V?)PMAXUW(Y?)rr",
569 "(V?)PMINSB(Y?)rr",
570 "(V?)PMINSD(Y?)rr",
571 "(V?)PMINSW(Y?)rr",
572 "(V?)PMINUB(Y?)rr",
573 "(V?)PMINUD(Y?)rr",
574 "(V?)PMINUW(Y?)rr",
575 "(V?)PSIGNB(Y?)rr",
576 "(V?)PSIGND(Y?)rr",
577 "(V?)PSIGNW(Y?)rr",
578 "(V?)PSUBB(Y?)rr",
579 "(V?)PSUBD(Y?)rr",
580 "(V?)PSUBQ(Y?)rr",
581 "(V?)PSUBSB(Y?)rr",
582 "(V?)PSUBSW(Y?)rr",
583 "(V?)PSUBUSB(Y?)rr",
584 "(V?)PSUBUSW(Y?)rr",
585 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000586
587def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
588 let Latency = 1;
589 let NumMicroOps = 1;
590 let ResourceCycles = [1];
591}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000592def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000593 "MMX_PANDNirr",
594 "MMX_PANDirr",
595 "MMX_PORirr",
596 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000597 "(V?)BLENDPD(Y?)rri",
598 "(V?)BLENDPS(Y?)rri",
599 "(V?)MOVDQA(Y?)rr",
600 "(V?)MOVDQU(Y?)rr",
601 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000602 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000603 "(V?)PANDN(Y?)rr",
604 "(V?)PAND(Y?)rr",
605 "VPBLENDD(Y?)rri",
606 "(V?)POR(Y?)rr",
607 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000608
609def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
610 let Latency = 1;
611 let NumMicroOps = 1;
612 let ResourceCycles = [1];
613}
Craig Topperfbe31322018-04-05 21:56:19 +0000614def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000615def: InstRW<[BWWriteResGroup9], (instregex "CLC",
Craig Topper5a69a002018-03-21 06:28:42 +0000616 "CMC",
Craig Topper5a69a002018-03-21 06:28:42 +0000617 "LAHF",
Craig Topper5a69a002018-03-21 06:28:42 +0000618 "NOOP",
Craig Topper5a69a002018-03-21 06:28:42 +0000619 "SAHF",
620 "SGDT64m",
621 "SIDT64m",
622 "SLDT64m",
623 "SMSW16m",
624 "STC",
625 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000626 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000627 "XCHG(16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000628
629def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
630 let Latency = 1;
631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Craig Topper5a69a002018-03-21 06:28:42 +0000634def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
635 "MMX_MOVD64from64rm",
636 "MMX_MOVD64mr",
637 "MMX_MOVNTQmr",
638 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "MOVNTI_64mr",
640 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000641 "ST_FP32m",
642 "ST_FP64m",
643 "ST_FP80m",
644 "VEXTRACTF128mr",
645 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000646 "(V?)MOVAPD(Y?)mr",
647 "(V?)MOVAPS(Y?)mr",
648 "(V?)MOVDQA(Y?)mr",
649 "(V?)MOVDQU(Y?)mr",
650 "(V?)MOVHPDmr",
651 "(V?)MOVHPSmr",
652 "(V?)MOVLPDmr",
653 "(V?)MOVLPSmr",
654 "(V?)MOVNTDQ(V?)mr",
655 "(V?)MOVNTPD(V?)mr",
656 "(V?)MOVNTPS(V?)mr",
657 "(V?)MOVPDI2DImr",
658 "(V?)MOVPQI2QImr",
659 "(V?)MOVPQIto64mr",
660 "(V?)MOVSDmr",
661 "(V?)MOVSSmr",
662 "(V?)MOVUPD(Y?)mr",
663 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000664
665def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
666 let Latency = 2;
667 let NumMicroOps = 2;
668 let ResourceCycles = [2];
669}
Craig Topper5a69a002018-03-21 06:28:42 +0000670def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
671 "BLENDVPSrr0",
672 "MMX_PINSRWrr",
673 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000674 "VBLENDVPD(Y?)rr",
675 "VBLENDVPS(Y?)rr",
676 "VPBLENDVB(Y?)rr",
677 "(V?)PINSRBrr",
678 "(V?)PINSRDrr",
679 "(V?)PINSRQrr",
680 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000681
682def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
683 let Latency = 2;
684 let NumMicroOps = 2;
685 let ResourceCycles = [2];
686}
687def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
688
689def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
690 let Latency = 2;
691 let NumMicroOps = 2;
692 let ResourceCycles = [2];
693}
Craig Topper5a69a002018-03-21 06:28:42 +0000694def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
695 "ROL(8|16|32|64)ri",
696 "ROR(8|16|32|64)r1",
697 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000698
699def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
700 let Latency = 2;
701 let NumMicroOps = 2;
702 let ResourceCycles = [2];
703}
Craig Topper5a69a002018-03-21 06:28:42 +0000704def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
705 "MFENCE",
706 "WAIT",
707 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000708
709def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
710 let Latency = 2;
711 let NumMicroOps = 2;
712 let ResourceCycles = [1,1];
713}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000714def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
715 "VCVTPH2PS(Y?)rr",
716 "(V?)CVTPS2PDrr",
717 "(V?)CVTSS2SDrr",
718 "(V?)EXTRACTPSrr",
719 "(V?)PEXTRBrr",
720 "(V?)PEXTRDrr",
721 "(V?)PEXTRQrr",
722 "(V?)PEXTRWrr",
723 "(V?)PSLLDrr",
724 "(V?)PSLLQrr",
725 "(V?)PSLLWrr",
726 "(V?)PSRADrr",
727 "(V?)PSRAWrr",
728 "(V?)PSRLDrr",
729 "(V?)PSRLQrr",
730 "(V?)PSRLWrr",
731 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000732
733def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
734 let Latency = 2;
735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
738def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
739
740def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
741 let Latency = 2;
742 let NumMicroOps = 2;
743 let ResourceCycles = [1,1];
744}
745def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
746
747def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
748 let Latency = 2;
749 let NumMicroOps = 2;
750 let ResourceCycles = [1,1];
751}
752def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
753
754def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
755 let Latency = 2;
756 let NumMicroOps = 2;
757 let ResourceCycles = [1,1];
758}
Craig Topper498875f2018-04-04 17:54:19 +0000759def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
760
761def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
762 let Latency = 1;
763 let NumMicroOps = 1;
764 let ResourceCycles = [1];
765}
766def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000767
768def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
769 let Latency = 2;
770 let NumMicroOps = 2;
771 let ResourceCycles = [1,1];
772}
Craig Topper2d451e72018-03-18 08:38:06 +0000773def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000774def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000775def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
776 "ADC8ri",
777 "CMOV(A|BE)(16|32|64)rr",
778 "SBB8i8",
779 "SBB8ri",
780 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000781
782def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
783 let Latency = 2;
784 let NumMicroOps = 3;
785 let ResourceCycles = [1,1,1];
786}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000787def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
788 "(V?)PEXTRBmr",
789 "(V?)PEXTRDmr",
790 "(V?)PEXTRQmr",
791 "(V?)PEXTRWmr",
792 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000793
794def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
795 let Latency = 2;
796 let NumMicroOps = 3;
797 let ResourceCycles = [1,1,1];
798}
799def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
800
Gadi Haber323f2e12017-10-24 20:19:47 +0000801def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
802 let Latency = 2;
803 let NumMicroOps = 3;
804 let ResourceCycles = [1,1,1];
805}
806def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
807
808def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
809 let Latency = 2;
810 let NumMicroOps = 3;
811 let ResourceCycles = [1,1,1];
812}
Craig Topper2d451e72018-03-18 08:38:06 +0000813def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000814def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
815 "PUSH64i8",
816 "STOSB",
817 "STOSL",
818 "STOSQ",
819 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000820
Gadi Haber323f2e12017-10-24 20:19:47 +0000821def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
822 let Latency = 3;
823 let NumMicroOps = 1;
824 let ResourceCycles = [1];
825}
Clement Courbet327fac42018-03-07 08:14:02 +0000826def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000827def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000828def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000829 "ADD_FST0r",
830 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000831 "MMX_CVTPI2PSirr",
832 "PDEP(32|64)rr",
833 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000834 "SHLD(16|32|64)rri8",
835 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000836 "SUBR_FPrST0",
837 "SUBR_FST0r",
838 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000839 "SUB_FPrST0",
840 "SUB_FST0r",
841 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000842 "(V?)ADDPD(Y?)rr",
843 "(V?)ADDPS(Y?)rr",
844 "(V?)ADDSDrr",
845 "(V?)ADDSSrr",
846 "(V?)ADDSUBPD(Y?)rr",
847 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000848 "(V?)CVTDQ2PS(Y?)rr",
849 "(V?)CVTPS2DQ(Y?)rr",
850 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000851 "(V?)SUBPD(Y?)rr",
852 "(V?)SUBPS(Y?)rr",
853 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000854 "(V?)SUBSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000855
856def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
857 let Latency = 3;
858 let NumMicroOps = 2;
859 let ResourceCycles = [1,1];
860}
Clement Courbet327fac42018-03-07 08:14:02 +0000861def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000862
863def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
864 let Latency = 3;
865 let NumMicroOps = 1;
866 let ResourceCycles = [1];
867}
Craig Topper5a69a002018-03-21 06:28:42 +0000868def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
869 "VBROADCASTSSYrr",
870 "VEXTRACTF128rr",
871 "VEXTRACTI128rr",
872 "VINSERTF128rr",
873 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000874 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000875 "VPBROADCASTDYrr",
876 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000877 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000878 "VPERM2F128rr",
879 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000880 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000881 "VPERMQYri",
882 "VPMOVSXBDYrr",
883 "VPMOVSXBQYrr",
884 "VPMOVSXBWYrr",
885 "VPMOVSXDQYrr",
886 "VPMOVSXWDYrr",
887 "VPMOVSXWQYrr",
888 "VPMOVZXBDYrr",
889 "VPMOVZXBQYrr",
890 "VPMOVZXBWYrr",
891 "VPMOVZXDQYrr",
892 "VPMOVZXWDYrr",
893 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000894
895def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
896 let Latency = 3;
897 let NumMicroOps = 1;
898 let ResourceCycles = [1];
899}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000900def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
901 "(V?)MULPS(Y?)rr",
902 "(V?)MULSDrr",
903 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000904
905def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
906 let Latency = 3;
907 let NumMicroOps = 3;
908 let ResourceCycles = [3];
909}
Craig Topper5a69a002018-03-21 06:28:42 +0000910def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
911 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000912
913def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
914 let Latency = 3;
915 let NumMicroOps = 3;
916 let ResourceCycles = [2,1];
917}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000918def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
919 "VPSRAVD(Y?)rr",
920 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000921
922def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
923 let Latency = 3;
924 let NumMicroOps = 3;
925 let ResourceCycles = [2,1];
926}
Craig Topper5a69a002018-03-21 06:28:42 +0000927def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
928 "MMX_PHADDSWrr",
929 "MMX_PHADDWrr",
930 "MMX_PHSUBDrr",
931 "MMX_PHSUBSWrr",
932 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000933 "(V?)PHADDD(Y?)rr",
934 "(V?)PHADDSW(Y?)rr",
935 "(V?)PHADDW(Y?)rr",
936 "(V?)PHSUBD(Y?)rr",
937 "(V?)PHSUBSW(Y?)rr",
938 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000939
940def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
941 let Latency = 3;
942 let NumMicroOps = 3;
943 let ResourceCycles = [2,1];
944}
Craig Topper5a69a002018-03-21 06:28:42 +0000945def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
946 "MMX_PACKSSWBirr",
947 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000948
949def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
950 let Latency = 3;
951 let NumMicroOps = 3;
952 let ResourceCycles = [1,2];
953}
954def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
955
956def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
957 let Latency = 3;
958 let NumMicroOps = 3;
959 let ResourceCycles = [1,2];
960}
Craig Topper5a69a002018-03-21 06:28:42 +0000961def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
962 "RCL(8|16|32|64)ri",
963 "RCR(8|16|32|64)r1",
964 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000965
966def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
967 let Latency = 3;
968 let NumMicroOps = 3;
969 let ResourceCycles = [2,1];
970}
Craig Topper5a69a002018-03-21 06:28:42 +0000971def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
972 "ROR(8|16|32|64)rCL",
973 "SAR(8|16|32|64)rCL",
974 "SHL(8|16|32|64)rCL",
975 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000976
977def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
978 let Latency = 3;
979 let NumMicroOps = 4;
980 let ResourceCycles = [1,1,1,1];
981}
982def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
983
984def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
985 let Latency = 3;
986 let NumMicroOps = 4;
987 let ResourceCycles = [1,1,1,1];
988}
Craig Topper5a69a002018-03-21 06:28:42 +0000989def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
990 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000991
992def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
993 let Latency = 4;
994 let NumMicroOps = 2;
995 let ResourceCycles = [1,1];
996}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000997def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
998 "(V?)CVTSD2SIrr",
999 "(V?)CVTSS2SI64rr",
1000 "(V?)CVTSS2SIrr",
1001 "(V?)CVTTSD2SI64rr",
1002 "(V?)CVTTSD2SIrr",
1003 "(V?)CVTTSS2SI64rr",
1004 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001005
1006def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1007 let Latency = 4;
1008 let NumMicroOps = 2;
1009 let ResourceCycles = [1,1];
1010}
Craig Topper5a69a002018-03-21 06:28:42 +00001011def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1012 "VPSLLDYrr",
1013 "VPSLLQYrr",
1014 "VPSLLWYrr",
1015 "VPSRADYrr",
1016 "VPSRAWYrr",
1017 "VPSRLDYrr",
1018 "VPSRLQYrr",
1019 "VPSRLWYrr",
1020 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001021
1022def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1023 let Latency = 4;
1024 let NumMicroOps = 2;
1025 let ResourceCycles = [1,1];
1026}
1027def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1028
1029def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1030 let Latency = 4;
1031 let NumMicroOps = 2;
1032 let ResourceCycles = [1,1];
1033}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001034def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001035def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001036 "MMX_CVTPI2PDirr",
1037 "MMX_CVTPS2PIirr",
1038 "MMX_CVTTPD2PIirr",
1039 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001040 "(V?)CVTDQ2PDrr",
1041 "(V?)CVTPD2DQrr",
1042 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001043 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001044 "(V?)CVTSD2SSrr",
1045 "(V?)CVTSI642SDrr",
1046 "(V?)CVTSI2SDrr",
1047 "(V?)CVTSI2SSrr",
1048 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001049
1050def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1051 let Latency = 4;
1052 let NumMicroOps = 4;
1053}
Craig Topper5a69a002018-03-21 06:28:42 +00001054def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001055
1056def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1057 let Latency = 4;
1058 let NumMicroOps = 3;
1059 let ResourceCycles = [1,1,1];
1060}
1061def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1062
1063def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1064 let Latency = 4;
1065 let NumMicroOps = 3;
1066 let ResourceCycles = [1,1,1];
1067}
Craig Topper5a69a002018-03-21 06:28:42 +00001068def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1069 "ISTT_FP32m",
1070 "ISTT_FP64m",
1071 "IST_F16m",
1072 "IST_F32m",
1073 "IST_FP16m",
1074 "IST_FP32m",
1075 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001076 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001077
1078def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1079 let Latency = 4;
1080 let NumMicroOps = 4;
1081 let ResourceCycles = [4];
1082}
1083def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1084
1085def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1086 let Latency = 4;
1087 let NumMicroOps = 4;
1088 let ResourceCycles = [1,3];
1089}
1090def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1091
1092def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1093 let Latency = 5;
1094 let NumMicroOps = 1;
1095 let ResourceCycles = [1];
1096}
Craig Topper5a69a002018-03-21 06:28:42 +00001097def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1098 "MMX_PMADDWDirr",
1099 "MMX_PMULHRSWrr",
1100 "MMX_PMULHUWirr",
1101 "MMX_PMULHWirr",
1102 "MMX_PMULLWirr",
1103 "MMX_PMULUDQirr",
1104 "MMX_PSADBWirr",
1105 "MUL_FPrST0",
1106 "MUL_FST0r",
1107 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001108 "(V?)PCMPGTQ(Y?)rr",
1109 "(V?)PHMINPOSUWrr",
1110 "(V?)PMADDUBSW(Y?)rr",
1111 "(V?)PMADDWD(Y?)rr",
1112 "(V?)PMULDQ(Y?)rr",
1113 "(V?)PMULHRSW(Y?)rr",
1114 "(V?)PMULHUW(Y?)rr",
1115 "(V?)PMULHW(Y?)rr",
1116 "(V?)PMULLW(Y?)rr",
1117 "(V?)PMULUDQ(Y?)rr",
1118 "(V?)PSADBW(Y?)rr",
1119 "(V?)RCPPSr",
1120 "(V?)RCPSSr",
1121 "(V?)RSQRTPSr",
1122 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001123
1124def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1125 let Latency = 5;
1126 let NumMicroOps = 1;
1127 let ResourceCycles = [1];
1128}
Craig Topperf82867c2017-12-13 23:11:30 +00001129def: InstRW<[BWWriteResGroup48],
1130 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1131 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001132
1133def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1134 let Latency = 5;
1135 let NumMicroOps = 1;
1136 let ResourceCycles = [1];
1137}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001138def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001139 "MMX_MOVD64to64rm",
1140 "MMX_MOVQ64rm",
1141 "MOV(16|32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001142 "MOVSX(16|32|64)rm16",
1143 "MOVSX(16|32|64)rm32",
1144 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001145 "MOVZX(16|32|64)rm16",
1146 "MOVZX(16|32|64)rm8",
1147 "PREFETCHNTA",
1148 "PREFETCHT0",
1149 "PREFETCHT1",
1150 "PREFETCHT2",
1151 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001152 "(V?)LDDQUrm",
1153 "(V?)MOV64toPQIrm",
1154 "(V?)MOVAPDrm",
1155 "(V?)MOVAPSrm",
1156 "(V?)MOVDDUPrm",
1157 "(V?)MOVDI2PDIrm",
1158 "(V?)MOVDQArm",
1159 "(V?)MOVDQUrm",
1160 "(V?)MOVNTDQArm",
1161 "(V?)MOVQI2PQIrm",
1162 "(V?)MOVSDrm",
1163 "(V?)MOVSHDUPrm",
1164 "(V?)MOVSLDUPrm",
1165 "(V?)MOVSSrm",
1166 "(V?)MOVUPDrm",
1167 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001168 "VPBROADCASTDrm",
1169 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001170
1171def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1172 let Latency = 5;
1173 let NumMicroOps = 3;
1174 let ResourceCycles = [1,2];
1175}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001176def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1177 "(V?)HADDPD(Y?)rr",
1178 "(V?)HADDPS(Y?)rr",
1179 "(V?)HSUBPD(Y?)rr",
1180 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001181
1182def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1183 let Latency = 5;
1184 let NumMicroOps = 3;
1185 let ResourceCycles = [1,1,1];
1186}
1187def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1188
1189def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001190 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001191 let NumMicroOps = 3;
1192 let ResourceCycles = [1,1,1];
1193}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001194def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001195
1196def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1197 let Latency = 5;
1198 let NumMicroOps = 4;
1199 let ResourceCycles = [1,1,1,1];
1200}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001201def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1202 "VMASKMOVPS(Y?)mr",
1203 "VPMASKMOVD(Y?)mr",
1204 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001205
1206def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1207 let Latency = 5;
1208 let NumMicroOps = 5;
1209 let ResourceCycles = [1,4];
1210}
1211def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1212
1213def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1214 let Latency = 5;
1215 let NumMicroOps = 5;
1216 let ResourceCycles = [1,4];
1217}
1218def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1219
1220def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1221 let Latency = 5;
1222 let NumMicroOps = 5;
1223 let ResourceCycles = [2,3];
1224}
Craig Topper5a69a002018-03-21 06:28:42 +00001225def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001226
1227def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1228 let Latency = 5;
1229 let NumMicroOps = 6;
1230 let ResourceCycles = [1,1,4];
1231}
Craig Topper5a69a002018-03-21 06:28:42 +00001232def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001233
1234def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1235 let Latency = 6;
1236 let NumMicroOps = 1;
1237 let ResourceCycles = [1];
1238}
Craig Topper5a69a002018-03-21 06:28:42 +00001239def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1240 "LD_F64m",
1241 "LD_F80m",
1242 "VBROADCASTF128",
1243 "VBROADCASTI128",
1244 "VBROADCASTSDYrm",
1245 "VBROADCASTSSYrm",
1246 "VLDDQUYrm",
1247 "VMOVAPDYrm",
1248 "VMOVAPSYrm",
1249 "VMOVDDUPYrm",
1250 "VMOVDQAYrm",
1251 "VMOVDQUYrm",
1252 "VMOVNTDQAYrm",
1253 "VMOVSHDUPYrm",
1254 "VMOVSLDUPYrm",
1255 "VMOVUPDYrm",
1256 "VMOVUPSYrm",
1257 "VPBROADCASTDYrm",
1258 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001259 "(V?)ROUNDPD(Y?)r",
1260 "(V?)ROUNDPS(Y?)r",
1261 "(V?)ROUNDSDr",
1262 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001263
1264def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1265 let Latency = 6;
1266 let NumMicroOps = 2;
1267 let ResourceCycles = [1,1];
1268}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001269def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001270 "MMX_PSLLQrm",
1271 "MMX_PSLLWrm",
1272 "MMX_PSRADrm",
1273 "MMX_PSRAWrm",
1274 "MMX_PSRLDrm",
1275 "MMX_PSRLQrm",
1276 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001277 "VCVTPH2PS(Y?)rm",
1278 "(V?)CVTPS2PDrm",
1279 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001280 "VPSLLVQrm",
1281 "VPSRLVQrm",
1282 "VTESTPDrm",
1283 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001284
1285def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1286 let Latency = 6;
1287 let NumMicroOps = 2;
1288 let ResourceCycles = [1,1];
1289}
Craig Topper5a69a002018-03-21 06:28:42 +00001290def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1291 "VCVTPD2DQYrr",
1292 "VCVTPD2PSYrr",
1293 "VCVTPS2PHYrr",
1294 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001295
1296def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1297 let Latency = 6;
1298 let NumMicroOps = 2;
1299 let ResourceCycles = [1,1];
1300}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001301def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001302 "MMX_PINSRWrm",
1303 "MMX_PSHUFBrm",
1304 "MMX_PSHUFWmi",
1305 "MMX_PUNPCKHBWirm",
1306 "MMX_PUNPCKHDQirm",
1307 "MMX_PUNPCKHWDirm",
1308 "MMX_PUNPCKLBWirm",
1309 "MMX_PUNPCKLDQirm",
1310 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001311 "(V?)ANDNPDrm",
1312 "(V?)ANDNPSrm",
1313 "(V?)ANDPDrm",
1314 "(V?)ANDPSrm",
1315 "(V?)INSERTPSrm",
1316 "(V?)MOVHPDrm",
1317 "(V?)MOVHPSrm",
1318 "(V?)MOVLPDrm",
1319 "(V?)MOVLPSrm",
1320 "(V?)ORPDrm",
1321 "(V?)ORPSrm",
1322 "(V?)PACKSSDWrm",
1323 "(V?)PACKSSWBrm",
1324 "(V?)PACKUSDWrm",
1325 "(V?)PACKUSWBrm",
1326 "(V?)PALIGNRrmi",
1327 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001328 "VPERMILPDmi",
1329 "VPERMILPDrm",
1330 "VPERMILPSmi",
1331 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001332 "(V?)PINSRBrm",
1333 "(V?)PINSRDrm",
1334 "(V?)PINSRQrm",
1335 "(V?)PINSRWrm",
1336 "(V?)PMOVSXBDrm",
1337 "(V?)PMOVSXBQrm",
1338 "(V?)PMOVSXBWrm",
1339 "(V?)PMOVSXDQrm",
1340 "(V?)PMOVSXWDrm",
1341 "(V?)PMOVSXWQrm",
1342 "(V?)PMOVZXBDrm",
1343 "(V?)PMOVZXBQrm",
1344 "(V?)PMOVZXBWrm",
1345 "(V?)PMOVZXDQrm",
1346 "(V?)PMOVZXWDrm",
1347 "(V?)PMOVZXWQrm",
1348 "(V?)PSHUFBrm",
1349 "(V?)PSHUFDmi",
1350 "(V?)PSHUFHWmi",
1351 "(V?)PSHUFLWmi",
1352 "(V?)PUNPCKHBWrm",
1353 "(V?)PUNPCKHDQrm",
1354 "(V?)PUNPCKHQDQrm",
1355 "(V?)PUNPCKHWDrm",
1356 "(V?)PUNPCKLBWrm",
1357 "(V?)PUNPCKLDQrm",
1358 "(V?)PUNPCKLQDQrm",
1359 "(V?)PUNPCKLWDrm",
1360 "(V?)SHUFPDrmi",
1361 "(V?)SHUFPSrmi",
1362 "(V?)UNPCKHPDrm",
1363 "(V?)UNPCKHPSrm",
1364 "(V?)UNPCKLPDrm",
1365 "(V?)UNPCKLPSrm",
1366 "(V?)XORPDrm",
1367 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001368
1369def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1370 let Latency = 6;
1371 let NumMicroOps = 2;
1372 let ResourceCycles = [1,1];
1373}
Craig Topper5a69a002018-03-21 06:28:42 +00001374def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1375 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001376
1377def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1378 let Latency = 6;
1379 let NumMicroOps = 2;
1380 let ResourceCycles = [1,1];
1381}
Craig Topperc50570f2018-04-06 17:12:18 +00001382def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8",
Craig Topper5a69a002018-03-21 06:28:42 +00001383 "RORX(32|64)mi",
1384 "SARX(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001385 "SHLX(32|64)rm",
1386 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001387def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1388 ADCX32rm, ADCX64rm,
1389 ADOX32rm, ADOX64rm,
1390 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001391
1392def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1393 let Latency = 6;
1394 let NumMicroOps = 2;
1395 let ResourceCycles = [1,1];
1396}
Craig Topper5a69a002018-03-21 06:28:42 +00001397def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1398 "BLSI(32|64)rm",
1399 "BLSMSK(32|64)rm",
1400 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001401 "MMX_PABSBrm",
1402 "MMX_PABSDrm",
1403 "MMX_PABSWrm",
1404 "MMX_PADDBirm",
1405 "MMX_PADDDirm",
1406 "MMX_PADDQirm",
1407 "MMX_PADDSBirm",
1408 "MMX_PADDSWirm",
1409 "MMX_PADDUSBirm",
1410 "MMX_PADDUSWirm",
1411 "MMX_PADDWirm",
1412 "MMX_PAVGBirm",
1413 "MMX_PAVGWirm",
1414 "MMX_PCMPEQBirm",
1415 "MMX_PCMPEQDirm",
1416 "MMX_PCMPEQWirm",
1417 "MMX_PCMPGTBirm",
1418 "MMX_PCMPGTDirm",
1419 "MMX_PCMPGTWirm",
1420 "MMX_PMAXSWirm",
1421 "MMX_PMAXUBirm",
1422 "MMX_PMINSWirm",
1423 "MMX_PMINUBirm",
1424 "MMX_PSIGNBrm",
1425 "MMX_PSIGNDrm",
1426 "MMX_PSIGNWrm",
1427 "MMX_PSUBBirm",
1428 "MMX_PSUBDirm",
1429 "MMX_PSUBQirm",
1430 "MMX_PSUBSBirm",
1431 "MMX_PSUBSWirm",
1432 "MMX_PSUBUSBirm",
1433 "MMX_PSUBUSWirm",
1434 "MMX_PSUBWirm",
1435 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001436 "(V?)PABSBrm",
1437 "(V?)PABSDrm",
1438 "(V?)PABSWrm",
1439 "(V?)PADDBrm",
1440 "(V?)PADDDrm",
1441 "(V?)PADDQrm",
1442 "(V?)PADDSBrm",
1443 "(V?)PADDSWrm",
1444 "(V?)PADDUSBrm",
1445 "(V?)PADDUSWrm",
1446 "(V?)PADDWrm",
1447 "(V?)PAVGBrm",
1448 "(V?)PAVGWrm",
1449 "(V?)PCMPEQBrm",
1450 "(V?)PCMPEQDrm",
1451 "(V?)PCMPEQQrm",
1452 "(V?)PCMPEQWrm",
1453 "(V?)PCMPGTBrm",
1454 "(V?)PCMPGTDrm",
1455 "(V?)PCMPGTWrm",
1456 "(V?)PMAXSBrm",
1457 "(V?)PMAXSDrm",
1458 "(V?)PMAXSWrm",
1459 "(V?)PMAXUBrm",
1460 "(V?)PMAXUDrm",
1461 "(V?)PMAXUWrm",
1462 "(V?)PMINSBrm",
1463 "(V?)PMINSDrm",
1464 "(V?)PMINSWrm",
1465 "(V?)PMINUBrm",
1466 "(V?)PMINUDrm",
1467 "(V?)PMINUWrm",
1468 "(V?)PSIGNBrm",
1469 "(V?)PSIGNDrm",
1470 "(V?)PSIGNWrm",
1471 "(V?)PSUBBrm",
1472 "(V?)PSUBDrm",
1473 "(V?)PSUBQrm",
1474 "(V?)PSUBSBrm",
1475 "(V?)PSUBSWrm",
1476 "(V?)PSUBUSBrm",
1477 "(V?)PSUBUSWrm",
1478 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001479
1480def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1481 let Latency = 6;
1482 let NumMicroOps = 2;
1483 let ResourceCycles = [1,1];
1484}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001485def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001486 "MMX_PANDirm",
1487 "MMX_PORirm",
1488 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001489 "(V?)BLENDPDrmi",
1490 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001491 "VINSERTF128rm",
1492 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001493 "(V?)PANDNrm",
1494 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001495 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001496 "(V?)PORrm",
1497 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001498
1499def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1500 let Latency = 6;
1501 let NumMicroOps = 2;
1502 let ResourceCycles = [1,1];
1503}
Craig Topper2d451e72018-03-18 08:38:06 +00001504def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001505def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001506
1507def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1508 let Latency = 6;
1509 let NumMicroOps = 4;
1510 let ResourceCycles = [1,1,2];
1511}
Craig Topper5a69a002018-03-21 06:28:42 +00001512def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1513 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001514
1515def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1516 let Latency = 6;
1517 let NumMicroOps = 4;
1518 let ResourceCycles = [1,1,1,1];
1519}
1520def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1521
1522def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1523 let Latency = 6;
1524 let NumMicroOps = 4;
1525 let ResourceCycles = [1,1,1,1];
1526}
Craig Topper5a69a002018-03-21 06:28:42 +00001527def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1528 "BTR(16|32|64)mi8",
1529 "BTS(16|32|64)mi8",
1530 "SAR(8|16|32|64)m1",
1531 "SAR(8|16|32|64)mi",
1532 "SHL(8|16|32|64)m1",
1533 "SHL(8|16|32|64)mi",
1534 "SHR(8|16|32|64)m1",
1535 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001536
1537def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1538 let Latency = 6;
1539 let NumMicroOps = 4;
1540 let ResourceCycles = [1,1,1,1];
1541}
Craig Topperf0d04262018-04-06 16:16:48 +00001542def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1543 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001544
1545def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1546 let Latency = 6;
1547 let NumMicroOps = 6;
1548 let ResourceCycles = [1,5];
1549}
1550def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1551
Gadi Haber323f2e12017-10-24 20:19:47 +00001552def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1553 let Latency = 7;
1554 let NumMicroOps = 2;
1555 let ResourceCycles = [1,1];
1556}
Craig Topper5a69a002018-03-21 06:28:42 +00001557def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1558 "VPSLLQYrm",
1559 "VPSLLVQYrm",
1560 "VPSLLWYrm",
1561 "VPSRADYrm",
1562 "VPSRAWYrm",
1563 "VPSRLDYrm",
1564 "VPSRLQYrm",
1565 "VPSRLVQYrm",
1566 "VPSRLWYrm",
1567 "VTESTPDYrm",
1568 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001569
1570def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1571 let Latency = 7;
1572 let NumMicroOps = 2;
1573 let ResourceCycles = [1,1];
1574}
Craig Topper5a69a002018-03-21 06:28:42 +00001575def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1576 "FCOM64m",
1577 "FCOMP32m",
1578 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001579
1580def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1581 let Latency = 7;
1582 let NumMicroOps = 2;
1583 let ResourceCycles = [1,1];
1584}
Craig Topper5a69a002018-03-21 06:28:42 +00001585def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1586 "VANDNPSYrm",
1587 "VANDPDYrm",
1588 "VANDPSYrm",
1589 "VORPDYrm",
1590 "VORPSYrm",
1591 "VPACKSSDWYrm",
1592 "VPACKSSWBYrm",
1593 "VPACKUSDWYrm",
1594 "VPACKUSWBYrm",
1595 "VPALIGNRYrmi",
1596 "VPBLENDWYrmi",
1597 "VPERMILPDYmi",
1598 "VPERMILPDYrm",
1599 "VPERMILPSYmi",
1600 "VPERMILPSYrm",
1601 "VPSHUFBYrm",
1602 "VPSHUFDYmi",
1603 "VPSHUFHWYmi",
1604 "VPSHUFLWYmi",
1605 "VPUNPCKHBWYrm",
1606 "VPUNPCKHDQYrm",
1607 "VPUNPCKHQDQYrm",
1608 "VPUNPCKHWDYrm",
1609 "VPUNPCKLBWYrm",
1610 "VPUNPCKLDQYrm",
1611 "VPUNPCKLQDQYrm",
1612 "VPUNPCKLWDYrm",
1613 "VSHUFPDYrmi",
1614 "VSHUFPSYrmi",
1615 "VUNPCKHPDYrm",
1616 "VUNPCKHPSYrm",
1617 "VUNPCKLPDYrm",
1618 "VUNPCKLPSYrm",
1619 "VXORPDYrm",
1620 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001621
1622def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1623 let Latency = 7;
1624 let NumMicroOps = 2;
1625 let ResourceCycles = [1,1];
1626}
Craig Topper5a69a002018-03-21 06:28:42 +00001627def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1628 "VPABSDYrm",
1629 "VPABSWYrm",
1630 "VPADDBYrm",
1631 "VPADDDYrm",
1632 "VPADDQYrm",
1633 "VPADDSBYrm",
1634 "VPADDSWYrm",
1635 "VPADDUSBYrm",
1636 "VPADDUSWYrm",
1637 "VPADDWYrm",
1638 "VPAVGBYrm",
1639 "VPAVGWYrm",
1640 "VPCMPEQBYrm",
1641 "VPCMPEQDYrm",
1642 "VPCMPEQQYrm",
1643 "VPCMPEQWYrm",
1644 "VPCMPGTBYrm",
1645 "VPCMPGTDYrm",
1646 "VPCMPGTWYrm",
1647 "VPMAXSBYrm",
1648 "VPMAXSDYrm",
1649 "VPMAXSWYrm",
1650 "VPMAXUBYrm",
1651 "VPMAXUDYrm",
1652 "VPMAXUWYrm",
1653 "VPMINSBYrm",
1654 "VPMINSDYrm",
1655 "VPMINSWYrm",
1656 "VPMINUBYrm",
1657 "VPMINUDYrm",
1658 "VPMINUWYrm",
1659 "VPSIGNBYrm",
1660 "VPSIGNDYrm",
1661 "VPSIGNWYrm",
1662 "VPSUBBYrm",
1663 "VPSUBDYrm",
1664 "VPSUBQYrm",
1665 "VPSUBSBYrm",
1666 "VPSUBSWYrm",
1667 "VPSUBUSBYrm",
1668 "VPSUBUSWYrm",
1669 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001670
1671def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1672 let Latency = 7;
1673 let NumMicroOps = 2;
1674 let ResourceCycles = [1,1];
1675}
Craig Topper5a69a002018-03-21 06:28:42 +00001676def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1677 "VBLENDPSYrmi",
1678 "VPANDNYrm",
1679 "VPANDYrm",
1680 "VPBLENDDYrmi",
1681 "VPORYrm",
1682 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001683
1684def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1685 let Latency = 7;
1686 let NumMicroOps = 3;
1687 let ResourceCycles = [1,2];
1688}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001689def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001690
1691def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1692 let Latency = 7;
1693 let NumMicroOps = 3;
1694 let ResourceCycles = [2,1];
1695}
Craig Topper5a69a002018-03-21 06:28:42 +00001696def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1697 "BLENDVPSrm0",
1698 "MMX_PACKSSDWirm",
1699 "MMX_PACKSSWBirm",
1700 "MMX_PACKUSWBirm",
1701 "PBLENDVBrm0",
1702 "VBLENDVPDrm",
1703 "VBLENDVPSrm",
1704 "VMASKMOVPDrm",
1705 "VMASKMOVPSrm",
1706 "VPBLENDVBrm",
1707 "VPMASKMOVDrm",
1708 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001709
1710def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1711 let Latency = 7;
1712 let NumMicroOps = 3;
1713 let ResourceCycles = [1,2];
1714}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001715def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1716 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001717
1718def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1719 let Latency = 7;
1720 let NumMicroOps = 3;
1721 let ResourceCycles = [1,1,1];
1722}
Craig Topper5a69a002018-03-21 06:28:42 +00001723def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1724 "PSLLQrm",
1725 "PSLLWrm",
1726 "PSRADrm",
1727 "PSRAWrm",
1728 "PSRLDrm",
1729 "PSRLQrm",
1730 "PSRLWrm",
1731 "PTESTrm",
1732 "VPSLLDrm",
1733 "VPSLLQrm",
1734 "VPSLLWrm",
1735 "VPSRADrm",
1736 "VPSRAWrm",
1737 "VPSRLDrm",
1738 "VPSRLQrm",
1739 "VPSRLWrm",
1740 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001741
1742def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1743 let Latency = 7;
1744 let NumMicroOps = 3;
1745 let ResourceCycles = [1,1,1];
1746}
1747def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1748
1749def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1750 let Latency = 7;
1751 let NumMicroOps = 3;
1752 let ResourceCycles = [1,1,1];
1753}
Craig Topper5a69a002018-03-21 06:28:42 +00001754def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001755
1756def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1757 let Latency = 7;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
Craig Topper5a69a002018-03-21 06:28:42 +00001761def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1762 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001763
Gadi Haber323f2e12017-10-24 20:19:47 +00001764def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1765 let Latency = 7;
1766 let NumMicroOps = 3;
1767 let ResourceCycles = [1,1,1];
1768}
Craig Topperf4cd9082018-01-19 05:47:32 +00001769def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001770
1771def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1772 let Latency = 7;
1773 let NumMicroOps = 5;
1774 let ResourceCycles = [1,1,1,2];
1775}
Craig Topper5a69a002018-03-21 06:28:42 +00001776def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1777 "ROL(8|16|32|64)mi",
1778 "ROR(8|16|32|64)m1",
1779 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001780
1781def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1782 let Latency = 7;
1783 let NumMicroOps = 5;
1784 let ResourceCycles = [1,1,1,2];
1785}
Craig Topper5a69a002018-03-21 06:28:42 +00001786def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001787
1788def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1789 let Latency = 7;
1790 let NumMicroOps = 5;
1791 let ResourceCycles = [1,1,1,1,1];
1792}
Craig Topper5a69a002018-03-21 06:28:42 +00001793def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1794 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001795
1796def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1797 let Latency = 7;
1798 let NumMicroOps = 7;
1799 let ResourceCycles = [2,2,1,2];
1800}
Craig Topper2d451e72018-03-18 08:38:06 +00001801def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001802
1803def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1804 let Latency = 8;
1805 let NumMicroOps = 2;
1806 let ResourceCycles = [1,1];
1807}
Craig Topperb369cdb2018-01-25 06:57:42 +00001808def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001809def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001810def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001811 "MMX_CVTPS2PIirm",
1812 "MMX_CVTTPS2PIirm",
1813 "PDEP(32|64)rm",
1814 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001815 "(V?)ADDPDrm",
1816 "(V?)ADDPSrm",
1817 "(V?)ADDSDrm",
1818 "(V?)ADDSSrm",
1819 "(V?)ADDSUBPDrm",
1820 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001821 "(V?)CVTDQ2PSrm",
1822 "(V?)CVTPS2DQrm",
1823 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001824 "(V?)SUBPDrm",
1825 "(V?)SUBPSrm",
1826 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001827 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001828
1829def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1830 let Latency = 8;
1831 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001832 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001833}
Craig Topperb369cdb2018-01-25 06:57:42 +00001834def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001835
1836def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1837 let Latency = 8;
1838 let NumMicroOps = 5;
1839}
Craig Topper5a69a002018-03-21 06:28:42 +00001840def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001841
Gadi Haber323f2e12017-10-24 20:19:47 +00001842def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1843 let Latency = 8;
1844 let NumMicroOps = 2;
1845 let ResourceCycles = [1,1];
1846}
Craig Topper5a69a002018-03-21 06:28:42 +00001847def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1848 "VPMOVSXBQYrm",
1849 "VPMOVSXBWYrm",
1850 "VPMOVSXDQYrm",
1851 "VPMOVSXWDYrm",
1852 "VPMOVSXWQYrm",
1853 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001854
1855def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1856 let Latency = 8;
1857 let NumMicroOps = 2;
1858 let ResourceCycles = [1,1];
1859}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001860def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1861 "(V?)MULPSrm",
1862 "(V?)MULSDrm",
1863 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001864
1865def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1866 let Latency = 8;
1867 let NumMicroOps = 3;
1868 let ResourceCycles = [2,1];
1869}
Craig Topper5a69a002018-03-21 06:28:42 +00001870def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1871 "VBLENDVPSYrm",
1872 "VMASKMOVPDYrm",
1873 "VMASKMOVPSYrm",
1874 "VPBLENDVBYrm",
1875 "VPMASKMOVDYrm",
1876 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001877
1878def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1879 let Latency = 8;
1880 let NumMicroOps = 4;
1881 let ResourceCycles = [2,1,1];
1882}
Craig Topper5a69a002018-03-21 06:28:42 +00001883def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1884 "VPSRAVDrm",
1885 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001886
1887def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1888 let Latency = 8;
1889 let NumMicroOps = 4;
1890 let ResourceCycles = [2,1,1];
1891}
Craig Topper5a69a002018-03-21 06:28:42 +00001892def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1893 "MMX_PHADDSWrm",
1894 "MMX_PHADDWrm",
1895 "MMX_PHSUBDrm",
1896 "MMX_PHSUBSWrm",
1897 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001898 "(V?)PHADDDrm",
1899 "(V?)PHADDSWrm",
1900 "(V?)PHADDWrm",
1901 "(V?)PHSUBDrm",
1902 "(V?)PHSUBSWrm",
1903 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001904
1905def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1906 let Latency = 8;
1907 let NumMicroOps = 5;
1908 let ResourceCycles = [1,1,1,2];
1909}
Craig Topper5a69a002018-03-21 06:28:42 +00001910def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1911 "RCL(8|16|32|64)mi",
1912 "RCR(8|16|32|64)m1",
1913 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001914
1915def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1916 let Latency = 8;
1917 let NumMicroOps = 5;
1918 let ResourceCycles = [1,1,2,1];
1919}
Craig Topper13a16502018-03-19 00:56:09 +00001920def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001921
1922def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1923 let Latency = 8;
1924 let NumMicroOps = 6;
1925 let ResourceCycles = [1,1,1,3];
1926}
Craig Topper9f834812018-04-01 21:54:24 +00001927def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001928
1929def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1930 let Latency = 8;
1931 let NumMicroOps = 6;
1932 let ResourceCycles = [1,1,1,2,1];
1933}
Craig Topper9f834812018-04-01 21:54:24 +00001934def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001935 "CMPXCHG(8|16|32|64)rm",
1936 "ROL(8|16|32|64)mCL",
1937 "SAR(8|16|32|64)mCL",
1938 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001939 "SHL(8|16|32|64)mCL",
1940 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001941def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1942 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001943
1944def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1945 let Latency = 9;
1946 let NumMicroOps = 2;
1947 let ResourceCycles = [1,1];
1948}
Craig Topper5a69a002018-03-21 06:28:42 +00001949def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1950 "ADD_F64m",
1951 "ILD_F16m",
1952 "ILD_F32m",
1953 "ILD_F64m",
1954 "SUBR_F32m",
1955 "SUBR_F64m",
1956 "SUB_F32m",
1957 "SUB_F64m",
1958 "VADDPDYrm",
1959 "VADDPSYrm",
1960 "VADDSUBPDYrm",
1961 "VADDSUBPSYrm",
1962 "VCMPPDYrmi",
1963 "VCMPPSYrmi",
1964 "VCVTDQ2PSYrm",
1965 "VCVTPS2DQYrm",
1966 "VCVTTPS2DQYrm",
1967 "VMAX(C?)PDYrm",
1968 "VMAX(C?)PSYrm",
1969 "VMIN(C?)PDYrm",
1970 "VMIN(C?)PSYrm",
1971 "VSUBPDYrm",
1972 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001973
1974def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1975 let Latency = 9;
1976 let NumMicroOps = 2;
1977 let ResourceCycles = [1,1];
1978}
Craig Topper5a69a002018-03-21 06:28:42 +00001979def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1980 "VPERM2I128rm",
1981 "VPERMDYrm",
1982 "VPERMPDYmi",
1983 "VPERMPSYrm",
1984 "VPERMQYmi",
1985 "VPMOVZXBDYrm",
1986 "VPMOVZXBQYrm",
1987 "VPMOVZXBWYrm",
1988 "VPMOVZXDQYrm",
1989 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001990
1991def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1992 let Latency = 9;
1993 let NumMicroOps = 2;
1994 let ResourceCycles = [1,1];
1995}
Craig Topper5a69a002018-03-21 06:28:42 +00001996def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1997 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001998
1999def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2000 let Latency = 9;
2001 let NumMicroOps = 3;
2002 let ResourceCycles = [1,1,1];
2003}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002004def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002005
2006def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2007 let Latency = 9;
2008 let NumMicroOps = 3;
2009 let ResourceCycles = [1,1,1];
2010}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002011def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2012 "(V?)CVTSD2SIrm",
2013 "(V?)CVTSS2SI64rm",
2014 "(V?)CVTSS2SIrm",
2015 "(V?)CVTTSD2SI64rm",
2016 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002017 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002018 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002019
2020def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2021 let Latency = 9;
2022 let NumMicroOps = 3;
2023 let ResourceCycles = [1,1,1];
2024}
2025def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2026
2027def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2028 let Latency = 9;
2029 let NumMicroOps = 3;
2030 let ResourceCycles = [1,1,1];
2031}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002032def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002033def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002034 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002035 "CVTTPD2DQrm",
2036 "MMX_CVTPD2PIirm",
2037 "MMX_CVTPI2PDirm",
2038 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002039 "(V?)CVTDQ2PDrm",
2040 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002041
2042def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2043 let Latency = 9;
2044 let NumMicroOps = 3;
2045 let ResourceCycles = [1,1,1];
2046}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002047def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2048 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002049
2050def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2051 let Latency = 9;
2052 let NumMicroOps = 4;
2053 let ResourceCycles = [2,1,1];
2054}
Craig Topper5a69a002018-03-21 06:28:42 +00002055def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2056 "VPSRAVDYrm",
2057 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002058
2059def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2060 let Latency = 9;
2061 let NumMicroOps = 4;
2062 let ResourceCycles = [2,1,1];
2063}
Craig Topper5a69a002018-03-21 06:28:42 +00002064def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2065 "VPHADDSWYrm",
2066 "VPHADDWYrm",
2067 "VPHSUBDYrm",
2068 "VPHSUBSWYrm",
2069 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002070
2071def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2072 let Latency = 9;
2073 let NumMicroOps = 4;
2074 let ResourceCycles = [1,1,1,1];
2075}
Craig Topper5a69a002018-03-21 06:28:42 +00002076def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2077 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002078
2079def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2080 let Latency = 9;
2081 let NumMicroOps = 5;
2082 let ResourceCycles = [1,1,3];
2083}
2084def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2085
2086def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2087 let Latency = 9;
2088 let NumMicroOps = 5;
2089 let ResourceCycles = [1,2,1,1];
2090}
Craig Topper5a69a002018-03-21 06:28:42 +00002091def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2092 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002093
Gadi Haber323f2e12017-10-24 20:19:47 +00002094def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2095 let Latency = 10;
2096 let NumMicroOps = 2;
2097 let ResourceCycles = [1,1];
2098}
Craig Topper5a69a002018-03-21 06:28:42 +00002099def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2100 "MMX_PMADDWDirm",
2101 "MMX_PMULHRSWrm",
2102 "MMX_PMULHUWirm",
2103 "MMX_PMULHWirm",
2104 "MMX_PMULLWirm",
2105 "MMX_PMULUDQirm",
2106 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002107 "(V?)PCMPGTQrm",
2108 "(V?)PHMINPOSUWrm",
2109 "(V?)PMADDUBSWrm",
2110 "(V?)PMADDWDrm",
2111 "(V?)PMULDQrm",
2112 "(V?)PMULHRSWrm",
2113 "(V?)PMULHUWrm",
2114 "(V?)PMULHWrm",
2115 "(V?)PMULLWrm",
2116 "(V?)PMULUDQrm",
2117 "(V?)PSADBWrm",
2118 "(V?)RCPPSm",
2119 "(V?)RCPSSm",
2120 "(V?)RSQRTPSm",
2121 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002122
2123def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2124 let Latency = 10;
2125 let NumMicroOps = 2;
2126 let ResourceCycles = [1,1];
2127}
Craig Topperf82867c2017-12-13 23:11:30 +00002128def: InstRW<[BWWriteResGroup116],
2129 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2130 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002131
2132def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2133 let Latency = 10;
2134 let NumMicroOps = 3;
2135 let ResourceCycles = [2,1];
2136}
Craig Topper5a69a002018-03-21 06:28:42 +00002137def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2138 "FICOM32m",
2139 "FICOMP16m",
2140 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002141
2142def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2143 let Latency = 10;
2144 let NumMicroOps = 3;
2145 let ResourceCycles = [1,1,1];
2146}
2147def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2148
2149def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2150 let Latency = 10;
2151 let NumMicroOps = 4;
2152 let ResourceCycles = [1,2,1];
2153}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002154def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2155 "(V?)HADDPSrm",
2156 "(V?)HSUBPDrm",
2157 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002158
2159def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2160 let Latency = 10;
2161 let NumMicroOps = 4;
2162 let ResourceCycles = [1,1,1,1];
2163}
2164def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2165
2166def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002167 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002168 let NumMicroOps = 4;
2169 let ResourceCycles = [1,1,1,1];
2170}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002171def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002172
Craig Topper8104f262018-04-02 05:33:28 +00002173def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002174 let Latency = 11;
2175 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002176 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002177}
Craig Topper8104f262018-04-02 05:33:28 +00002178def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2179
2180def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2181 let Latency = 11;
2182 let NumMicroOps = 1;
2183 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2184}
2185def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002186
2187def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2188 let Latency = 11;
2189 let NumMicroOps = 2;
2190 let ResourceCycles = [1,1];
2191}
Craig Topper5a69a002018-03-21 06:28:42 +00002192def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2193 "MUL_F64m",
2194 "VPCMPGTQYrm",
2195 "VPMADDUBSWYrm",
2196 "VPMADDWDYrm",
2197 "VPMULDQYrm",
2198 "VPMULHRSWYrm",
2199 "VPMULHUWYrm",
2200 "VPMULHWYrm",
2201 "VPMULLWYrm",
2202 "VPMULUDQYrm",
2203 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002204
2205def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2206 let Latency = 11;
2207 let NumMicroOps = 2;
2208 let ResourceCycles = [1,1];
2209}
Craig Topperf82867c2017-12-13 23:11:30 +00002210def: InstRW<[BWWriteResGroup124],
2211 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002212
Gadi Haber323f2e12017-10-24 20:19:47 +00002213def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2214 let Latency = 11;
2215 let NumMicroOps = 3;
2216 let ResourceCycles = [2,1];
2217}
Craig Topper5a69a002018-03-21 06:28:42 +00002218def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2219 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002220
2221def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2222 let Latency = 11;
2223 let NumMicroOps = 3;
2224 let ResourceCycles = [2,1];
2225}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002226def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2227 "(V?)ROUNDPSm",
2228 "(V?)ROUNDSDm",
2229 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002230
2231def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2232 let Latency = 11;
2233 let NumMicroOps = 3;
2234 let ResourceCycles = [1,1,1];
2235}
2236def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2237
2238def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2239 let Latency = 11;
2240 let NumMicroOps = 4;
2241 let ResourceCycles = [1,2,1];
2242}
Craig Topper5a69a002018-03-21 06:28:42 +00002243def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2244 "VHADDPSYrm",
2245 "VHSUBPDYrm",
2246 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002247
2248def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2249 let Latency = 11;
2250 let NumMicroOps = 6;
2251 let ResourceCycles = [1,1,1,1,2];
2252}
Craig Topper5a69a002018-03-21 06:28:42 +00002253def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2254 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002255
2256def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2257 let Latency = 11;
2258 let NumMicroOps = 7;
2259 let ResourceCycles = [2,2,3];
2260}
Craig Topper5a69a002018-03-21 06:28:42 +00002261def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2262 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002263
2264def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2265 let Latency = 11;
2266 let NumMicroOps = 9;
2267 let ResourceCycles = [1,4,1,3];
2268}
2269def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2270
2271def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2272 let Latency = 11;
2273 let NumMicroOps = 11;
2274 let ResourceCycles = [2,9];
2275}
Craig Topper2d451e72018-03-18 08:38:06 +00002276def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2277def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002278
Gadi Haber323f2e12017-10-24 20:19:47 +00002279def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2280 let Latency = 12;
2281 let NumMicroOps = 3;
2282 let ResourceCycles = [2,1];
2283}
Craig Topper5a69a002018-03-21 06:28:42 +00002284def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2285 "ADD_FI32m",
2286 "SUBR_FI16m",
2287 "SUBR_FI32m",
2288 "SUB_FI16m",
2289 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002290 "VROUNDPDYm",
2291 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002292
2293def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2294 let Latency = 12;
2295 let NumMicroOps = 4;
2296 let ResourceCycles = [1,2,1];
2297}
Craig Topper5a69a002018-03-21 06:28:42 +00002298def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002299
Craig Topper8104f262018-04-02 05:33:28 +00002300def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002301 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002302 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002303 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002304}
Craig Topper8104f262018-04-02 05:33:28 +00002305def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2306
2307def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2308 let Latency = 11;
2309 let NumMicroOps = 1;
2310 let ResourceCycles = [1,4];
2311}
2312def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002313
2314def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2315 let Latency = 13;
2316 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002317 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002318}
2319def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2320
Craig Topper8104f262018-04-02 05:33:28 +00002321def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002322 let Latency = 14;
2323 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002324 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002325}
Craig Topper8104f262018-04-02 05:33:28 +00002326def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2327
2328def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2329 let Latency = 14;
2330 let NumMicroOps = 1;
2331 let ResourceCycles = [1,4];
2332}
2333def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002334
Gadi Haber323f2e12017-10-24 20:19:47 +00002335def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2336 let Latency = 14;
2337 let NumMicroOps = 3;
2338 let ResourceCycles = [1,1,1];
2339}
Craig Topper5a69a002018-03-21 06:28:42 +00002340def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2341 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002342
2343def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2344 let Latency = 14;
2345 let NumMicroOps = 4;
2346 let ResourceCycles = [2,1,1];
2347}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002348def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002349
2350def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2351 let Latency = 14;
2352 let NumMicroOps = 4;
2353 let ResourceCycles = [1,1,1,1];
2354}
Craig Topper5a69a002018-03-21 06:28:42 +00002355def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002356
2357def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2358 let Latency = 14;
2359 let NumMicroOps = 8;
2360 let ResourceCycles = [2,2,1,3];
2361}
2362def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2363
2364def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2365 let Latency = 14;
2366 let NumMicroOps = 10;
2367 let ResourceCycles = [2,3,1,4];
2368}
2369def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2370
2371def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2372 let Latency = 14;
2373 let NumMicroOps = 12;
2374 let ResourceCycles = [2,1,4,5];
2375}
2376def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2377
2378def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2379 let Latency = 15;
2380 let NumMicroOps = 1;
2381 let ResourceCycles = [1];
2382}
Craig Topper5a69a002018-03-21 06:28:42 +00002383def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2384 "DIVR_FST0r",
2385 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002386
Gadi Haber323f2e12017-10-24 20:19:47 +00002387def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2388 let Latency = 15;
2389 let NumMicroOps = 10;
2390 let ResourceCycles = [1,1,1,4,1,2];
2391}
Craig Topper13a16502018-03-19 00:56:09 +00002392def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002393
Craig Topper8104f262018-04-02 05:33:28 +00002394def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002395 let Latency = 16;
2396 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002397 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002398}
Craig Topper5a69a002018-03-21 06:28:42 +00002399def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2400 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002401
2402def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2403 let Latency = 16;
2404 let NumMicroOps = 3;
2405 let ResourceCycles = [2,1];
2406}
2407def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2408
Gadi Haber323f2e12017-10-24 20:19:47 +00002409def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2410 let Latency = 16;
2411 let NumMicroOps = 14;
2412 let ResourceCycles = [1,1,1,4,2,5];
2413}
2414def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2415
2416def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2417 let Latency = 16;
2418 let NumMicroOps = 16;
2419 let ResourceCycles = [16];
2420}
Craig Topper5a69a002018-03-21 06:28:42 +00002421def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002422
Craig Topper8104f262018-04-02 05:33:28 +00002423def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002424 let Latency = 17;
2425 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002426 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002427}
2428def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2429
2430def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2431 let Latency = 17;
2432 let NumMicroOps = 4;
2433 let ResourceCycles = [2,1,1];
2434}
Craig Topper5a69a002018-03-21 06:28:42 +00002435def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2436 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002437
Craig Topper8104f262018-04-02 05:33:28 +00002438def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002439 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002440 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002441 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002442}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002443def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2444 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002445
Gadi Haber323f2e12017-10-24 20:19:47 +00002446def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2447 let Latency = 18;
2448 let NumMicroOps = 8;
2449 let ResourceCycles = [1,1,1,5];
2450}
Craig Topper5a69a002018-03-21 06:28:42 +00002451def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002452def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002453
2454def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2455 let Latency = 18;
2456 let NumMicroOps = 11;
2457 let ResourceCycles = [2,1,1,3,1,3];
2458}
Craig Topper13a16502018-03-19 00:56:09 +00002459def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002460
Craig Topper8104f262018-04-02 05:33:28 +00002461def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002462 let Latency = 19;
2463 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002464 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002465}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002466def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002467 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002468
Gadi Haber323f2e12017-10-24 20:19:47 +00002469def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2470 let Latency = 19;
2471 let NumMicroOps = 5;
2472 let ResourceCycles = [2,1,1,1];
2473}
Craig Topper5a69a002018-03-21 06:28:42 +00002474def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002475
Gadi Haber323f2e12017-10-24 20:19:47 +00002476def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2477 let Latency = 20;
2478 let NumMicroOps = 1;
2479 let ResourceCycles = [1];
2480}
Craig Topper5a69a002018-03-21 06:28:42 +00002481def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2482 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002483 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002484
2485def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2486 let Latency = 20;
2487 let NumMicroOps = 5;
2488 let ResourceCycles = [2,1,1,1];
2489}
2490def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2491
2492def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2493 let Latency = 20;
2494 let NumMicroOps = 8;
2495 let ResourceCycles = [1,1,1,1,1,1,2];
2496}
Craig Topper5a69a002018-03-21 06:28:42 +00002497def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2498 "INSL",
2499 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002500
Craig Topper8104f262018-04-02 05:33:28 +00002501def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002502 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002503 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002504 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002505}
Craig Topper8104f262018-04-02 05:33:28 +00002506def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2507
2508def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2509 let Latency = 16;
2510 let NumMicroOps = 1;
2511 let ResourceCycles = [1,8];
2512}
2513def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002514
2515def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2516 let Latency = 21;
2517 let NumMicroOps = 2;
2518 let ResourceCycles = [1,1];
2519}
Craig Topper5a69a002018-03-21 06:28:42 +00002520def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2521 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002522
Craig Topper8104f262018-04-02 05:33:28 +00002523def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002524 let Latency = 21;
2525 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002526 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002527}
2528def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2529
2530def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2531 let Latency = 21;
2532 let NumMicroOps = 19;
2533 let ResourceCycles = [2,1,4,1,1,4,6];
2534}
2535def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2536
2537def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2538 let Latency = 22;
2539 let NumMicroOps = 18;
2540 let ResourceCycles = [1,1,16];
2541}
2542def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2543
Craig Topper8104f262018-04-02 05:33:28 +00002544def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002545 let Latency = 23;
2546 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002547 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002548}
2549def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2550
Craig Topper8104f262018-04-02 05:33:28 +00002551def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002552 let Latency = 23;
2553 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002554 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002555}
2556def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2557
Gadi Haber323f2e12017-10-24 20:19:47 +00002558def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2559 let Latency = 23;
2560 let NumMicroOps = 19;
2561 let ResourceCycles = [3,1,15];
2562}
Craig Topper391c6f92017-12-10 01:24:08 +00002563def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002564
2565def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2566 let Latency = 24;
2567 let NumMicroOps = 3;
2568 let ResourceCycles = [1,1,1];
2569}
Craig Topper5a69a002018-03-21 06:28:42 +00002570def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2571 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002572
Craig Topper8104f262018-04-02 05:33:28 +00002573def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002574 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002575 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002576 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002577}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002578def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2579 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002580
2581def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2582 let Latency = 26;
2583 let NumMicroOps = 2;
2584 let ResourceCycles = [1,1];
2585}
Craig Topper5a69a002018-03-21 06:28:42 +00002586def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002587 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002588
Craig Topper8104f262018-04-02 05:33:28 +00002589def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002590 let Latency = 27;
2591 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002592 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002593}
2594def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2595
2596def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2597 let Latency = 29;
2598 let NumMicroOps = 3;
2599 let ResourceCycles = [1,1,1];
2600}
Craig Topper5a69a002018-03-21 06:28:42 +00002601def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2602 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002603
Craig Topper8104f262018-04-02 05:33:28 +00002604def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002605 let Latency = 29;
2606 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002607 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002608}
2609def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2610
2611def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2612 let Latency = 22;
2613 let NumMicroOps = 7;
2614 let ResourceCycles = [1,3,2,1];
2615}
Craig Topper17a31182017-12-16 18:35:29 +00002616def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002617
2618def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2619 let Latency = 23;
2620 let NumMicroOps = 9;
2621 let ResourceCycles = [1,3,4,1];
2622}
Craig Topper17a31182017-12-16 18:35:29 +00002623def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002624
2625def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2626 let Latency = 24;
2627 let NumMicroOps = 9;
2628 let ResourceCycles = [1,5,2,1];
2629}
Craig Topper17a31182017-12-16 18:35:29 +00002630def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002631
2632def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2633 let Latency = 25;
2634 let NumMicroOps = 7;
2635 let ResourceCycles = [1,3,2,1];
2636}
Craig Topper17a31182017-12-16 18:35:29 +00002637def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2638 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002639
2640def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2641 let Latency = 26;
2642 let NumMicroOps = 9;
2643 let ResourceCycles = [1,5,2,1];
2644}
Craig Topper17a31182017-12-16 18:35:29 +00002645def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002646
2647def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2648 let Latency = 26;
2649 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002650 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002651}
Craig Topper17a31182017-12-16 18:35:29 +00002652def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002653
2654def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2655 let Latency = 27;
2656 let NumMicroOps = 9;
2657 let ResourceCycles = [1,5,2,1];
2658}
Craig Topper17a31182017-12-16 18:35:29 +00002659def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002660
Gadi Haber323f2e12017-10-24 20:19:47 +00002661def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2662 let Latency = 29;
2663 let NumMicroOps = 27;
2664 let ResourceCycles = [1,5,1,1,19];
2665}
2666def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2667
2668def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2669 let Latency = 30;
2670 let NumMicroOps = 28;
2671 let ResourceCycles = [1,6,1,1,19];
2672}
Craig Topper2d451e72018-03-18 08:38:06 +00002673def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002674
2675def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2676 let Latency = 31;
2677 let NumMicroOps = 31;
2678 let ResourceCycles = [8,1,21,1];
2679}
2680def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2681
Craig Topper8104f262018-04-02 05:33:28 +00002682def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2683 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002684 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002685 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002686}
2687def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2688
2689def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2690 let Latency = 34;
2691 let NumMicroOps = 8;
2692 let ResourceCycles = [2,2,2,1,1];
2693}
Craig Topper13a16502018-03-19 00:56:09 +00002694def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002695
2696def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2697 let Latency = 34;
2698 let NumMicroOps = 23;
2699 let ResourceCycles = [1,5,3,4,10];
2700}
Craig Topper5a69a002018-03-21 06:28:42 +00002701def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2702 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002703
2704def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2705 let Latency = 35;
2706 let NumMicroOps = 8;
2707 let ResourceCycles = [2,2,2,1,1];
2708}
Craig Topper13a16502018-03-19 00:56:09 +00002709def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002710
2711def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2712 let Latency = 35;
2713 let NumMicroOps = 23;
2714 let ResourceCycles = [1,5,2,1,4,10];
2715}
Craig Topper5a69a002018-03-21 06:28:42 +00002716def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2717 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002718
Craig Topper8104f262018-04-02 05:33:28 +00002719def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2720 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002721 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002722 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002723}
2724def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2725
2726def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2727 let Latency = 42;
2728 let NumMicroOps = 22;
2729 let ResourceCycles = [2,20];
2730}
Craig Topper2d451e72018-03-18 08:38:06 +00002731def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002732
2733def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2734 let Latency = 60;
2735 let NumMicroOps = 64;
2736 let ResourceCycles = [2,2,8,1,10,2,39];
2737}
2738def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002739
2740def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2741 let Latency = 63;
2742 let NumMicroOps = 88;
2743 let ResourceCycles = [4,4,31,1,2,1,45];
2744}
Craig Topper2d451e72018-03-18 08:38:06 +00002745def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002746
2747def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2748 let Latency = 63;
2749 let NumMicroOps = 90;
2750 let ResourceCycles = [4,2,33,1,2,1,47];
2751}
Craig Topper2d451e72018-03-18 08:38:06 +00002752def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002753
2754def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2755 let Latency = 75;
2756 let NumMicroOps = 15;
2757 let ResourceCycles = [6,3,6];
2758}
2759def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2760
2761def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2762 let Latency = 80;
2763 let NumMicroOps = 32;
2764 let ResourceCycles = [7,7,3,3,1,11];
2765}
2766def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2767
2768def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2769 let Latency = 115;
2770 let NumMicroOps = 100;
2771 let ResourceCycles = [9,9,11,8,1,11,21,30];
2772}
2773def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002774
2775} // SchedModel
2776