blob: 4b377d76cb6b0683ea4c2905cbace891e4f9dce3 [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 "RORX(32|64)ri",
482 "SAR(8|16|32|64)r1",
483 "SAR(8|16|32|64)ri",
484 "SARX(32|64)rr",
485 "SBB(16|32|64)ri",
486 "SBB(16|32|64)i",
487 "SBB(8|16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000488 "SHL(8|16|32|64)r1",
489 "SHL(8|16|32|64)ri",
490 "SHLX(32|64)rr",
491 "SHR(8|16|32|64)r1",
492 "SHR(8|16|32|64)ri",
493 "SHRX(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000494
495def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
496 let Latency = 1;
497 let NumMicroOps = 1;
498 let ResourceCycles = [1];
499}
Craig Topper5a69a002018-03-21 06:28:42 +0000500def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
501 "BLSI(32|64)rr",
502 "BLSMSK(32|64)rr",
503 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000504 "LEA(16|32|64)(_32)?r",
505 "MMX_PABSBrr",
506 "MMX_PABSDrr",
507 "MMX_PABSWrr",
508 "MMX_PADDBirr",
509 "MMX_PADDDirr",
510 "MMX_PADDQirr",
511 "MMX_PADDSBirr",
512 "MMX_PADDSWirr",
513 "MMX_PADDUSBirr",
514 "MMX_PADDUSWirr",
515 "MMX_PADDWirr",
516 "MMX_PAVGBirr",
517 "MMX_PAVGWirr",
518 "MMX_PCMPEQBirr",
519 "MMX_PCMPEQDirr",
520 "MMX_PCMPEQWirr",
521 "MMX_PCMPGTBirr",
522 "MMX_PCMPGTDirr",
523 "MMX_PCMPGTWirr",
524 "MMX_PMAXSWirr",
525 "MMX_PMAXUBirr",
526 "MMX_PMINSWirr",
527 "MMX_PMINUBirr",
528 "MMX_PSIGNBrr",
529 "MMX_PSIGNDrr",
530 "MMX_PSIGNWrr",
531 "MMX_PSUBBirr",
532 "MMX_PSUBDirr",
533 "MMX_PSUBQirr",
534 "MMX_PSUBSBirr",
535 "MMX_PSUBSWirr",
536 "MMX_PSUBUSBirr",
537 "MMX_PSUBUSWirr",
538 "MMX_PSUBWirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000539 "(V?)PABSB(Y?)rr",
540 "(V?)PABSD(Y?)rr",
541 "(V?)PABSW(Y?)rr",
542 "(V?)PADDB(Y?)rr",
543 "(V?)PADDD(Y?)rr",
544 "(V?)PADDQ(Y?)rr",
545 "(V?)PADDSB(Y?)rr",
546 "(V?)PADDSW(Y?)rr",
547 "(V?)PADDUSB(Y?)rr",
548 "(V?)PADDUSW(Y?)rr",
549 "(V?)PADDW(Y?)rr",
550 "(V?)PAVGB(Y?)rr",
551 "(V?)PAVGW(Y?)rr",
552 "(V?)PCMPEQB(Y?)rr",
553 "(V?)PCMPEQD(Y?)rr",
554 "(V?)PCMPEQQ(Y?)rr",
555 "(V?)PCMPEQW(Y?)rr",
556 "(V?)PCMPGTB(Y?)rr",
557 "(V?)PCMPGTD(Y?)rr",
558 "(V?)PCMPGTW(Y?)rr",
559 "(V?)PMAXSB(Y?)rr",
560 "(V?)PMAXSD(Y?)rr",
561 "(V?)PMAXSW(Y?)rr",
562 "(V?)PMAXUB(Y?)rr",
563 "(V?)PMAXUD(Y?)rr",
564 "(V?)PMAXUW(Y?)rr",
565 "(V?)PMINSB(Y?)rr",
566 "(V?)PMINSD(Y?)rr",
567 "(V?)PMINSW(Y?)rr",
568 "(V?)PMINUB(Y?)rr",
569 "(V?)PMINUD(Y?)rr",
570 "(V?)PMINUW(Y?)rr",
571 "(V?)PSIGNB(Y?)rr",
572 "(V?)PSIGND(Y?)rr",
573 "(V?)PSIGNW(Y?)rr",
574 "(V?)PSUBB(Y?)rr",
575 "(V?)PSUBD(Y?)rr",
576 "(V?)PSUBQ(Y?)rr",
577 "(V?)PSUBSB(Y?)rr",
578 "(V?)PSUBSW(Y?)rr",
579 "(V?)PSUBUSB(Y?)rr",
580 "(V?)PSUBUSW(Y?)rr",
581 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000582
583def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
584 let Latency = 1;
585 let NumMicroOps = 1;
586 let ResourceCycles = [1];
587}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000588def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000589 "MMX_PANDNirr",
590 "MMX_PANDirr",
591 "MMX_PORirr",
592 "MMX_PXORirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000593 "(V?)BLENDPD(Y?)rri",
594 "(V?)BLENDPS(Y?)rri",
595 "(V?)MOVDQA(Y?)rr",
596 "(V?)MOVDQU(Y?)rr",
597 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000598 "VMOVZPQILo2PQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000599 "(V?)PANDN(Y?)rr",
600 "(V?)PAND(Y?)rr",
601 "VPBLENDD(Y?)rri",
602 "(V?)POR(Y?)rr",
603 "(V?)PXOR(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000604
605def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
606 let Latency = 1;
607 let NumMicroOps = 1;
608 let ResourceCycles = [1];
609}
Craig Topperfbe31322018-04-05 21:56:19 +0000610def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000611def: InstRW<[BWWriteResGroup9], (instregex "CLC",
Craig Topper5a69a002018-03-21 06:28:42 +0000612 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000613 "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000614 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000615 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000616 "SGDT64m",
617 "SIDT64m",
618 "SLDT64m",
619 "SMSW16m",
620 "STC",
621 "STRm",
Craig Topper5a69a002018-03-21 06:28:42 +0000622 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000623 "XCHG(16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000624
625def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
626 let Latency = 1;
627 let NumMicroOps = 2;
628 let ResourceCycles = [1,1];
629}
Craig Topper5a69a002018-03-21 06:28:42 +0000630def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
631 "MMX_MOVD64from64rm",
632 "MMX_MOVD64mr",
633 "MMX_MOVNTQmr",
634 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000635 "MOVNTI_64mr",
636 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000637 "ST_FP32m",
638 "ST_FP64m",
639 "ST_FP80m",
640 "VEXTRACTF128mr",
641 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000642 "(V?)MOVAPD(Y?)mr",
643 "(V?)MOVAPS(Y?)mr",
644 "(V?)MOVDQA(Y?)mr",
645 "(V?)MOVDQU(Y?)mr",
646 "(V?)MOVHPDmr",
647 "(V?)MOVHPSmr",
648 "(V?)MOVLPDmr",
649 "(V?)MOVLPSmr",
650 "(V?)MOVNTDQ(V?)mr",
651 "(V?)MOVNTPD(V?)mr",
652 "(V?)MOVNTPS(V?)mr",
653 "(V?)MOVPDI2DImr",
654 "(V?)MOVPQI2QImr",
655 "(V?)MOVPQIto64mr",
656 "(V?)MOVSDmr",
657 "(V?)MOVSSmr",
658 "(V?)MOVUPD(Y?)mr",
659 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000660
661def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [2];
665}
Craig Topper5a69a002018-03-21 06:28:42 +0000666def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
667 "BLENDVPSrr0",
668 "MMX_PINSRWrr",
669 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000670 "VBLENDVPD(Y?)rr",
671 "VBLENDVPS(Y?)rr",
672 "VPBLENDVB(Y?)rr",
673 "(V?)PINSRBrr",
674 "(V?)PINSRDrr",
675 "(V?)PINSRQrr",
676 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000677
678def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
679 let Latency = 2;
680 let NumMicroOps = 2;
681 let ResourceCycles = [2];
682}
683def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
684
685def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
686 let Latency = 2;
687 let NumMicroOps = 2;
688 let ResourceCycles = [2];
689}
Craig Topper5a69a002018-03-21 06:28:42 +0000690def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
691 "ROL(8|16|32|64)ri",
692 "ROR(8|16|32|64)r1",
693 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000694
695def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
696 let Latency = 2;
697 let NumMicroOps = 2;
698 let ResourceCycles = [2];
699}
Craig Topper5a69a002018-03-21 06:28:42 +0000700def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
701 "MFENCE",
702 "WAIT",
703 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000704
705def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
706 let Latency = 2;
707 let NumMicroOps = 2;
708 let ResourceCycles = [1,1];
709}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000710def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
711 "VCVTPH2PS(Y?)rr",
712 "(V?)CVTPS2PDrr",
713 "(V?)CVTSS2SDrr",
714 "(V?)EXTRACTPSrr",
715 "(V?)PEXTRBrr",
716 "(V?)PEXTRDrr",
717 "(V?)PEXTRQrr",
718 "(V?)PEXTRWrr",
719 "(V?)PSLLDrr",
720 "(V?)PSLLQrr",
721 "(V?)PSLLWrr",
722 "(V?)PSRADrr",
723 "(V?)PSRAWrr",
724 "(V?)PSRLDrr",
725 "(V?)PSRLQrr",
726 "(V?)PSRLWrr",
727 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000728
729def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
730 let Latency = 2;
731 let NumMicroOps = 2;
732 let ResourceCycles = [1,1];
733}
734def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
735
736def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
737 let Latency = 2;
738 let NumMicroOps = 2;
739 let ResourceCycles = [1,1];
740}
741def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
742
743def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
744 let Latency = 2;
745 let NumMicroOps = 2;
746 let ResourceCycles = [1,1];
747}
748def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
749
750def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
751 let Latency = 2;
752 let NumMicroOps = 2;
753 let ResourceCycles = [1,1];
754}
Craig Topper498875f2018-04-04 17:54:19 +0000755def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
756
757def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
758 let Latency = 1;
759 let NumMicroOps = 1;
760 let ResourceCycles = [1];
761}
762def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000763
764def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
765 let Latency = 2;
766 let NumMicroOps = 2;
767 let ResourceCycles = [1,1];
768}
Craig Topper2d451e72018-03-18 08:38:06 +0000769def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000770def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000771def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
772 "ADC8ri",
773 "CMOV(A|BE)(16|32|64)rr",
774 "SBB8i8",
775 "SBB8ri",
776 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000777
778def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
779 let Latency = 2;
780 let NumMicroOps = 3;
781 let ResourceCycles = [1,1,1];
782}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000783def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
784 "(V?)PEXTRBmr",
785 "(V?)PEXTRDmr",
786 "(V?)PEXTRQmr",
787 "(V?)PEXTRWmr",
788 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000789
790def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
791 let Latency = 2;
792 let NumMicroOps = 3;
793 let ResourceCycles = [1,1,1];
794}
795def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
796
Gadi Haber323f2e12017-10-24 20:19:47 +0000797def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
798 let Latency = 2;
799 let NumMicroOps = 3;
800 let ResourceCycles = [1,1,1];
801}
802def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
803
804def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
805 let Latency = 2;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,1,1];
808}
Craig Topper2d451e72018-03-18 08:38:06 +0000809def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000810def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
811 "PUSH64i8",
812 "STOSB",
813 "STOSL",
814 "STOSQ",
815 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000816
Gadi Haber323f2e12017-10-24 20:19:47 +0000817def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
818 let Latency = 3;
819 let NumMicroOps = 1;
820 let ResourceCycles = [1];
821}
Clement Courbet327fac42018-03-07 08:14:02 +0000822def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000823def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000824def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000825 "ADD_FST0r",
826 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000827 "MMX_CVTPI2PSirr",
828 "PDEP(32|64)rr",
829 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000830 "SHLD(16|32|64)rri8",
831 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000832 "SUBR_FPrST0",
833 "SUBR_FST0r",
834 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000835 "SUB_FPrST0",
836 "SUB_FST0r",
837 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000838 "(V?)ADDPD(Y?)rr",
839 "(V?)ADDPS(Y?)rr",
840 "(V?)ADDSDrr",
841 "(V?)ADDSSrr",
842 "(V?)ADDSUBPD(Y?)rr",
843 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000844 "(V?)CVTDQ2PS(Y?)rr",
845 "(V?)CVTPS2DQ(Y?)rr",
846 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000847 "(V?)SUBPD(Y?)rr",
848 "(V?)SUBPS(Y?)rr",
849 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000850 "(V?)SUBSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000851
852def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
853 let Latency = 3;
854 let NumMicroOps = 2;
855 let ResourceCycles = [1,1];
856}
Clement Courbet327fac42018-03-07 08:14:02 +0000857def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000858
859def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
860 let Latency = 3;
861 let NumMicroOps = 1;
862 let ResourceCycles = [1];
863}
Craig Topper5a69a002018-03-21 06:28:42 +0000864def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
865 "VBROADCASTSSYrr",
866 "VEXTRACTF128rr",
867 "VEXTRACTI128rr",
868 "VINSERTF128rr",
869 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000870 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000871 "VPBROADCASTDYrr",
872 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000873 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000874 "VPERM2F128rr",
875 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000876 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000877 "VPERMQYri",
878 "VPMOVSXBDYrr",
879 "VPMOVSXBQYrr",
880 "VPMOVSXBWYrr",
881 "VPMOVSXDQYrr",
882 "VPMOVSXWDYrr",
883 "VPMOVSXWQYrr",
884 "VPMOVZXBDYrr",
885 "VPMOVZXBQYrr",
886 "VPMOVZXBWYrr",
887 "VPMOVZXDQYrr",
888 "VPMOVZXWDYrr",
889 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000890
891def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
892 let Latency = 3;
893 let NumMicroOps = 1;
894 let ResourceCycles = [1];
895}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000896def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
897 "(V?)MULPS(Y?)rr",
898 "(V?)MULSDrr",
899 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000900
901def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
902 let Latency = 3;
903 let NumMicroOps = 3;
904 let ResourceCycles = [3];
905}
Craig Topper5a69a002018-03-21 06:28:42 +0000906def: InstRW<[BWWriteResGroup30], (instregex "XADD(8|16|32|64)rr",
907 "XCHG8rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
910 let Latency = 3;
911 let NumMicroOps = 3;
912 let ResourceCycles = [2,1];
913}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000914def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
915 "VPSRAVD(Y?)rr",
916 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000917
918def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
919 let Latency = 3;
920 let NumMicroOps = 3;
921 let ResourceCycles = [2,1];
922}
Craig Topper5a69a002018-03-21 06:28:42 +0000923def: InstRW<[BWWriteResGroup32], (instregex "MMX_PHADDDrr",
924 "MMX_PHADDSWrr",
925 "MMX_PHADDWrr",
926 "MMX_PHSUBDrr",
927 "MMX_PHSUBSWrr",
928 "MMX_PHSUBWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000929 "(V?)PHADDD(Y?)rr",
930 "(V?)PHADDSW(Y?)rr",
931 "(V?)PHADDW(Y?)rr",
932 "(V?)PHSUBD(Y?)rr",
933 "(V?)PHSUBSW(Y?)rr",
934 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000935
936def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
937 let Latency = 3;
938 let NumMicroOps = 3;
939 let ResourceCycles = [2,1];
940}
Craig Topper5a69a002018-03-21 06:28:42 +0000941def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
942 "MMX_PACKSSWBirr",
943 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000944
945def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
946 let Latency = 3;
947 let NumMicroOps = 3;
948 let ResourceCycles = [1,2];
949}
950def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
951
952def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
953 let Latency = 3;
954 let NumMicroOps = 3;
955 let ResourceCycles = [1,2];
956}
Craig Topper5a69a002018-03-21 06:28:42 +0000957def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
958 "RCL(8|16|32|64)ri",
959 "RCR(8|16|32|64)r1",
960 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000961
962def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
963 let Latency = 3;
964 let NumMicroOps = 3;
965 let ResourceCycles = [2,1];
966}
Craig Topper5a69a002018-03-21 06:28:42 +0000967def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
968 "ROR(8|16|32|64)rCL",
969 "SAR(8|16|32|64)rCL",
970 "SHL(8|16|32|64)rCL",
971 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000972
973def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
974 let Latency = 3;
975 let NumMicroOps = 4;
976 let ResourceCycles = [1,1,1,1];
977}
978def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
979
980def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
981 let Latency = 3;
982 let NumMicroOps = 4;
983 let ResourceCycles = [1,1,1,1];
984}
Craig Topper5a69a002018-03-21 06:28:42 +0000985def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
986 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000987
988def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
989 let Latency = 4;
990 let NumMicroOps = 2;
991 let ResourceCycles = [1,1];
992}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000993def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
994 "(V?)CVTSD2SIrr",
995 "(V?)CVTSS2SI64rr",
996 "(V?)CVTSS2SIrr",
997 "(V?)CVTTSD2SI64rr",
998 "(V?)CVTTSD2SIrr",
999 "(V?)CVTTSS2SI64rr",
1000 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001001
1002def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
1003 let Latency = 4;
1004 let NumMicroOps = 2;
1005 let ResourceCycles = [1,1];
1006}
Craig Topper5a69a002018-03-21 06:28:42 +00001007def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
1008 "VPSLLDYrr",
1009 "VPSLLQYrr",
1010 "VPSLLWYrr",
1011 "VPSRADYrr",
1012 "VPSRAWYrr",
1013 "VPSRLDYrr",
1014 "VPSRLQYrr",
1015 "VPSRLWYrr",
1016 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001017
1018def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
1019 let Latency = 4;
1020 let NumMicroOps = 2;
1021 let ResourceCycles = [1,1];
1022}
1023def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
1024
1025def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
1026 let Latency = 4;
1027 let NumMicroOps = 2;
1028 let ResourceCycles = [1,1];
1029}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001030def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001031def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001032 "MMX_CVTPI2PDirr",
1033 "MMX_CVTPS2PIirr",
1034 "MMX_CVTTPD2PIirr",
1035 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001036 "(V?)CVTDQ2PDrr",
1037 "(V?)CVTPD2DQrr",
1038 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +00001039 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001040 "(V?)CVTSD2SSrr",
1041 "(V?)CVTSI642SDrr",
1042 "(V?)CVTSI2SDrr",
1043 "(V?)CVTSI2SSrr",
1044 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001045
1046def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1047 let Latency = 4;
1048 let NumMicroOps = 4;
1049}
Craig Topper5a69a002018-03-21 06:28:42 +00001050def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001051
1052def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
1053 let Latency = 4;
1054 let NumMicroOps = 3;
1055 let ResourceCycles = [1,1,1];
1056}
1057def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
1058
1059def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
1060 let Latency = 4;
1061 let NumMicroOps = 3;
1062 let ResourceCycles = [1,1,1];
1063}
Craig Topper5a69a002018-03-21 06:28:42 +00001064def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
1065 "ISTT_FP32m",
1066 "ISTT_FP64m",
1067 "IST_F16m",
1068 "IST_F32m",
1069 "IST_FP16m",
1070 "IST_FP32m",
1071 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001072 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001073
1074def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1075 let Latency = 4;
1076 let NumMicroOps = 4;
1077 let ResourceCycles = [4];
1078}
1079def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1080
1081def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1082 let Latency = 4;
1083 let NumMicroOps = 4;
1084 let ResourceCycles = [1,3];
1085}
1086def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1087
1088def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1089 let Latency = 5;
1090 let NumMicroOps = 1;
1091 let ResourceCycles = [1];
1092}
Craig Topper5a69a002018-03-21 06:28:42 +00001093def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1094 "MMX_PMADDWDirr",
1095 "MMX_PMULHRSWrr",
1096 "MMX_PMULHUWirr",
1097 "MMX_PMULHWirr",
1098 "MMX_PMULLWirr",
1099 "MMX_PMULUDQirr",
1100 "MMX_PSADBWirr",
1101 "MUL_FPrST0",
1102 "MUL_FST0r",
1103 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001104 "(V?)PCMPGTQ(Y?)rr",
1105 "(V?)PHMINPOSUWrr",
1106 "(V?)PMADDUBSW(Y?)rr",
1107 "(V?)PMADDWD(Y?)rr",
1108 "(V?)PMULDQ(Y?)rr",
1109 "(V?)PMULHRSW(Y?)rr",
1110 "(V?)PMULHUW(Y?)rr",
1111 "(V?)PMULHW(Y?)rr",
1112 "(V?)PMULLW(Y?)rr",
1113 "(V?)PMULUDQ(Y?)rr",
1114 "(V?)PSADBW(Y?)rr",
1115 "(V?)RCPPSr",
1116 "(V?)RCPSSr",
1117 "(V?)RSQRTPSr",
1118 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001119
1120def BWWriteResGroup48 : SchedWriteRes<[BWPort01]> {
1121 let Latency = 5;
1122 let NumMicroOps = 1;
1123 let ResourceCycles = [1];
1124}
Craig Topperf82867c2017-12-13 23:11:30 +00001125def: InstRW<[BWWriteResGroup48],
1126 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1127 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001128
1129def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1130 let Latency = 5;
1131 let NumMicroOps = 1;
1132 let ResourceCycles = [1];
1133}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001134def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001135 "MMX_MOVD64to64rm",
1136 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001137 "MOVSX(16|32|64)rm16",
1138 "MOVSX(16|32|64)rm32",
1139 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001140 "MOVZX(16|32|64)rm16",
1141 "MOVZX(16|32|64)rm8",
1142 "PREFETCHNTA",
1143 "PREFETCHT0",
1144 "PREFETCHT1",
1145 "PREFETCHT2",
1146 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001147 "(V?)LDDQUrm",
1148 "(V?)MOV64toPQIrm",
1149 "(V?)MOVAPDrm",
1150 "(V?)MOVAPSrm",
1151 "(V?)MOVDDUPrm",
1152 "(V?)MOVDI2PDIrm",
1153 "(V?)MOVDQArm",
1154 "(V?)MOVDQUrm",
1155 "(V?)MOVNTDQArm",
1156 "(V?)MOVQI2PQIrm",
1157 "(V?)MOVSDrm",
1158 "(V?)MOVSHDUPrm",
1159 "(V?)MOVSLDUPrm",
1160 "(V?)MOVSSrm",
1161 "(V?)MOVUPDrm",
1162 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001163 "VPBROADCASTDrm",
1164 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001165
1166def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1167 let Latency = 5;
1168 let NumMicroOps = 3;
1169 let ResourceCycles = [1,2];
1170}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001171def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1172 "(V?)HADDPD(Y?)rr",
1173 "(V?)HADDPS(Y?)rr",
1174 "(V?)HSUBPD(Y?)rr",
1175 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001176
1177def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1178 let Latency = 5;
1179 let NumMicroOps = 3;
1180 let ResourceCycles = [1,1,1];
1181}
1182def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1183
1184def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001185 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001186 let NumMicroOps = 3;
1187 let ResourceCycles = [1,1,1];
1188}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001189def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001190
1191def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1192 let Latency = 5;
1193 let NumMicroOps = 4;
1194 let ResourceCycles = [1,1,1,1];
1195}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001196def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1197 "VMASKMOVPS(Y?)mr",
1198 "VPMASKMOVD(Y?)mr",
1199 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001200
1201def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1202 let Latency = 5;
1203 let NumMicroOps = 5;
1204 let ResourceCycles = [1,4];
1205}
1206def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1207
1208def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1209 let Latency = 5;
1210 let NumMicroOps = 5;
1211 let ResourceCycles = [1,4];
1212}
1213def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1214
1215def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1216 let Latency = 5;
1217 let NumMicroOps = 5;
1218 let ResourceCycles = [2,3];
1219}
Craig Topper5a69a002018-03-21 06:28:42 +00001220def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001221
1222def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1223 let Latency = 5;
1224 let NumMicroOps = 6;
1225 let ResourceCycles = [1,1,4];
1226}
Craig Topper5a69a002018-03-21 06:28:42 +00001227def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001228
1229def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1230 let Latency = 6;
1231 let NumMicroOps = 1;
1232 let ResourceCycles = [1];
1233}
Craig Topper5a69a002018-03-21 06:28:42 +00001234def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1235 "LD_F64m",
1236 "LD_F80m",
1237 "VBROADCASTF128",
1238 "VBROADCASTI128",
1239 "VBROADCASTSDYrm",
1240 "VBROADCASTSSYrm",
1241 "VLDDQUYrm",
1242 "VMOVAPDYrm",
1243 "VMOVAPSYrm",
1244 "VMOVDDUPYrm",
1245 "VMOVDQAYrm",
1246 "VMOVDQUYrm",
1247 "VMOVNTDQAYrm",
1248 "VMOVSHDUPYrm",
1249 "VMOVSLDUPYrm",
1250 "VMOVUPDYrm",
1251 "VMOVUPSYrm",
1252 "VPBROADCASTDYrm",
1253 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001254 "(V?)ROUNDPD(Y?)r",
1255 "(V?)ROUNDPS(Y?)r",
1256 "(V?)ROUNDSDr",
1257 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001258
1259def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1260 let Latency = 6;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001264def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001265 "MMX_PSLLQrm",
1266 "MMX_PSLLWrm",
1267 "MMX_PSRADrm",
1268 "MMX_PSRAWrm",
1269 "MMX_PSRLDrm",
1270 "MMX_PSRLQrm",
1271 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001272 "VCVTPH2PS(Y?)rm",
1273 "(V?)CVTPS2PDrm",
1274 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001275 "VPSLLVQrm",
1276 "VPSRLVQrm",
1277 "VTESTPDrm",
1278 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001279
1280def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1281 let Latency = 6;
1282 let NumMicroOps = 2;
1283 let ResourceCycles = [1,1];
1284}
Craig Topper5a69a002018-03-21 06:28:42 +00001285def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1286 "VCVTPD2DQYrr",
1287 "VCVTPD2PSYrr",
1288 "VCVTPS2PHYrr",
1289 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001290
1291def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1292 let Latency = 6;
1293 let NumMicroOps = 2;
1294 let ResourceCycles = [1,1];
1295}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001296def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001297 "MMX_PINSRWrm",
1298 "MMX_PSHUFBrm",
1299 "MMX_PSHUFWmi",
1300 "MMX_PUNPCKHBWirm",
1301 "MMX_PUNPCKHDQirm",
1302 "MMX_PUNPCKHWDirm",
1303 "MMX_PUNPCKLBWirm",
1304 "MMX_PUNPCKLDQirm",
1305 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001306 "(V?)ANDNPDrm",
1307 "(V?)ANDNPSrm",
1308 "(V?)ANDPDrm",
1309 "(V?)ANDPSrm",
1310 "(V?)INSERTPSrm",
1311 "(V?)MOVHPDrm",
1312 "(V?)MOVHPSrm",
1313 "(V?)MOVLPDrm",
1314 "(V?)MOVLPSrm",
1315 "(V?)ORPDrm",
1316 "(V?)ORPSrm",
1317 "(V?)PACKSSDWrm",
1318 "(V?)PACKSSWBrm",
1319 "(V?)PACKUSDWrm",
1320 "(V?)PACKUSWBrm",
1321 "(V?)PALIGNRrmi",
1322 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001323 "VPERMILPDmi",
1324 "VPERMILPDrm",
1325 "VPERMILPSmi",
1326 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001327 "(V?)PINSRBrm",
1328 "(V?)PINSRDrm",
1329 "(V?)PINSRQrm",
1330 "(V?)PINSRWrm",
1331 "(V?)PMOVSXBDrm",
1332 "(V?)PMOVSXBQrm",
1333 "(V?)PMOVSXBWrm",
1334 "(V?)PMOVSXDQrm",
1335 "(V?)PMOVSXWDrm",
1336 "(V?)PMOVSXWQrm",
1337 "(V?)PMOVZXBDrm",
1338 "(V?)PMOVZXBQrm",
1339 "(V?)PMOVZXBWrm",
1340 "(V?)PMOVZXDQrm",
1341 "(V?)PMOVZXWDrm",
1342 "(V?)PMOVZXWQrm",
1343 "(V?)PSHUFBrm",
1344 "(V?)PSHUFDmi",
1345 "(V?)PSHUFHWmi",
1346 "(V?)PSHUFLWmi",
1347 "(V?)PUNPCKHBWrm",
1348 "(V?)PUNPCKHDQrm",
1349 "(V?)PUNPCKHQDQrm",
1350 "(V?)PUNPCKHWDrm",
1351 "(V?)PUNPCKLBWrm",
1352 "(V?)PUNPCKLDQrm",
1353 "(V?)PUNPCKLQDQrm",
1354 "(V?)PUNPCKLWDrm",
1355 "(V?)SHUFPDrmi",
1356 "(V?)SHUFPSrmi",
1357 "(V?)UNPCKHPDrm",
1358 "(V?)UNPCKHPSrm",
1359 "(V?)UNPCKLPDrm",
1360 "(V?)UNPCKLPSrm",
1361 "(V?)XORPDrm",
1362 "(V?)XORPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001363
1364def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1365 let Latency = 6;
1366 let NumMicroOps = 2;
1367 let ResourceCycles = [1,1];
1368}
Craig Topper5a69a002018-03-21 06:28:42 +00001369def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1370 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001371
1372def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1373 let Latency = 6;
1374 let NumMicroOps = 2;
1375 let ResourceCycles = [1,1];
1376}
Craig Topperc50570f2018-04-06 17:12:18 +00001377def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8",
Craig Topper5a69a002018-03-21 06:28:42 +00001378 "RORX(32|64)mi",
1379 "SARX(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001380 "SHLX(32|64)rm",
1381 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001382def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1383 ADCX32rm, ADCX64rm,
1384 ADOX32rm, ADOX64rm,
1385 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001386
1387def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1388 let Latency = 6;
1389 let NumMicroOps = 2;
1390 let ResourceCycles = [1,1];
1391}
Craig Topper5a69a002018-03-21 06:28:42 +00001392def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1393 "BLSI(32|64)rm",
1394 "BLSMSK(32|64)rm",
1395 "BLSR(32|64)rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001396 "MMX_PABSBrm",
1397 "MMX_PABSDrm",
1398 "MMX_PABSWrm",
1399 "MMX_PADDBirm",
1400 "MMX_PADDDirm",
1401 "MMX_PADDQirm",
1402 "MMX_PADDSBirm",
1403 "MMX_PADDSWirm",
1404 "MMX_PADDUSBirm",
1405 "MMX_PADDUSWirm",
1406 "MMX_PADDWirm",
1407 "MMX_PAVGBirm",
1408 "MMX_PAVGWirm",
1409 "MMX_PCMPEQBirm",
1410 "MMX_PCMPEQDirm",
1411 "MMX_PCMPEQWirm",
1412 "MMX_PCMPGTBirm",
1413 "MMX_PCMPGTDirm",
1414 "MMX_PCMPGTWirm",
1415 "MMX_PMAXSWirm",
1416 "MMX_PMAXUBirm",
1417 "MMX_PMINSWirm",
1418 "MMX_PMINUBirm",
1419 "MMX_PSIGNBrm",
1420 "MMX_PSIGNDrm",
1421 "MMX_PSIGNWrm",
1422 "MMX_PSUBBirm",
1423 "MMX_PSUBDirm",
1424 "MMX_PSUBQirm",
1425 "MMX_PSUBSBirm",
1426 "MMX_PSUBSWirm",
1427 "MMX_PSUBUSBirm",
1428 "MMX_PSUBUSWirm",
1429 "MMX_PSUBWirm",
1430 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001431 "(V?)PABSBrm",
1432 "(V?)PABSDrm",
1433 "(V?)PABSWrm",
1434 "(V?)PADDBrm",
1435 "(V?)PADDDrm",
1436 "(V?)PADDQrm",
1437 "(V?)PADDSBrm",
1438 "(V?)PADDSWrm",
1439 "(V?)PADDUSBrm",
1440 "(V?)PADDUSWrm",
1441 "(V?)PADDWrm",
1442 "(V?)PAVGBrm",
1443 "(V?)PAVGWrm",
1444 "(V?)PCMPEQBrm",
1445 "(V?)PCMPEQDrm",
1446 "(V?)PCMPEQQrm",
1447 "(V?)PCMPEQWrm",
1448 "(V?)PCMPGTBrm",
1449 "(V?)PCMPGTDrm",
1450 "(V?)PCMPGTWrm",
1451 "(V?)PMAXSBrm",
1452 "(V?)PMAXSDrm",
1453 "(V?)PMAXSWrm",
1454 "(V?)PMAXUBrm",
1455 "(V?)PMAXUDrm",
1456 "(V?)PMAXUWrm",
1457 "(V?)PMINSBrm",
1458 "(V?)PMINSDrm",
1459 "(V?)PMINSWrm",
1460 "(V?)PMINUBrm",
1461 "(V?)PMINUDrm",
1462 "(V?)PMINUWrm",
1463 "(V?)PSIGNBrm",
1464 "(V?)PSIGNDrm",
1465 "(V?)PSIGNWrm",
1466 "(V?)PSUBBrm",
1467 "(V?)PSUBDrm",
1468 "(V?)PSUBQrm",
1469 "(V?)PSUBSBrm",
1470 "(V?)PSUBSWrm",
1471 "(V?)PSUBUSBrm",
1472 "(V?)PSUBUSWrm",
1473 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001474
1475def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1476 let Latency = 6;
1477 let NumMicroOps = 2;
1478 let ResourceCycles = [1,1];
1479}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001480def: InstRW<[BWWriteResGroup65], (instregex "MMX_PANDNirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001481 "MMX_PANDirm",
1482 "MMX_PORirm",
1483 "MMX_PXORirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001484 "(V?)BLENDPDrmi",
1485 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001486 "VINSERTF128rm",
1487 "VINSERTI128rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001488 "(V?)PANDNrm",
1489 "(V?)PANDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001490 "VPBLENDDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001491 "(V?)PORrm",
1492 "(V?)PXORrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001493
1494def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1495 let Latency = 6;
1496 let NumMicroOps = 2;
1497 let ResourceCycles = [1,1];
1498}
Craig Topper2d451e72018-03-18 08:38:06 +00001499def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001500def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001501
1502def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1503 let Latency = 6;
1504 let NumMicroOps = 4;
1505 let ResourceCycles = [1,1,2];
1506}
Craig Topper5a69a002018-03-21 06:28:42 +00001507def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1508 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001509
1510def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1511 let Latency = 6;
1512 let NumMicroOps = 4;
1513 let ResourceCycles = [1,1,1,1];
1514}
1515def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1516
1517def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1518 let Latency = 6;
1519 let NumMicroOps = 4;
1520 let ResourceCycles = [1,1,1,1];
1521}
Craig Topper5a69a002018-03-21 06:28:42 +00001522def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1523 "BTR(16|32|64)mi8",
1524 "BTS(16|32|64)mi8",
1525 "SAR(8|16|32|64)m1",
1526 "SAR(8|16|32|64)mi",
1527 "SHL(8|16|32|64)m1",
1528 "SHL(8|16|32|64)mi",
1529 "SHR(8|16|32|64)m1",
1530 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001531
1532def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1533 let Latency = 6;
1534 let NumMicroOps = 4;
1535 let ResourceCycles = [1,1,1,1];
1536}
Craig Topperf0d04262018-04-06 16:16:48 +00001537def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1538 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001539
1540def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1541 let Latency = 6;
1542 let NumMicroOps = 6;
1543 let ResourceCycles = [1,5];
1544}
1545def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1546
Gadi Haber323f2e12017-10-24 20:19:47 +00001547def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1548 let Latency = 7;
1549 let NumMicroOps = 2;
1550 let ResourceCycles = [1,1];
1551}
Craig Topper5a69a002018-03-21 06:28:42 +00001552def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1553 "VPSLLQYrm",
1554 "VPSLLVQYrm",
1555 "VPSLLWYrm",
1556 "VPSRADYrm",
1557 "VPSRAWYrm",
1558 "VPSRLDYrm",
1559 "VPSRLQYrm",
1560 "VPSRLVQYrm",
1561 "VPSRLWYrm",
1562 "VTESTPDYrm",
1563 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001564
1565def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1566 let Latency = 7;
1567 let NumMicroOps = 2;
1568 let ResourceCycles = [1,1];
1569}
Craig Topper5a69a002018-03-21 06:28:42 +00001570def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1571 "FCOM64m",
1572 "FCOMP32m",
1573 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001574
1575def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1576 let Latency = 7;
1577 let NumMicroOps = 2;
1578 let ResourceCycles = [1,1];
1579}
Craig Topper5a69a002018-03-21 06:28:42 +00001580def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1581 "VANDNPSYrm",
1582 "VANDPDYrm",
1583 "VANDPSYrm",
1584 "VORPDYrm",
1585 "VORPSYrm",
1586 "VPACKSSDWYrm",
1587 "VPACKSSWBYrm",
1588 "VPACKUSDWYrm",
1589 "VPACKUSWBYrm",
1590 "VPALIGNRYrmi",
1591 "VPBLENDWYrmi",
1592 "VPERMILPDYmi",
1593 "VPERMILPDYrm",
1594 "VPERMILPSYmi",
1595 "VPERMILPSYrm",
1596 "VPSHUFBYrm",
1597 "VPSHUFDYmi",
1598 "VPSHUFHWYmi",
1599 "VPSHUFLWYmi",
1600 "VPUNPCKHBWYrm",
1601 "VPUNPCKHDQYrm",
1602 "VPUNPCKHQDQYrm",
1603 "VPUNPCKHWDYrm",
1604 "VPUNPCKLBWYrm",
1605 "VPUNPCKLDQYrm",
1606 "VPUNPCKLQDQYrm",
1607 "VPUNPCKLWDYrm",
1608 "VSHUFPDYrmi",
1609 "VSHUFPSYrmi",
1610 "VUNPCKHPDYrm",
1611 "VUNPCKHPSYrm",
1612 "VUNPCKLPDYrm",
1613 "VUNPCKLPSYrm",
1614 "VXORPDYrm",
1615 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001616
1617def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1618 let Latency = 7;
1619 let NumMicroOps = 2;
1620 let ResourceCycles = [1,1];
1621}
Craig Topper5a69a002018-03-21 06:28:42 +00001622def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1623 "VPABSDYrm",
1624 "VPABSWYrm",
1625 "VPADDBYrm",
1626 "VPADDDYrm",
1627 "VPADDQYrm",
1628 "VPADDSBYrm",
1629 "VPADDSWYrm",
1630 "VPADDUSBYrm",
1631 "VPADDUSWYrm",
1632 "VPADDWYrm",
1633 "VPAVGBYrm",
1634 "VPAVGWYrm",
1635 "VPCMPEQBYrm",
1636 "VPCMPEQDYrm",
1637 "VPCMPEQQYrm",
1638 "VPCMPEQWYrm",
1639 "VPCMPGTBYrm",
1640 "VPCMPGTDYrm",
1641 "VPCMPGTWYrm",
1642 "VPMAXSBYrm",
1643 "VPMAXSDYrm",
1644 "VPMAXSWYrm",
1645 "VPMAXUBYrm",
1646 "VPMAXUDYrm",
1647 "VPMAXUWYrm",
1648 "VPMINSBYrm",
1649 "VPMINSDYrm",
1650 "VPMINSWYrm",
1651 "VPMINUBYrm",
1652 "VPMINUDYrm",
1653 "VPMINUWYrm",
1654 "VPSIGNBYrm",
1655 "VPSIGNDYrm",
1656 "VPSIGNWYrm",
1657 "VPSUBBYrm",
1658 "VPSUBDYrm",
1659 "VPSUBQYrm",
1660 "VPSUBSBYrm",
1661 "VPSUBSWYrm",
1662 "VPSUBUSBYrm",
1663 "VPSUBUSWYrm",
1664 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001665
1666def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1667 let Latency = 7;
1668 let NumMicroOps = 2;
1669 let ResourceCycles = [1,1];
1670}
Craig Topper5a69a002018-03-21 06:28:42 +00001671def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1672 "VBLENDPSYrmi",
1673 "VPANDNYrm",
1674 "VPANDYrm",
1675 "VPBLENDDYrmi",
1676 "VPORYrm",
1677 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001678
1679def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1680 let Latency = 7;
1681 let NumMicroOps = 3;
1682 let ResourceCycles = [1,2];
1683}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001684def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001685
1686def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1687 let Latency = 7;
1688 let NumMicroOps = 3;
1689 let ResourceCycles = [2,1];
1690}
Craig Topper5a69a002018-03-21 06:28:42 +00001691def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1692 "BLENDVPSrm0",
1693 "MMX_PACKSSDWirm",
1694 "MMX_PACKSSWBirm",
1695 "MMX_PACKUSWBirm",
1696 "PBLENDVBrm0",
1697 "VBLENDVPDrm",
1698 "VBLENDVPSrm",
1699 "VMASKMOVPDrm",
1700 "VMASKMOVPSrm",
1701 "VPBLENDVBrm",
1702 "VPMASKMOVDrm",
1703 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001704
1705def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1706 let Latency = 7;
1707 let NumMicroOps = 3;
1708 let ResourceCycles = [1,2];
1709}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001710def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1711 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001712
1713def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1714 let Latency = 7;
1715 let NumMicroOps = 3;
1716 let ResourceCycles = [1,1,1];
1717}
Craig Topper5a69a002018-03-21 06:28:42 +00001718def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1719 "PSLLQrm",
1720 "PSLLWrm",
1721 "PSRADrm",
1722 "PSRAWrm",
1723 "PSRLDrm",
1724 "PSRLQrm",
1725 "PSRLWrm",
1726 "PTESTrm",
1727 "VPSLLDrm",
1728 "VPSLLQrm",
1729 "VPSLLWrm",
1730 "VPSRADrm",
1731 "VPSRAWrm",
1732 "VPSRLDrm",
1733 "VPSRLQrm",
1734 "VPSRLWrm",
1735 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001736
1737def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1738 let Latency = 7;
1739 let NumMicroOps = 3;
1740 let ResourceCycles = [1,1,1];
1741}
1742def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1743
1744def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1745 let Latency = 7;
1746 let NumMicroOps = 3;
1747 let ResourceCycles = [1,1,1];
1748}
Craig Topper5a69a002018-03-21 06:28:42 +00001749def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001750
1751def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1752 let Latency = 7;
1753 let NumMicroOps = 3;
1754 let ResourceCycles = [1,1,1];
1755}
Craig Topper5a69a002018-03-21 06:28:42 +00001756def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1757 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001758
Gadi Haber323f2e12017-10-24 20:19:47 +00001759def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1760 let Latency = 7;
1761 let NumMicroOps = 3;
1762 let ResourceCycles = [1,1,1];
1763}
Craig Topperf4cd9082018-01-19 05:47:32 +00001764def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001765
1766def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1767 let Latency = 7;
1768 let NumMicroOps = 5;
1769 let ResourceCycles = [1,1,1,2];
1770}
Craig Topper5a69a002018-03-21 06:28:42 +00001771def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1772 "ROL(8|16|32|64)mi",
1773 "ROR(8|16|32|64)m1",
1774 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001775
1776def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1777 let Latency = 7;
1778 let NumMicroOps = 5;
1779 let ResourceCycles = [1,1,1,2];
1780}
Craig Topper5a69a002018-03-21 06:28:42 +00001781def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001782
1783def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1784 let Latency = 7;
1785 let NumMicroOps = 5;
1786 let ResourceCycles = [1,1,1,1,1];
1787}
Craig Topper5a69a002018-03-21 06:28:42 +00001788def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1789 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001790
1791def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1792 let Latency = 7;
1793 let NumMicroOps = 7;
1794 let ResourceCycles = [2,2,1,2];
1795}
Craig Topper2d451e72018-03-18 08:38:06 +00001796def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001797
1798def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1799 let Latency = 8;
1800 let NumMicroOps = 2;
1801 let ResourceCycles = [1,1];
1802}
Craig Topperb369cdb2018-01-25 06:57:42 +00001803def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
Craig Topper5a69a002018-03-21 06:28:42 +00001804def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001805def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001806 "MMX_CVTPS2PIirm",
1807 "MMX_CVTTPS2PIirm",
1808 "PDEP(32|64)rm",
1809 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001810 "(V?)ADDPDrm",
1811 "(V?)ADDPSrm",
1812 "(V?)ADDSDrm",
1813 "(V?)ADDSSrm",
1814 "(V?)ADDSUBPDrm",
1815 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001816 "(V?)CVTDQ2PSrm",
1817 "(V?)CVTPS2DQrm",
1818 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001819 "(V?)SUBPDrm",
1820 "(V?)SUBPSrm",
1821 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001822 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001823
1824def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1825 let Latency = 8;
1826 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001827 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001828}
Craig Topperb369cdb2018-01-25 06:57:42 +00001829def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001830
1831def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
1832 let Latency = 8;
1833 let NumMicroOps = 5;
1834}
Craig Topper5a69a002018-03-21 06:28:42 +00001835def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001836
Gadi Haber323f2e12017-10-24 20:19:47 +00001837def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1838 let Latency = 8;
1839 let NumMicroOps = 2;
1840 let ResourceCycles = [1,1];
1841}
Craig Topper5a69a002018-03-21 06:28:42 +00001842def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1843 "VPMOVSXBQYrm",
1844 "VPMOVSXBWYrm",
1845 "VPMOVSXDQYrm",
1846 "VPMOVSXWDYrm",
1847 "VPMOVSXWQYrm",
1848 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001849
1850def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1851 let Latency = 8;
1852 let NumMicroOps = 2;
1853 let ResourceCycles = [1,1];
1854}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001855def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1856 "(V?)MULPSrm",
1857 "(V?)MULSDrm",
1858 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001859
1860def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1861 let Latency = 8;
1862 let NumMicroOps = 3;
1863 let ResourceCycles = [2,1];
1864}
Craig Topper5a69a002018-03-21 06:28:42 +00001865def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1866 "VBLENDVPSYrm",
1867 "VMASKMOVPDYrm",
1868 "VMASKMOVPSYrm",
1869 "VPBLENDVBYrm",
1870 "VPMASKMOVDYrm",
1871 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001872
1873def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1874 let Latency = 8;
1875 let NumMicroOps = 4;
1876 let ResourceCycles = [2,1,1];
1877}
Craig Topper5a69a002018-03-21 06:28:42 +00001878def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1879 "VPSRAVDrm",
1880 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001881
1882def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1883 let Latency = 8;
1884 let NumMicroOps = 4;
1885 let ResourceCycles = [2,1,1];
1886}
Craig Topper5a69a002018-03-21 06:28:42 +00001887def: InstRW<[BWWriteResGroup96], (instregex "MMX_PHADDDrm",
1888 "MMX_PHADDSWrm",
1889 "MMX_PHADDWrm",
1890 "MMX_PHSUBDrm",
1891 "MMX_PHSUBSWrm",
1892 "MMX_PHSUBWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001893 "(V?)PHADDDrm",
1894 "(V?)PHADDSWrm",
1895 "(V?)PHADDWrm",
1896 "(V?)PHSUBDrm",
1897 "(V?)PHSUBSWrm",
1898 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001899
1900def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1901 let Latency = 8;
1902 let NumMicroOps = 5;
1903 let ResourceCycles = [1,1,1,2];
1904}
Craig Topper5a69a002018-03-21 06:28:42 +00001905def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1906 "RCL(8|16|32|64)mi",
1907 "RCR(8|16|32|64)m1",
1908 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001909
1910def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1911 let Latency = 8;
1912 let NumMicroOps = 5;
1913 let ResourceCycles = [1,1,2,1];
1914}
Craig Topper13a16502018-03-19 00:56:09 +00001915def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001916
1917def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1918 let Latency = 8;
1919 let NumMicroOps = 6;
1920 let ResourceCycles = [1,1,1,3];
1921}
Craig Topper9f834812018-04-01 21:54:24 +00001922def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001923
1924def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1925 let Latency = 8;
1926 let NumMicroOps = 6;
1927 let ResourceCycles = [1,1,1,2,1];
1928}
Craig Topper9f834812018-04-01 21:54:24 +00001929def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001930 "CMPXCHG(8|16|32|64)rm",
1931 "ROL(8|16|32|64)mCL",
1932 "SAR(8|16|32|64)mCL",
1933 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001934 "SHL(8|16|32|64)mCL",
1935 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001936def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1937 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001938
1939def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1940 let Latency = 9;
1941 let NumMicroOps = 2;
1942 let ResourceCycles = [1,1];
1943}
Craig Topper5a69a002018-03-21 06:28:42 +00001944def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1945 "ADD_F64m",
1946 "ILD_F16m",
1947 "ILD_F32m",
1948 "ILD_F64m",
1949 "SUBR_F32m",
1950 "SUBR_F64m",
1951 "SUB_F32m",
1952 "SUB_F64m",
1953 "VADDPDYrm",
1954 "VADDPSYrm",
1955 "VADDSUBPDYrm",
1956 "VADDSUBPSYrm",
1957 "VCMPPDYrmi",
1958 "VCMPPSYrmi",
1959 "VCVTDQ2PSYrm",
1960 "VCVTPS2DQYrm",
1961 "VCVTTPS2DQYrm",
1962 "VMAX(C?)PDYrm",
1963 "VMAX(C?)PSYrm",
1964 "VMIN(C?)PDYrm",
1965 "VMIN(C?)PSYrm",
1966 "VSUBPDYrm",
1967 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001968
1969def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1970 let Latency = 9;
1971 let NumMicroOps = 2;
1972 let ResourceCycles = [1,1];
1973}
Craig Topper5a69a002018-03-21 06:28:42 +00001974def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1975 "VPERM2I128rm",
1976 "VPERMDYrm",
1977 "VPERMPDYmi",
1978 "VPERMPSYrm",
1979 "VPERMQYmi",
1980 "VPMOVZXBDYrm",
1981 "VPMOVZXBQYrm",
1982 "VPMOVZXBWYrm",
1983 "VPMOVZXDQYrm",
1984 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001985
1986def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1987 let Latency = 9;
1988 let NumMicroOps = 2;
1989 let ResourceCycles = [1,1];
1990}
Craig Topper5a69a002018-03-21 06:28:42 +00001991def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1992 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001993
1994def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1995 let Latency = 9;
1996 let NumMicroOps = 3;
1997 let ResourceCycles = [1,1,1];
1998}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001999def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002000
2001def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2002 let Latency = 9;
2003 let NumMicroOps = 3;
2004 let ResourceCycles = [1,1,1];
2005}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002006def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
2007 "(V?)CVTSD2SIrm",
2008 "(V?)CVTSS2SI64rm",
2009 "(V?)CVTSS2SIrm",
2010 "(V?)CVTTSD2SI64rm",
2011 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002012 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002013 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002014
2015def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2016 let Latency = 9;
2017 let NumMicroOps = 3;
2018 let ResourceCycles = [1,1,1];
2019}
2020def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
2021
2022def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2023 let Latency = 9;
2024 let NumMicroOps = 3;
2025 let ResourceCycles = [1,1,1];
2026}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002027def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002028def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002029 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00002030 "CVTTPD2DQrm",
2031 "MMX_CVTPD2PIirm",
2032 "MMX_CVTPI2PDirm",
2033 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002034 "(V?)CVTDQ2PDrm",
2035 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002036
2037def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
2038 let Latency = 9;
2039 let NumMicroOps = 3;
2040 let ResourceCycles = [1,1,1];
2041}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002042def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
2043 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002044
2045def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2046 let Latency = 9;
2047 let NumMicroOps = 4;
2048 let ResourceCycles = [2,1,1];
2049}
Craig Topper5a69a002018-03-21 06:28:42 +00002050def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
2051 "VPSRAVDYrm",
2052 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002053
2054def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
2055 let Latency = 9;
2056 let NumMicroOps = 4;
2057 let ResourceCycles = [2,1,1];
2058}
Craig Topper5a69a002018-03-21 06:28:42 +00002059def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
2060 "VPHADDSWYrm",
2061 "VPHADDWYrm",
2062 "VPHSUBDYrm",
2063 "VPHSUBSWYrm",
2064 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002065
2066def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
2067 let Latency = 9;
2068 let NumMicroOps = 4;
2069 let ResourceCycles = [1,1,1,1];
2070}
Craig Topper5a69a002018-03-21 06:28:42 +00002071def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
2072 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002073
2074def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
2075 let Latency = 9;
2076 let NumMicroOps = 5;
2077 let ResourceCycles = [1,1,3];
2078}
2079def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
2080
2081def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2082 let Latency = 9;
2083 let NumMicroOps = 5;
2084 let ResourceCycles = [1,2,1,1];
2085}
Craig Topper5a69a002018-03-21 06:28:42 +00002086def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
2087 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002088
Gadi Haber323f2e12017-10-24 20:19:47 +00002089def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
2090 let Latency = 10;
2091 let NumMicroOps = 2;
2092 let ResourceCycles = [1,1];
2093}
Craig Topper5a69a002018-03-21 06:28:42 +00002094def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
2095 "MMX_PMADDWDirm",
2096 "MMX_PMULHRSWrm",
2097 "MMX_PMULHUWirm",
2098 "MMX_PMULHWirm",
2099 "MMX_PMULLWirm",
2100 "MMX_PMULUDQirm",
2101 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002102 "(V?)PCMPGTQrm",
2103 "(V?)PHMINPOSUWrm",
2104 "(V?)PMADDUBSWrm",
2105 "(V?)PMADDWDrm",
2106 "(V?)PMULDQrm",
2107 "(V?)PMULHRSWrm",
2108 "(V?)PMULHUWrm",
2109 "(V?)PMULHWrm",
2110 "(V?)PMULLWrm",
2111 "(V?)PMULUDQrm",
2112 "(V?)PSADBWrm",
2113 "(V?)RCPPSm",
2114 "(V?)RCPSSm",
2115 "(V?)RSQRTPSm",
2116 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002117
2118def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
2119 let Latency = 10;
2120 let NumMicroOps = 2;
2121 let ResourceCycles = [1,1];
2122}
Craig Topperf82867c2017-12-13 23:11:30 +00002123def: InstRW<[BWWriteResGroup116],
2124 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
2125 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002126
2127def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2128 let Latency = 10;
2129 let NumMicroOps = 3;
2130 let ResourceCycles = [2,1];
2131}
Craig Topper5a69a002018-03-21 06:28:42 +00002132def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2133 "FICOM32m",
2134 "FICOMP16m",
2135 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002136
2137def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2138 let Latency = 10;
2139 let NumMicroOps = 3;
2140 let ResourceCycles = [1,1,1];
2141}
2142def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2143
2144def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2145 let Latency = 10;
2146 let NumMicroOps = 4;
2147 let ResourceCycles = [1,2,1];
2148}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002149def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2150 "(V?)HADDPSrm",
2151 "(V?)HSUBPDrm",
2152 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002153
2154def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2155 let Latency = 10;
2156 let NumMicroOps = 4;
2157 let ResourceCycles = [1,1,1,1];
2158}
2159def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2160
2161def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002162 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002163 let NumMicroOps = 4;
2164 let ResourceCycles = [1,1,1,1];
2165}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002166def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002167
Craig Topper8104f262018-04-02 05:33:28 +00002168def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002169 let Latency = 11;
2170 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002171 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002172}
Craig Topper8104f262018-04-02 05:33:28 +00002173def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2174
2175def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2176 let Latency = 11;
2177 let NumMicroOps = 1;
2178 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2179}
2180def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002181
2182def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2183 let Latency = 11;
2184 let NumMicroOps = 2;
2185 let ResourceCycles = [1,1];
2186}
Craig Topper5a69a002018-03-21 06:28:42 +00002187def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2188 "MUL_F64m",
2189 "VPCMPGTQYrm",
2190 "VPMADDUBSWYrm",
2191 "VPMADDWDYrm",
2192 "VPMULDQYrm",
2193 "VPMULHRSWYrm",
2194 "VPMULHUWYrm",
2195 "VPMULHWYrm",
2196 "VPMULLWYrm",
2197 "VPMULUDQYrm",
2198 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002199
2200def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2201 let Latency = 11;
2202 let NumMicroOps = 2;
2203 let ResourceCycles = [1,1];
2204}
Craig Topperf82867c2017-12-13 23:11:30 +00002205def: InstRW<[BWWriteResGroup124],
2206 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002207
Gadi Haber323f2e12017-10-24 20:19:47 +00002208def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2209 let Latency = 11;
2210 let NumMicroOps = 3;
2211 let ResourceCycles = [2,1];
2212}
Craig Topper5a69a002018-03-21 06:28:42 +00002213def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2214 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002215
2216def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2217 let Latency = 11;
2218 let NumMicroOps = 3;
2219 let ResourceCycles = [2,1];
2220}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002221def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2222 "(V?)ROUNDPSm",
2223 "(V?)ROUNDSDm",
2224 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002225
2226def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2227 let Latency = 11;
2228 let NumMicroOps = 3;
2229 let ResourceCycles = [1,1,1];
2230}
2231def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2232
2233def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2234 let Latency = 11;
2235 let NumMicroOps = 4;
2236 let ResourceCycles = [1,2,1];
2237}
Craig Topper5a69a002018-03-21 06:28:42 +00002238def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2239 "VHADDPSYrm",
2240 "VHSUBPDYrm",
2241 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002242
2243def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2244 let Latency = 11;
2245 let NumMicroOps = 6;
2246 let ResourceCycles = [1,1,1,1,2];
2247}
Craig Topper5a69a002018-03-21 06:28:42 +00002248def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2249 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002250
2251def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2252 let Latency = 11;
2253 let NumMicroOps = 7;
2254 let ResourceCycles = [2,2,3];
2255}
Craig Topper5a69a002018-03-21 06:28:42 +00002256def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2257 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002258
2259def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2260 let Latency = 11;
2261 let NumMicroOps = 9;
2262 let ResourceCycles = [1,4,1,3];
2263}
2264def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2265
2266def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2267 let Latency = 11;
2268 let NumMicroOps = 11;
2269 let ResourceCycles = [2,9];
2270}
Craig Topper2d451e72018-03-18 08:38:06 +00002271def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2272def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002273
Gadi Haber323f2e12017-10-24 20:19:47 +00002274def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2275 let Latency = 12;
2276 let NumMicroOps = 3;
2277 let ResourceCycles = [2,1];
2278}
Craig Topper5a69a002018-03-21 06:28:42 +00002279def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2280 "ADD_FI32m",
2281 "SUBR_FI16m",
2282 "SUBR_FI32m",
2283 "SUB_FI16m",
2284 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002285 "VROUNDPDYm",
2286 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002287
2288def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2289 let Latency = 12;
2290 let NumMicroOps = 4;
2291 let ResourceCycles = [1,2,1];
2292}
Craig Topper5a69a002018-03-21 06:28:42 +00002293def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002294
Craig Topper8104f262018-04-02 05:33:28 +00002295def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002296 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002297 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002298 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002299}
Craig Topper8104f262018-04-02 05:33:28 +00002300def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2301
2302def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2303 let Latency = 11;
2304 let NumMicroOps = 1;
2305 let ResourceCycles = [1,4];
2306}
2307def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002308
2309def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2310 let Latency = 13;
2311 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002312 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002313}
2314def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2315
Craig Topper8104f262018-04-02 05:33:28 +00002316def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002317 let Latency = 14;
2318 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002319 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002320}
Craig Topper8104f262018-04-02 05:33:28 +00002321def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2322
2323def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2324 let Latency = 14;
2325 let NumMicroOps = 1;
2326 let ResourceCycles = [1,4];
2327}
2328def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002329
Gadi Haber323f2e12017-10-24 20:19:47 +00002330def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2331 let Latency = 14;
2332 let NumMicroOps = 3;
2333 let ResourceCycles = [1,1,1];
2334}
Craig Topper5a69a002018-03-21 06:28:42 +00002335def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2336 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002337
2338def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2339 let Latency = 14;
2340 let NumMicroOps = 4;
2341 let ResourceCycles = [2,1,1];
2342}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002343def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002344
2345def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2346 let Latency = 14;
2347 let NumMicroOps = 4;
2348 let ResourceCycles = [1,1,1,1];
2349}
Craig Topper5a69a002018-03-21 06:28:42 +00002350def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002351
2352def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2353 let Latency = 14;
2354 let NumMicroOps = 8;
2355 let ResourceCycles = [2,2,1,3];
2356}
2357def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2358
2359def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2360 let Latency = 14;
2361 let NumMicroOps = 10;
2362 let ResourceCycles = [2,3,1,4];
2363}
2364def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2365
2366def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2367 let Latency = 14;
2368 let NumMicroOps = 12;
2369 let ResourceCycles = [2,1,4,5];
2370}
2371def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2372
2373def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2374 let Latency = 15;
2375 let NumMicroOps = 1;
2376 let ResourceCycles = [1];
2377}
Craig Topper5a69a002018-03-21 06:28:42 +00002378def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2379 "DIVR_FST0r",
2380 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002381
Gadi Haber323f2e12017-10-24 20:19:47 +00002382def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2383 let Latency = 15;
2384 let NumMicroOps = 10;
2385 let ResourceCycles = [1,1,1,4,1,2];
2386}
Craig Topper13a16502018-03-19 00:56:09 +00002387def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002388
Craig Topper8104f262018-04-02 05:33:28 +00002389def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002390 let Latency = 16;
2391 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002392 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002393}
Craig Topper5a69a002018-03-21 06:28:42 +00002394def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2395 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002396
2397def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2398 let Latency = 16;
2399 let NumMicroOps = 3;
2400 let ResourceCycles = [2,1];
2401}
2402def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2403
Gadi Haber323f2e12017-10-24 20:19:47 +00002404def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2405 let Latency = 16;
2406 let NumMicroOps = 14;
2407 let ResourceCycles = [1,1,1,4,2,5];
2408}
2409def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2410
2411def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2412 let Latency = 16;
2413 let NumMicroOps = 16;
2414 let ResourceCycles = [16];
2415}
Craig Topper5a69a002018-03-21 06:28:42 +00002416def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002417
Craig Topper8104f262018-04-02 05:33:28 +00002418def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002419 let Latency = 17;
2420 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002421 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002422}
2423def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2424
2425def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2426 let Latency = 17;
2427 let NumMicroOps = 4;
2428 let ResourceCycles = [2,1,1];
2429}
Craig Topper5a69a002018-03-21 06:28:42 +00002430def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2431 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002432
Craig Topper8104f262018-04-02 05:33:28 +00002433def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002434 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002435 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002436 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002437}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002438def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2439 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002440
Gadi Haber323f2e12017-10-24 20:19:47 +00002441def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2442 let Latency = 18;
2443 let NumMicroOps = 8;
2444 let ResourceCycles = [1,1,1,5];
2445}
Craig Topper5a69a002018-03-21 06:28:42 +00002446def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002447def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002448
2449def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2450 let Latency = 18;
2451 let NumMicroOps = 11;
2452 let ResourceCycles = [2,1,1,3,1,3];
2453}
Craig Topper13a16502018-03-19 00:56:09 +00002454def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002455
Craig Topper8104f262018-04-02 05:33:28 +00002456def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002457 let Latency = 19;
2458 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002459 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002460}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002461def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002462 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002463
Gadi Haber323f2e12017-10-24 20:19:47 +00002464def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2465 let Latency = 19;
2466 let NumMicroOps = 5;
2467 let ResourceCycles = [2,1,1,1];
2468}
Craig Topper5a69a002018-03-21 06:28:42 +00002469def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002470
Gadi Haber323f2e12017-10-24 20:19:47 +00002471def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2472 let Latency = 20;
2473 let NumMicroOps = 1;
2474 let ResourceCycles = [1];
2475}
Craig Topper5a69a002018-03-21 06:28:42 +00002476def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2477 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002478 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002479
2480def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2481 let Latency = 20;
2482 let NumMicroOps = 5;
2483 let ResourceCycles = [2,1,1,1];
2484}
2485def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2486
2487def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2488 let Latency = 20;
2489 let NumMicroOps = 8;
2490 let ResourceCycles = [1,1,1,1,1,1,2];
2491}
Craig Topper5a69a002018-03-21 06:28:42 +00002492def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2493 "INSL",
2494 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002495
Craig Topper8104f262018-04-02 05:33:28 +00002496def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002497 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002498 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002499 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002500}
Craig Topper8104f262018-04-02 05:33:28 +00002501def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2502
2503def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2504 let Latency = 16;
2505 let NumMicroOps = 1;
2506 let ResourceCycles = [1,8];
2507}
2508def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002509
2510def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2511 let Latency = 21;
2512 let NumMicroOps = 2;
2513 let ResourceCycles = [1,1];
2514}
Craig Topper5a69a002018-03-21 06:28:42 +00002515def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2516 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002517
Craig Topper8104f262018-04-02 05:33:28 +00002518def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002519 let Latency = 21;
2520 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002521 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002522}
2523def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2524
2525def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2526 let Latency = 21;
2527 let NumMicroOps = 19;
2528 let ResourceCycles = [2,1,4,1,1,4,6];
2529}
2530def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2531
2532def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2533 let Latency = 22;
2534 let NumMicroOps = 18;
2535 let ResourceCycles = [1,1,16];
2536}
2537def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2538
Craig Topper8104f262018-04-02 05:33:28 +00002539def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002540 let Latency = 23;
2541 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002542 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002543}
2544def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2545
Craig Topper8104f262018-04-02 05:33:28 +00002546def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002547 let Latency = 23;
2548 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002549 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002550}
2551def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2552
Gadi Haber323f2e12017-10-24 20:19:47 +00002553def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2554 let Latency = 23;
2555 let NumMicroOps = 19;
2556 let ResourceCycles = [3,1,15];
2557}
Craig Topper391c6f92017-12-10 01:24:08 +00002558def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002559
2560def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2561 let Latency = 24;
2562 let NumMicroOps = 3;
2563 let ResourceCycles = [1,1,1];
2564}
Craig Topper5a69a002018-03-21 06:28:42 +00002565def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2566 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002567
Craig Topper8104f262018-04-02 05:33:28 +00002568def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002569 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002570 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002571 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002572}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002573def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2574 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002575
2576def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2577 let Latency = 26;
2578 let NumMicroOps = 2;
2579 let ResourceCycles = [1,1];
2580}
Craig Topper5a69a002018-03-21 06:28:42 +00002581def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002582 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002583
Craig Topper8104f262018-04-02 05:33:28 +00002584def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002585 let Latency = 27;
2586 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002587 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002588}
2589def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2590
2591def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2592 let Latency = 29;
2593 let NumMicroOps = 3;
2594 let ResourceCycles = [1,1,1];
2595}
Craig Topper5a69a002018-03-21 06:28:42 +00002596def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2597 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002598
Craig Topper8104f262018-04-02 05:33:28 +00002599def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002600 let Latency = 29;
2601 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002602 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002603}
2604def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2605
2606def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2607 let Latency = 22;
2608 let NumMicroOps = 7;
2609 let ResourceCycles = [1,3,2,1];
2610}
Craig Topper17a31182017-12-16 18:35:29 +00002611def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002612
2613def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2614 let Latency = 23;
2615 let NumMicroOps = 9;
2616 let ResourceCycles = [1,3,4,1];
2617}
Craig Topper17a31182017-12-16 18:35:29 +00002618def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002619
2620def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2621 let Latency = 24;
2622 let NumMicroOps = 9;
2623 let ResourceCycles = [1,5,2,1];
2624}
Craig Topper17a31182017-12-16 18:35:29 +00002625def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002626
2627def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2628 let Latency = 25;
2629 let NumMicroOps = 7;
2630 let ResourceCycles = [1,3,2,1];
2631}
Craig Topper17a31182017-12-16 18:35:29 +00002632def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2633 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002634
2635def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2636 let Latency = 26;
2637 let NumMicroOps = 9;
2638 let ResourceCycles = [1,5,2,1];
2639}
Craig Topper17a31182017-12-16 18:35:29 +00002640def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002641
2642def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2643 let Latency = 26;
2644 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002645 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002646}
Craig Topper17a31182017-12-16 18:35:29 +00002647def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002648
2649def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2650 let Latency = 27;
2651 let NumMicroOps = 9;
2652 let ResourceCycles = [1,5,2,1];
2653}
Craig Topper17a31182017-12-16 18:35:29 +00002654def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002655
Gadi Haber323f2e12017-10-24 20:19:47 +00002656def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2657 let Latency = 29;
2658 let NumMicroOps = 27;
2659 let ResourceCycles = [1,5,1,1,19];
2660}
2661def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2662
2663def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2664 let Latency = 30;
2665 let NumMicroOps = 28;
2666 let ResourceCycles = [1,6,1,1,19];
2667}
Craig Topper2d451e72018-03-18 08:38:06 +00002668def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002669
2670def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2671 let Latency = 31;
2672 let NumMicroOps = 31;
2673 let ResourceCycles = [8,1,21,1];
2674}
2675def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2676
Craig Topper8104f262018-04-02 05:33:28 +00002677def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2678 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002679 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002680 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002681}
2682def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2683
2684def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2685 let Latency = 34;
2686 let NumMicroOps = 8;
2687 let ResourceCycles = [2,2,2,1,1];
2688}
Craig Topper13a16502018-03-19 00:56:09 +00002689def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002690
2691def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2692 let Latency = 34;
2693 let NumMicroOps = 23;
2694 let ResourceCycles = [1,5,3,4,10];
2695}
Craig Topper5a69a002018-03-21 06:28:42 +00002696def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2697 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002698
2699def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2700 let Latency = 35;
2701 let NumMicroOps = 8;
2702 let ResourceCycles = [2,2,2,1,1];
2703}
Craig Topper13a16502018-03-19 00:56:09 +00002704def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002705
2706def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2707 let Latency = 35;
2708 let NumMicroOps = 23;
2709 let ResourceCycles = [1,5,2,1,4,10];
2710}
Craig Topper5a69a002018-03-21 06:28:42 +00002711def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2712 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002713
Craig Topper8104f262018-04-02 05:33:28 +00002714def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2715 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002716 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002717 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002718}
2719def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2720
2721def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2722 let Latency = 42;
2723 let NumMicroOps = 22;
2724 let ResourceCycles = [2,20];
2725}
Craig Topper2d451e72018-03-18 08:38:06 +00002726def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002727
2728def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2729 let Latency = 60;
2730 let NumMicroOps = 64;
2731 let ResourceCycles = [2,2,8,1,10,2,39];
2732}
2733def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002734
2735def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2736 let Latency = 63;
2737 let NumMicroOps = 88;
2738 let ResourceCycles = [4,4,31,1,2,1,45];
2739}
Craig Topper2d451e72018-03-18 08:38:06 +00002740def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002741
2742def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2743 let Latency = 63;
2744 let NumMicroOps = 90;
2745 let ResourceCycles = [4,2,33,1,2,1,47];
2746}
Craig Topper2d451e72018-03-18 08:38:06 +00002747def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002748
2749def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2750 let Latency = 75;
2751 let NumMicroOps = 15;
2752 let ResourceCycles = [6,3,6];
2753}
2754def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2755
2756def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2757 let Latency = 80;
2758 let NumMicroOps = 32;
2759 let ResourceCycles = [7,7,3,3,1,11];
2760}
2761def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2762
2763def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2764 let Latency = 115;
2765 let NumMicroOps = 100;
2766 let ResourceCycles = [9,9,11,8,1,11,21,30];
2767}
2768def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002769
2770} // SchedModel
2771