blob: 352d41875354cb7d5e0424e94a8b13ff81b8208b [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.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000166defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
167defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000172
173// FMA Scheduling helper class.
174// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
175
176// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000177def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
178def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
179def : WriteRes<WriteVecMove, [BWPort015]>;
180
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000181defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000182defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
184defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000185defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000187defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
189defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
190defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000191defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000192
Gadi Haber323f2e12017-10-24 20:19:47 +0000193// 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",
Craig Topper5a69a002018-03-21 06:28:42 +0000382 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000383 "(V?)INSERTPSrr",
384 "(V?)MOV64toPQIrr",
385 "(V?)MOVAPD(Y?)rr",
386 "(V?)MOVAPS(Y?)rr",
387 "(V?)MOVDDUP(Y?)rr",
388 "(V?)MOVDI2PDIrr",
389 "(V?)MOVHLPSrr",
390 "(V?)MOVLHPSrr",
391 "(V?)MOVSDrr",
392 "(V?)MOVSHDUP(Y?)rr",
393 "(V?)MOVSLDUP(Y?)rr",
394 "(V?)MOVSSrr",
395 "(V?)MOVUPD(Y?)rr",
396 "(V?)MOVUPS(Y?)rr",
397 "(V?)ORPD(Y?)rr",
398 "(V?)ORPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000399 "(V?)PALIGNR(Y?)rri",
400 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000401 "VPBROADCASTDrr",
402 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000403 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000404 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000405 "(V?)PMOVSXBDrr",
406 "(V?)PMOVSXBQrr",
407 "(V?)PMOVSXBWrr",
408 "(V?)PMOVSXDQrr",
409 "(V?)PMOVSXWDrr",
410 "(V?)PMOVSXWQrr",
411 "(V?)PMOVZXBDrr",
412 "(V?)PMOVZXBQrr",
413 "(V?)PMOVZXBWrr",
414 "(V?)PMOVZXDQrr",
415 "(V?)PMOVZXWDrr",
416 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000417 "(V?)PSHUFD(Y?)ri",
418 "(V?)PSHUFHW(Y?)ri",
419 "(V?)PSHUFLW(Y?)ri",
420 "(V?)PSLLDQ(Y?)ri",
421 "(V?)PSRLDQ(Y?)ri",
422 "(V?)PUNPCKHBW(Y?)rr",
423 "(V?)PUNPCKHDQ(Y?)rr",
424 "(V?)PUNPCKHQDQ(Y?)rr",
425 "(V?)PUNPCKHWD(Y?)rr",
426 "(V?)PUNPCKLBW(Y?)rr",
427 "(V?)PUNPCKLDQ(Y?)rr",
428 "(V?)PUNPCKLQDQ(Y?)rr",
429 "(V?)PUNPCKLWD(Y?)rr",
430 "(V?)SHUFPD(Y?)rri",
431 "(V?)SHUFPS(Y?)rri",
432 "(V?)UNPCKHPD(Y?)rr",
433 "(V?)UNPCKHPS(Y?)rr",
434 "(V?)UNPCKLPD(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000435 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000436
437def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
438 let Latency = 1;
439 let NumMicroOps = 1;
440 let ResourceCycles = [1];
441}
442def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
443
444def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
445 let Latency = 1;
446 let NumMicroOps = 1;
447 let ResourceCycles = [1];
448}
Craig Topper5a69a002018-03-21 06:28:42 +0000449def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
450 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000451
452def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
453 let Latency = 1;
454 let NumMicroOps = 1;
455 let ResourceCycles = [1];
456}
Craig Topperfbe31322018-04-05 21:56:19 +0000457def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000458def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
459 "ADC(16|32|64)i",
460 "ADC(8|16|32|64)rr",
461 "ADCX(32|64)rr",
462 "ADOX(32|64)rr",
463 "BT(16|32|64)ri8",
464 "BT(16|32|64)rr",
465 "BTC(16|32|64)ri8",
466 "BTC(16|32|64)rr",
467 "BTR(16|32|64)ri8",
468 "BTR(16|32|64)rr",
469 "BTS(16|32|64)ri8",
470 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000471 "SBB(16|32|64)ri",
472 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000473 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000474
475def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
476 let Latency = 1;
477 let NumMicroOps = 1;
478 let ResourceCycles = [1];
479}
Craig Topper5a69a002018-03-21 06:28:42 +0000480def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
481 "BLSI(32|64)rr",
482 "BLSMSK(32|64)rr",
483 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000484 "LEA(16|32|64)(_32)?r",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000485 "MMX_PABS(B|D|W)rr",
486 "MMX_PADD(B|D|Q|W)irr",
487 "MMX_PADDS(B|W)irr",
488 "MMX_PADDUS(B|W)irr",
489 "MMX_PAVG(B|W)irr",
490 "MMX_PCMPEQ(B|D|W)irr",
491 "MMX_PCMPGT(B|D|W)irr",
492 "MMX_P(MAX|MIN)SWirr",
493 "MMX_P(MAX|MIN)UBirr",
494 "MMX_PSIGN(B|D|W)rr",
495 "MMX_PSUB(B|D|Q|W)irr",
496 "MMX_PSUBS(B|W)irr",
497 "MMX_PSUBUS(B|W)irr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000498 "(V?)PABSB(Y?)rr",
499 "(V?)PABSD(Y?)rr",
500 "(V?)PABSW(Y?)rr",
501 "(V?)PADDB(Y?)rr",
502 "(V?)PADDD(Y?)rr",
503 "(V?)PADDQ(Y?)rr",
504 "(V?)PADDSB(Y?)rr",
505 "(V?)PADDSW(Y?)rr",
506 "(V?)PADDUSB(Y?)rr",
507 "(V?)PADDUSW(Y?)rr",
508 "(V?)PADDW(Y?)rr",
509 "(V?)PAVGB(Y?)rr",
510 "(V?)PAVGW(Y?)rr",
511 "(V?)PCMPEQB(Y?)rr",
512 "(V?)PCMPEQD(Y?)rr",
513 "(V?)PCMPEQQ(Y?)rr",
514 "(V?)PCMPEQW(Y?)rr",
515 "(V?)PCMPGTB(Y?)rr",
516 "(V?)PCMPGTD(Y?)rr",
517 "(V?)PCMPGTW(Y?)rr",
518 "(V?)PMAXSB(Y?)rr",
519 "(V?)PMAXSD(Y?)rr",
520 "(V?)PMAXSW(Y?)rr",
521 "(V?)PMAXUB(Y?)rr",
522 "(V?)PMAXUD(Y?)rr",
523 "(V?)PMAXUW(Y?)rr",
524 "(V?)PMINSB(Y?)rr",
525 "(V?)PMINSD(Y?)rr",
526 "(V?)PMINSW(Y?)rr",
527 "(V?)PMINUB(Y?)rr",
528 "(V?)PMINUD(Y?)rr",
529 "(V?)PMINUW(Y?)rr",
530 "(V?)PSIGNB(Y?)rr",
531 "(V?)PSIGND(Y?)rr",
532 "(V?)PSIGNW(Y?)rr",
533 "(V?)PSUBB(Y?)rr",
534 "(V?)PSUBD(Y?)rr",
535 "(V?)PSUBQ(Y?)rr",
536 "(V?)PSUBSB(Y?)rr",
537 "(V?)PSUBSW(Y?)rr",
538 "(V?)PSUBUSB(Y?)rr",
539 "(V?)PSUBUSW(Y?)rr",
540 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000541
542def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
543 let Latency = 1;
544 let NumMicroOps = 1;
545 let ResourceCycles = [1];
546}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000547def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000548 "(V?)BLENDPD(Y?)rri",
549 "(V?)BLENDPS(Y?)rri",
550 "(V?)MOVDQA(Y?)rr",
551 "(V?)MOVDQU(Y?)rr",
552 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000553 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000554 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000555
556def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
557 let Latency = 1;
558 let NumMicroOps = 1;
559 let ResourceCycles = [1];
560}
Craig Topperdfccafe2018-04-18 06:41:25 +0000561def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000562 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000563 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000564 "SGDT64m",
565 "SIDT64m",
566 "SLDT64m",
567 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000568 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000569 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000570
571def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
572 let Latency = 1;
573 let NumMicroOps = 2;
574 let ResourceCycles = [1,1];
575}
Craig Topper5a69a002018-03-21 06:28:42 +0000576def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
577 "MMX_MOVD64from64rm",
578 "MMX_MOVD64mr",
579 "MMX_MOVNTQmr",
580 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000581 "MOVNTI_64mr",
582 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000583 "ST_FP32m",
584 "ST_FP64m",
585 "ST_FP80m",
586 "VEXTRACTF128mr",
587 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000588 "(V?)MOVAPD(Y?)mr",
589 "(V?)MOVAPS(Y?)mr",
590 "(V?)MOVDQA(Y?)mr",
591 "(V?)MOVDQU(Y?)mr",
592 "(V?)MOVHPDmr",
593 "(V?)MOVHPSmr",
594 "(V?)MOVLPDmr",
595 "(V?)MOVLPSmr",
596 "(V?)MOVNTDQ(V?)mr",
597 "(V?)MOVNTPD(V?)mr",
598 "(V?)MOVNTPS(V?)mr",
599 "(V?)MOVPDI2DImr",
600 "(V?)MOVPQI2QImr",
601 "(V?)MOVPQIto64mr",
602 "(V?)MOVSDmr",
603 "(V?)MOVSSmr",
604 "(V?)MOVUPD(Y?)mr",
605 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000606
607def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
608 let Latency = 2;
609 let NumMicroOps = 2;
610 let ResourceCycles = [2];
611}
Craig Topper5a69a002018-03-21 06:28:42 +0000612def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
613 "BLENDVPSrr0",
614 "MMX_PINSRWrr",
615 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000616 "VBLENDVPD(Y?)rr",
617 "VBLENDVPS(Y?)rr",
618 "VPBLENDVB(Y?)rr",
619 "(V?)PINSRBrr",
620 "(V?)PINSRDrr",
621 "(V?)PINSRQrr",
622 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000623
624def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
625 let Latency = 2;
626 let NumMicroOps = 2;
627 let ResourceCycles = [2];
628}
629def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
630
631def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
632 let Latency = 2;
633 let NumMicroOps = 2;
634 let ResourceCycles = [2];
635}
Craig Topper5a69a002018-03-21 06:28:42 +0000636def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
637 "ROL(8|16|32|64)ri",
638 "ROR(8|16|32|64)r1",
639 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000640
641def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
642 let Latency = 2;
643 let NumMicroOps = 2;
644 let ResourceCycles = [2];
645}
Craig Topper5a69a002018-03-21 06:28:42 +0000646def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
647 "MFENCE",
648 "WAIT",
649 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000650
651def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
652 let Latency = 2;
653 let NumMicroOps = 2;
654 let ResourceCycles = [1,1];
655}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000656def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
657 "VCVTPH2PS(Y?)rr",
658 "(V?)CVTPS2PDrr",
659 "(V?)CVTSS2SDrr",
660 "(V?)EXTRACTPSrr",
661 "(V?)PEXTRBrr",
662 "(V?)PEXTRDrr",
663 "(V?)PEXTRQrr",
664 "(V?)PEXTRWrr",
665 "(V?)PSLLDrr",
666 "(V?)PSLLQrr",
667 "(V?)PSLLWrr",
668 "(V?)PSRADrr",
669 "(V?)PSRAWrr",
670 "(V?)PSRLDrr",
671 "(V?)PSRLQrr",
672 "(V?)PSRLWrr",
673 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000674
675def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
676 let Latency = 2;
677 let NumMicroOps = 2;
678 let ResourceCycles = [1,1];
679}
680def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
681
682def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
683 let Latency = 2;
684 let NumMicroOps = 2;
685 let ResourceCycles = [1,1];
686}
687def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
688
689def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
690 let Latency = 2;
691 let NumMicroOps = 2;
692 let ResourceCycles = [1,1];
693}
694def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
695
696def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
697 let Latency = 2;
698 let NumMicroOps = 2;
699 let ResourceCycles = [1,1];
700}
Craig Topper498875f2018-04-04 17:54:19 +0000701def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
702
703def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
704 let Latency = 1;
705 let NumMicroOps = 1;
706 let ResourceCycles = [1];
707}
708def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000709
710def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
711 let Latency = 2;
712 let NumMicroOps = 2;
713 let ResourceCycles = [1,1];
714}
Craig Topper2d451e72018-03-18 08:38:06 +0000715def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000716def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000717def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
718 "ADC8ri",
719 "CMOV(A|BE)(16|32|64)rr",
720 "SBB8i8",
721 "SBB8ri",
722 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000723
724def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
725 let Latency = 2;
726 let NumMicroOps = 3;
727 let ResourceCycles = [1,1,1];
728}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000729def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
730 "(V?)PEXTRBmr",
731 "(V?)PEXTRDmr",
732 "(V?)PEXTRQmr",
733 "(V?)PEXTRWmr",
734 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000735
736def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
737 let Latency = 2;
738 let NumMicroOps = 3;
739 let ResourceCycles = [1,1,1];
740}
741def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
742
Gadi Haber323f2e12017-10-24 20:19:47 +0000743def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
744 let Latency = 2;
745 let NumMicroOps = 3;
746 let ResourceCycles = [1,1,1];
747}
748def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
749
750def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
751 let Latency = 2;
752 let NumMicroOps = 3;
753 let ResourceCycles = [1,1,1];
754}
Craig Topper2d451e72018-03-18 08:38:06 +0000755def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000756def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
757 "PUSH64i8",
758 "STOSB",
759 "STOSL",
760 "STOSQ",
761 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000762
Gadi Haber323f2e12017-10-24 20:19:47 +0000763def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
764 let Latency = 3;
765 let NumMicroOps = 1;
766 let ResourceCycles = [1];
767}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000768def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000769 "ADD_FST0r",
770 "ADD_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000771 "MMX_CVTPI2PSirr",
772 "PDEP(32|64)rr",
773 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000774 "SHLD(16|32|64)rri8",
775 "SHRD(16|32|64)rri8",
Craig Topper5a69a002018-03-21 06:28:42 +0000776 "SUBR_FPrST0",
777 "SUBR_FST0r",
778 "SUBR_FrST0",
Craig Topper5a69a002018-03-21 06:28:42 +0000779 "SUB_FPrST0",
780 "SUB_FST0r",
781 "SUB_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000782 "(V?)CVTDQ2PS(Y?)rr",
783 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000784 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000785
786def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000787 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000788 let NumMicroOps = 2;
789 let ResourceCycles = [1,1];
790}
Clement Courbet327fac42018-03-07 08:14:02 +0000791def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000792
793def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
794 let Latency = 3;
795 let NumMicroOps = 1;
796 let ResourceCycles = [1];
797}
Craig Topper5a69a002018-03-21 06:28:42 +0000798def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
799 "VBROADCASTSSYrr",
800 "VEXTRACTF128rr",
801 "VEXTRACTI128rr",
802 "VINSERTF128rr",
803 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000804 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000805 "VPBROADCASTDYrr",
806 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000807 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000808 "VPERM2F128rr",
809 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000810 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000811 "VPERMQYri",
812 "VPMOVSXBDYrr",
813 "VPMOVSXBQYrr",
814 "VPMOVSXBWYrr",
815 "VPMOVSXDQYrr",
816 "VPMOVSXWDYrr",
817 "VPMOVSXWQYrr",
818 "VPMOVZXBDYrr",
819 "VPMOVZXBQYrr",
820 "VPMOVZXBWYrr",
821 "VPMOVZXDQYrr",
822 "VPMOVZXWDYrr",
823 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000824
825def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
826 let Latency = 3;
827 let NumMicroOps = 1;
828 let ResourceCycles = [1];
829}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000830def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
831 "(V?)MULPS(Y?)rr",
832 "(V?)MULSDrr",
833 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000834
835def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000836 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000837 let NumMicroOps = 3;
838 let ResourceCycles = [3];
839}
Craig Topperb5f26592018-04-19 18:00:17 +0000840def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
841 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
842 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000843
844def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
845 let Latency = 3;
846 let NumMicroOps = 3;
847 let ResourceCycles = [2,1];
848}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000849def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
850 "VPSRAVD(Y?)rr",
851 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000852
853def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
854 let Latency = 3;
855 let NumMicroOps = 3;
856 let ResourceCycles = [2,1];
857}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000858def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000859 "(V?)PHADDD(Y?)rr",
860 "(V?)PHADDSW(Y?)rr",
861 "(V?)PHADDW(Y?)rr",
862 "(V?)PHSUBD(Y?)rr",
863 "(V?)PHSUBSW(Y?)rr",
864 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000865
866def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
867 let Latency = 3;
868 let NumMicroOps = 3;
869 let ResourceCycles = [2,1];
870}
Craig Topper5a69a002018-03-21 06:28:42 +0000871def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
872 "MMX_PACKSSWBirr",
873 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000874
875def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
876 let Latency = 3;
877 let NumMicroOps = 3;
878 let ResourceCycles = [1,2];
879}
880def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
881
882def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
883 let Latency = 3;
884 let NumMicroOps = 3;
885 let ResourceCycles = [1,2];
886}
Craig Topper5a69a002018-03-21 06:28:42 +0000887def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
888 "RCL(8|16|32|64)ri",
889 "RCR(8|16|32|64)r1",
890 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000891
892def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
893 let Latency = 3;
894 let NumMicroOps = 3;
895 let ResourceCycles = [2,1];
896}
Craig Topper5a69a002018-03-21 06:28:42 +0000897def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
898 "ROR(8|16|32|64)rCL",
899 "SAR(8|16|32|64)rCL",
900 "SHL(8|16|32|64)rCL",
901 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000902
903def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
904 let Latency = 3;
905 let NumMicroOps = 4;
906 let ResourceCycles = [1,1,1,1];
907}
908def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
909
910def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
911 let Latency = 3;
912 let NumMicroOps = 4;
913 let ResourceCycles = [1,1,1,1];
914}
Craig Topper5a69a002018-03-21 06:28:42 +0000915def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
916 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000917
918def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
919 let Latency = 4;
920 let NumMicroOps = 2;
921 let ResourceCycles = [1,1];
922}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000923def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
924 "(V?)CVTSD2SIrr",
925 "(V?)CVTSS2SI64rr",
926 "(V?)CVTSS2SIrr",
927 "(V?)CVTTSD2SI64rr",
928 "(V?)CVTTSD2SIrr",
929 "(V?)CVTTSS2SI64rr",
930 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000931
932def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
933 let Latency = 4;
934 let NumMicroOps = 2;
935 let ResourceCycles = [1,1];
936}
Craig Topper5a69a002018-03-21 06:28:42 +0000937def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
938 "VPSLLDYrr",
939 "VPSLLQYrr",
940 "VPSLLWYrr",
941 "VPSRADYrr",
942 "VPSRAWYrr",
943 "VPSRLDYrr",
944 "VPSRLQYrr",
945 "VPSRLWYrr",
946 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000947
948def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
949 let Latency = 4;
950 let NumMicroOps = 2;
951 let ResourceCycles = [1,1];
952}
953def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
954
955def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
956 let Latency = 4;
957 let NumMicroOps = 2;
958 let ResourceCycles = [1,1];
959}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000960def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000961def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000962 "MMX_CVTPI2PDirr",
963 "MMX_CVTPS2PIirr",
964 "MMX_CVTTPD2PIirr",
965 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000966 "(V?)CVTDQ2PDrr",
967 "(V?)CVTPD2DQrr",
968 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000969 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000970 "(V?)CVTSD2SSrr",
971 "(V?)CVTSI642SDrr",
972 "(V?)CVTSI2SDrr",
973 "(V?)CVTSI2SSrr",
974 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000975
976def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
977 let Latency = 4;
978 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000979 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000980}
Craig Topper5a69a002018-03-21 06:28:42 +0000981def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000982
983def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
984 let Latency = 4;
985 let NumMicroOps = 3;
986 let ResourceCycles = [1,1,1];
987}
988def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
989
990def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
991 let Latency = 4;
992 let NumMicroOps = 3;
993 let ResourceCycles = [1,1,1];
994}
Craig Topper5a69a002018-03-21 06:28:42 +0000995def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
996 "ISTT_FP32m",
997 "ISTT_FP64m",
998 "IST_F16m",
999 "IST_F32m",
1000 "IST_FP16m",
1001 "IST_FP32m",
1002 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001003 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001004
1005def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
1006 let Latency = 4;
1007 let NumMicroOps = 4;
1008 let ResourceCycles = [4];
1009}
1010def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1011
1012def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1013 let Latency = 4;
1014 let NumMicroOps = 4;
1015 let ResourceCycles = [1,3];
1016}
1017def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1018
1019def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1020 let Latency = 5;
1021 let NumMicroOps = 1;
1022 let ResourceCycles = [1];
1023}
Craig Topper5a69a002018-03-21 06:28:42 +00001024def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1025 "MMX_PMADDWDirr",
1026 "MMX_PMULHRSWrr",
1027 "MMX_PMULHUWirr",
1028 "MMX_PMULHWirr",
1029 "MMX_PMULLWirr",
1030 "MMX_PMULUDQirr",
Craig Topper5a69a002018-03-21 06:28:42 +00001031 "MUL_FPrST0",
1032 "MUL_FST0r",
1033 "MUL_FrST0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001034 "(V?)PCMPGTQ(Y?)rr",
1035 "(V?)PHMINPOSUWrr",
1036 "(V?)PMADDUBSW(Y?)rr",
1037 "(V?)PMADDWD(Y?)rr",
1038 "(V?)PMULDQ(Y?)rr",
1039 "(V?)PMULHRSW(Y?)rr",
1040 "(V?)PMULHUW(Y?)rr",
1041 "(V?)PMULHW(Y?)rr",
1042 "(V?)PMULLW(Y?)rr",
1043 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001044 "(V?)RCPPSr",
1045 "(V?)RCPSSr",
1046 "(V?)RSQRTPSr",
1047 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001048
Gadi Haber323f2e12017-10-24 20:19:47 +00001049def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1050 let Latency = 5;
1051 let NumMicroOps = 1;
1052 let ResourceCycles = [1];
1053}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001054def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001055 "MMX_MOVD64to64rm",
1056 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001057 "MOVSX(16|32|64)rm16",
1058 "MOVSX(16|32|64)rm32",
1059 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001060 "MOVZX(16|32|64)rm16",
1061 "MOVZX(16|32|64)rm8",
1062 "PREFETCHNTA",
1063 "PREFETCHT0",
1064 "PREFETCHT1",
1065 "PREFETCHT2",
1066 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001067 "(V?)LDDQUrm",
1068 "(V?)MOV64toPQIrm",
1069 "(V?)MOVAPDrm",
1070 "(V?)MOVAPSrm",
1071 "(V?)MOVDDUPrm",
1072 "(V?)MOVDI2PDIrm",
1073 "(V?)MOVDQArm",
1074 "(V?)MOVDQUrm",
1075 "(V?)MOVNTDQArm",
1076 "(V?)MOVQI2PQIrm",
1077 "(V?)MOVSDrm",
1078 "(V?)MOVSHDUPrm",
1079 "(V?)MOVSLDUPrm",
1080 "(V?)MOVSSrm",
1081 "(V?)MOVUPDrm",
1082 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001083 "VPBROADCASTDrm",
1084 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001085
1086def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1087 let Latency = 5;
1088 let NumMicroOps = 3;
1089 let ResourceCycles = [1,2];
1090}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001091def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1092 "(V?)HADDPD(Y?)rr",
1093 "(V?)HADDPS(Y?)rr",
1094 "(V?)HSUBPD(Y?)rr",
1095 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001096
1097def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1098 let Latency = 5;
1099 let NumMicroOps = 3;
1100 let ResourceCycles = [1,1,1];
1101}
1102def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1103
1104def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001105 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001106 let NumMicroOps = 3;
1107 let ResourceCycles = [1,1,1];
1108}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001109def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001110
1111def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1112 let Latency = 5;
1113 let NumMicroOps = 4;
1114 let ResourceCycles = [1,1,1,1];
1115}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001116def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1117 "VMASKMOVPS(Y?)mr",
1118 "VPMASKMOVD(Y?)mr",
1119 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001120
1121def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1122 let Latency = 5;
1123 let NumMicroOps = 5;
1124 let ResourceCycles = [1,4];
1125}
1126def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1127
1128def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1129 let Latency = 5;
1130 let NumMicroOps = 5;
1131 let ResourceCycles = [1,4];
1132}
1133def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1134
1135def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1136 let Latency = 5;
1137 let NumMicroOps = 5;
1138 let ResourceCycles = [2,3];
1139}
Craig Topper5a69a002018-03-21 06:28:42 +00001140def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001141
1142def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1143 let Latency = 5;
1144 let NumMicroOps = 6;
1145 let ResourceCycles = [1,1,4];
1146}
Craig Topper5a69a002018-03-21 06:28:42 +00001147def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001148
1149def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1150 let Latency = 6;
1151 let NumMicroOps = 1;
1152 let ResourceCycles = [1];
1153}
Craig Topper5a69a002018-03-21 06:28:42 +00001154def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1155 "LD_F64m",
1156 "LD_F80m",
1157 "VBROADCASTF128",
1158 "VBROADCASTI128",
1159 "VBROADCASTSDYrm",
1160 "VBROADCASTSSYrm",
1161 "VLDDQUYrm",
1162 "VMOVAPDYrm",
1163 "VMOVAPSYrm",
1164 "VMOVDDUPYrm",
1165 "VMOVDQAYrm",
1166 "VMOVDQUYrm",
1167 "VMOVNTDQAYrm",
1168 "VMOVSHDUPYrm",
1169 "VMOVSLDUPYrm",
1170 "VMOVUPDYrm",
1171 "VMOVUPSYrm",
1172 "VPBROADCASTDYrm",
1173 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001174 "(V?)ROUNDPD(Y?)r",
1175 "(V?)ROUNDPS(Y?)r",
1176 "(V?)ROUNDSDr",
1177 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001178
1179def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1180 let Latency = 6;
1181 let NumMicroOps = 2;
1182 let ResourceCycles = [1,1];
1183}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001184def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001185 "MMX_PSLLQrm",
1186 "MMX_PSLLWrm",
1187 "MMX_PSRADrm",
1188 "MMX_PSRAWrm",
1189 "MMX_PSRLDrm",
1190 "MMX_PSRLQrm",
1191 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001192 "VCVTPH2PS(Y?)rm",
1193 "(V?)CVTPS2PDrm",
1194 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001195 "VPSLLVQrm",
1196 "VPSRLVQrm",
1197 "VTESTPDrm",
1198 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001199
1200def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1201 let Latency = 6;
1202 let NumMicroOps = 2;
1203 let ResourceCycles = [1,1];
1204}
Craig Topper5a69a002018-03-21 06:28:42 +00001205def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1206 "VCVTPD2DQYrr",
1207 "VCVTPD2PSYrr",
1208 "VCVTPS2PHYrr",
1209 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001210
1211def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1212 let Latency = 6;
1213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001216def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001217 "MMX_PINSRWrm",
1218 "MMX_PSHUFBrm",
1219 "MMX_PSHUFWmi",
1220 "MMX_PUNPCKHBWirm",
1221 "MMX_PUNPCKHDQirm",
1222 "MMX_PUNPCKHWDirm",
1223 "MMX_PUNPCKLBWirm",
1224 "MMX_PUNPCKLDQirm",
1225 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001226 "(V?)INSERTPSrm",
1227 "(V?)MOVHPDrm",
1228 "(V?)MOVHPSrm",
1229 "(V?)MOVLPDrm",
1230 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001231 "(V?)PACKSSDWrm",
1232 "(V?)PACKSSWBrm",
1233 "(V?)PACKUSDWrm",
1234 "(V?)PACKUSWBrm",
1235 "(V?)PALIGNRrmi",
1236 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001237 "VPERMILPDmi",
1238 "VPERMILPDrm",
1239 "VPERMILPSmi",
1240 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001241 "(V?)PINSRBrm",
1242 "(V?)PINSRDrm",
1243 "(V?)PINSRQrm",
1244 "(V?)PINSRWrm",
1245 "(V?)PMOVSXBDrm",
1246 "(V?)PMOVSXBQrm",
1247 "(V?)PMOVSXBWrm",
1248 "(V?)PMOVSXDQrm",
1249 "(V?)PMOVSXWDrm",
1250 "(V?)PMOVSXWQrm",
1251 "(V?)PMOVZXBDrm",
1252 "(V?)PMOVZXBQrm",
1253 "(V?)PMOVZXBWrm",
1254 "(V?)PMOVZXDQrm",
1255 "(V?)PMOVZXWDrm",
1256 "(V?)PMOVZXWQrm",
1257 "(V?)PSHUFBrm",
1258 "(V?)PSHUFDmi",
1259 "(V?)PSHUFHWmi",
1260 "(V?)PSHUFLWmi",
1261 "(V?)PUNPCKHBWrm",
1262 "(V?)PUNPCKHDQrm",
1263 "(V?)PUNPCKHQDQrm",
1264 "(V?)PUNPCKHWDrm",
1265 "(V?)PUNPCKLBWrm",
1266 "(V?)PUNPCKLDQrm",
1267 "(V?)PUNPCKLQDQrm",
1268 "(V?)PUNPCKLWDrm",
1269 "(V?)SHUFPDrmi",
1270 "(V?)SHUFPSrmi",
1271 "(V?)UNPCKHPDrm",
1272 "(V?)UNPCKHPSrm",
1273 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001274 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001275
1276def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1277 let Latency = 6;
1278 let NumMicroOps = 2;
1279 let ResourceCycles = [1,1];
1280}
Craig Topper5a69a002018-03-21 06:28:42 +00001281def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1282 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001283
1284def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1285 let Latency = 6;
1286 let NumMicroOps = 2;
1287 let ResourceCycles = [1,1];
1288}
Craig Topperdfccafe2018-04-18 06:41:25 +00001289def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001290def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1291 ADCX32rm, ADCX64rm,
1292 ADOX32rm, ADOX64rm,
1293 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001294
1295def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1296 let Latency = 6;
1297 let NumMicroOps = 2;
1298 let ResourceCycles = [1,1];
1299}
Craig Topper5a69a002018-03-21 06:28:42 +00001300def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1301 "BLSI(32|64)rm",
1302 "BLSMSK(32|64)rm",
1303 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001304 "MMX_PABS(B|D|W)rm",
1305 "MMX_PADD(B|D|Q|W)irm",
1306 "MMX_PADDS(B|W)irm",
1307 "MMX_PADDUS(B|W)irm",
1308 "MMX_PAVG(B|W)irm",
1309 "MMX_PCMPEQ(B|D|W)irm",
1310 "MMX_PCMPGT(B|D|W)irm",
1311 "MMX_P(MAX|MIN)SWirm",
1312 "MMX_P(MAX|MIN)UBirm",
1313 "MMX_PSIGN(B|D|W)rm",
1314 "MMX_PSUB(B|D|Q|W)irm",
1315 "MMX_PSUBS(B|W)irm",
1316 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001317 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001318 "(V?)PABSBrm",
1319 "(V?)PABSDrm",
1320 "(V?)PABSWrm",
1321 "(V?)PADDBrm",
1322 "(V?)PADDDrm",
1323 "(V?)PADDQrm",
1324 "(V?)PADDSBrm",
1325 "(V?)PADDSWrm",
1326 "(V?)PADDUSBrm",
1327 "(V?)PADDUSWrm",
1328 "(V?)PADDWrm",
1329 "(V?)PAVGBrm",
1330 "(V?)PAVGWrm",
1331 "(V?)PCMPEQBrm",
1332 "(V?)PCMPEQDrm",
1333 "(V?)PCMPEQQrm",
1334 "(V?)PCMPEQWrm",
1335 "(V?)PCMPGTBrm",
1336 "(V?)PCMPGTDrm",
1337 "(V?)PCMPGTWrm",
1338 "(V?)PMAXSBrm",
1339 "(V?)PMAXSDrm",
1340 "(V?)PMAXSWrm",
1341 "(V?)PMAXUBrm",
1342 "(V?)PMAXUDrm",
1343 "(V?)PMAXUWrm",
1344 "(V?)PMINSBrm",
1345 "(V?)PMINSDrm",
1346 "(V?)PMINSWrm",
1347 "(V?)PMINUBrm",
1348 "(V?)PMINUDrm",
1349 "(V?)PMINUWrm",
1350 "(V?)PSIGNBrm",
1351 "(V?)PSIGNDrm",
1352 "(V?)PSIGNWrm",
1353 "(V?)PSUBBrm",
1354 "(V?)PSUBDrm",
1355 "(V?)PSUBQrm",
1356 "(V?)PSUBSBrm",
1357 "(V?)PSUBSWrm",
1358 "(V?)PSUBUSBrm",
1359 "(V?)PSUBUSWrm",
1360 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001361
1362def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1363 let Latency = 6;
1364 let NumMicroOps = 2;
1365 let ResourceCycles = [1,1];
1366}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001367def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001368 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001369 "VINSERTF128rm",
1370 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001371 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001372
1373def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1374 let Latency = 6;
1375 let NumMicroOps = 2;
1376 let ResourceCycles = [1,1];
1377}
Craig Topper2d451e72018-03-18 08:38:06 +00001378def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001379def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001380
1381def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1382 let Latency = 6;
1383 let NumMicroOps = 4;
1384 let ResourceCycles = [1,1,2];
1385}
Craig Topper5a69a002018-03-21 06:28:42 +00001386def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1387 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001388
1389def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1390 let Latency = 6;
1391 let NumMicroOps = 4;
1392 let ResourceCycles = [1,1,1,1];
1393}
1394def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1395
1396def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1397 let Latency = 6;
1398 let NumMicroOps = 4;
1399 let ResourceCycles = [1,1,1,1];
1400}
Craig Topper5a69a002018-03-21 06:28:42 +00001401def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1402 "BTR(16|32|64)mi8",
1403 "BTS(16|32|64)mi8",
1404 "SAR(8|16|32|64)m1",
1405 "SAR(8|16|32|64)mi",
1406 "SHL(8|16|32|64)m1",
1407 "SHL(8|16|32|64)mi",
1408 "SHR(8|16|32|64)m1",
1409 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001410
1411def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1412 let Latency = 6;
1413 let NumMicroOps = 4;
1414 let ResourceCycles = [1,1,1,1];
1415}
Craig Topperf0d04262018-04-06 16:16:48 +00001416def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1417 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001418
1419def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1420 let Latency = 6;
1421 let NumMicroOps = 6;
1422 let ResourceCycles = [1,5];
1423}
1424def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1425
Gadi Haber323f2e12017-10-24 20:19:47 +00001426def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1427 let Latency = 7;
1428 let NumMicroOps = 2;
1429 let ResourceCycles = [1,1];
1430}
Craig Topper5a69a002018-03-21 06:28:42 +00001431def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1432 "VPSLLQYrm",
1433 "VPSLLVQYrm",
1434 "VPSLLWYrm",
1435 "VPSRADYrm",
1436 "VPSRAWYrm",
1437 "VPSRLDYrm",
1438 "VPSRLQYrm",
1439 "VPSRLVQYrm",
1440 "VPSRLWYrm",
1441 "VTESTPDYrm",
1442 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001443
1444def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1445 let Latency = 7;
1446 let NumMicroOps = 2;
1447 let ResourceCycles = [1,1];
1448}
Craig Topper5a69a002018-03-21 06:28:42 +00001449def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1450 "FCOM64m",
1451 "FCOMP32m",
1452 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001453
1454def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1455 let Latency = 7;
1456 let NumMicroOps = 2;
1457 let ResourceCycles = [1,1];
1458}
Craig Topper5a69a002018-03-21 06:28:42 +00001459def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1460 "VANDNPSYrm",
1461 "VANDPDYrm",
1462 "VANDPSYrm",
1463 "VORPDYrm",
1464 "VORPSYrm",
1465 "VPACKSSDWYrm",
1466 "VPACKSSWBYrm",
1467 "VPACKUSDWYrm",
1468 "VPACKUSWBYrm",
1469 "VPALIGNRYrmi",
1470 "VPBLENDWYrmi",
1471 "VPERMILPDYmi",
1472 "VPERMILPDYrm",
1473 "VPERMILPSYmi",
1474 "VPERMILPSYrm",
1475 "VPSHUFBYrm",
1476 "VPSHUFDYmi",
1477 "VPSHUFHWYmi",
1478 "VPSHUFLWYmi",
1479 "VPUNPCKHBWYrm",
1480 "VPUNPCKHDQYrm",
1481 "VPUNPCKHQDQYrm",
1482 "VPUNPCKHWDYrm",
1483 "VPUNPCKLBWYrm",
1484 "VPUNPCKLDQYrm",
1485 "VPUNPCKLQDQYrm",
1486 "VPUNPCKLWDYrm",
1487 "VSHUFPDYrmi",
1488 "VSHUFPSYrmi",
1489 "VUNPCKHPDYrm",
1490 "VUNPCKHPSYrm",
1491 "VUNPCKLPDYrm",
1492 "VUNPCKLPSYrm",
1493 "VXORPDYrm",
1494 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001495
1496def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1497 let Latency = 7;
1498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Craig Topper5a69a002018-03-21 06:28:42 +00001501def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1502 "VPABSDYrm",
1503 "VPABSWYrm",
1504 "VPADDBYrm",
1505 "VPADDDYrm",
1506 "VPADDQYrm",
1507 "VPADDSBYrm",
1508 "VPADDSWYrm",
1509 "VPADDUSBYrm",
1510 "VPADDUSWYrm",
1511 "VPADDWYrm",
1512 "VPAVGBYrm",
1513 "VPAVGWYrm",
1514 "VPCMPEQBYrm",
1515 "VPCMPEQDYrm",
1516 "VPCMPEQQYrm",
1517 "VPCMPEQWYrm",
1518 "VPCMPGTBYrm",
1519 "VPCMPGTDYrm",
1520 "VPCMPGTWYrm",
1521 "VPMAXSBYrm",
1522 "VPMAXSDYrm",
1523 "VPMAXSWYrm",
1524 "VPMAXUBYrm",
1525 "VPMAXUDYrm",
1526 "VPMAXUWYrm",
1527 "VPMINSBYrm",
1528 "VPMINSDYrm",
1529 "VPMINSWYrm",
1530 "VPMINUBYrm",
1531 "VPMINUDYrm",
1532 "VPMINUWYrm",
1533 "VPSIGNBYrm",
1534 "VPSIGNDYrm",
1535 "VPSIGNWYrm",
1536 "VPSUBBYrm",
1537 "VPSUBDYrm",
1538 "VPSUBQYrm",
1539 "VPSUBSBYrm",
1540 "VPSUBSWYrm",
1541 "VPSUBUSBYrm",
1542 "VPSUBUSWYrm",
1543 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001544
1545def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1546 let Latency = 7;
1547 let NumMicroOps = 2;
1548 let ResourceCycles = [1,1];
1549}
Craig Topper5a69a002018-03-21 06:28:42 +00001550def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1551 "VBLENDPSYrmi",
1552 "VPANDNYrm",
1553 "VPANDYrm",
1554 "VPBLENDDYrmi",
1555 "VPORYrm",
1556 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001557
1558def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1559 let Latency = 7;
1560 let NumMicroOps = 3;
1561 let ResourceCycles = [1,2];
1562}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001563def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001564
1565def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1566 let Latency = 7;
1567 let NumMicroOps = 3;
1568 let ResourceCycles = [2,1];
1569}
Craig Topper5a69a002018-03-21 06:28:42 +00001570def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1571 "BLENDVPSrm0",
1572 "MMX_PACKSSDWirm",
1573 "MMX_PACKSSWBirm",
1574 "MMX_PACKUSWBirm",
1575 "PBLENDVBrm0",
1576 "VBLENDVPDrm",
1577 "VBLENDVPSrm",
1578 "VMASKMOVPDrm",
1579 "VMASKMOVPSrm",
1580 "VPBLENDVBrm",
1581 "VPMASKMOVDrm",
1582 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001583
1584def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1585 let Latency = 7;
1586 let NumMicroOps = 3;
1587 let ResourceCycles = [1,2];
1588}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001589def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1590 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001591
1592def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1593 let Latency = 7;
1594 let NumMicroOps = 3;
1595 let ResourceCycles = [1,1,1];
1596}
Craig Topper5a69a002018-03-21 06:28:42 +00001597def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1598 "PSLLQrm",
1599 "PSLLWrm",
1600 "PSRADrm",
1601 "PSRAWrm",
1602 "PSRLDrm",
1603 "PSRLQrm",
1604 "PSRLWrm",
1605 "PTESTrm",
1606 "VPSLLDrm",
1607 "VPSLLQrm",
1608 "VPSLLWrm",
1609 "VPSRADrm",
1610 "VPSRAWrm",
1611 "VPSRLDrm",
1612 "VPSRLQrm",
1613 "VPSRLWrm",
1614 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001615
1616def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1617 let Latency = 7;
1618 let NumMicroOps = 3;
1619 let ResourceCycles = [1,1,1];
1620}
1621def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1622
1623def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1624 let Latency = 7;
1625 let NumMicroOps = 3;
1626 let ResourceCycles = [1,1,1];
1627}
Craig Topper5a69a002018-03-21 06:28:42 +00001628def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001629
1630def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1631 let Latency = 7;
1632 let NumMicroOps = 3;
1633 let ResourceCycles = [1,1,1];
1634}
Craig Topper5a69a002018-03-21 06:28:42 +00001635def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1636 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001637
Gadi Haber323f2e12017-10-24 20:19:47 +00001638def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1639 let Latency = 7;
1640 let NumMicroOps = 3;
1641 let ResourceCycles = [1,1,1];
1642}
Craig Topperf4cd9082018-01-19 05:47:32 +00001643def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001644
1645def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1646 let Latency = 7;
1647 let NumMicroOps = 5;
1648 let ResourceCycles = [1,1,1,2];
1649}
Craig Topper5a69a002018-03-21 06:28:42 +00001650def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1651 "ROL(8|16|32|64)mi",
1652 "ROR(8|16|32|64)m1",
1653 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001654
1655def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1656 let Latency = 7;
1657 let NumMicroOps = 5;
1658 let ResourceCycles = [1,1,1,2];
1659}
Craig Topper5a69a002018-03-21 06:28:42 +00001660def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001661
1662def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1663 let Latency = 7;
1664 let NumMicroOps = 5;
1665 let ResourceCycles = [1,1,1,1,1];
1666}
Craig Topper5a69a002018-03-21 06:28:42 +00001667def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1668 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001669
1670def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1671 let Latency = 7;
1672 let NumMicroOps = 7;
1673 let ResourceCycles = [2,2,1,2];
1674}
Craig Topper2d451e72018-03-18 08:38:06 +00001675def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001676
1677def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1678 let Latency = 8;
1679 let NumMicroOps = 2;
1680 let ResourceCycles = [1,1];
1681}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001682def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001683 "MMX_CVTPS2PIirm",
1684 "MMX_CVTTPS2PIirm",
1685 "PDEP(32|64)rm",
1686 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001687 "(V?)ADDPDrm",
1688 "(V?)ADDPSrm",
1689 "(V?)ADDSDrm",
1690 "(V?)ADDSSrm",
1691 "(V?)ADDSUBPDrm",
1692 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001693 "(V?)CVTDQ2PSrm",
1694 "(V?)CVTPS2DQrm",
1695 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001696 "(V?)SUBPDrm",
1697 "(V?)SUBPSrm",
1698 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001699 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001700
1701def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001702 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001703 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001704 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001705}
Craig Topperf846e2d2018-04-19 05:34:05 +00001706def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001707
Craig Topperf846e2d2018-04-19 05:34:05 +00001708def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1709 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001710 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001711 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001712}
Craig Topper5a69a002018-03-21 06:28:42 +00001713def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001714
Gadi Haber323f2e12017-10-24 20:19:47 +00001715def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1716 let Latency = 8;
1717 let NumMicroOps = 2;
1718 let ResourceCycles = [1,1];
1719}
Craig Topper5a69a002018-03-21 06:28:42 +00001720def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1721 "VPMOVSXBQYrm",
1722 "VPMOVSXBWYrm",
1723 "VPMOVSXDQYrm",
1724 "VPMOVSXWDYrm",
1725 "VPMOVSXWQYrm",
1726 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001727
1728def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1729 let Latency = 8;
1730 let NumMicroOps = 2;
1731 let ResourceCycles = [1,1];
1732}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001733def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1734 "(V?)MULPSrm",
1735 "(V?)MULSDrm",
1736 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001737
1738def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1739 let Latency = 8;
1740 let NumMicroOps = 3;
1741 let ResourceCycles = [2,1];
1742}
Craig Topper5a69a002018-03-21 06:28:42 +00001743def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1744 "VBLENDVPSYrm",
1745 "VMASKMOVPDYrm",
1746 "VMASKMOVPSYrm",
1747 "VPBLENDVBYrm",
1748 "VPMASKMOVDYrm",
1749 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001750
1751def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1752 let Latency = 8;
1753 let NumMicroOps = 4;
1754 let ResourceCycles = [2,1,1];
1755}
Craig Topper5a69a002018-03-21 06:28:42 +00001756def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1757 "VPSRAVDrm",
1758 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001759
1760def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1761 let Latency = 8;
1762 let NumMicroOps = 4;
1763 let ResourceCycles = [2,1,1];
1764}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001765def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001766 "(V?)PHADDDrm",
1767 "(V?)PHADDSWrm",
1768 "(V?)PHADDWrm",
1769 "(V?)PHSUBDrm",
1770 "(V?)PHSUBSWrm",
1771 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001772
1773def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1774 let Latency = 8;
1775 let NumMicroOps = 5;
1776 let ResourceCycles = [1,1,1,2];
1777}
Craig Topper5a69a002018-03-21 06:28:42 +00001778def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1779 "RCL(8|16|32|64)mi",
1780 "RCR(8|16|32|64)m1",
1781 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001782
1783def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1784 let Latency = 8;
1785 let NumMicroOps = 5;
1786 let ResourceCycles = [1,1,2,1];
1787}
Craig Topper13a16502018-03-19 00:56:09 +00001788def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001789
1790def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1791 let Latency = 8;
1792 let NumMicroOps = 6;
1793 let ResourceCycles = [1,1,1,3];
1794}
Craig Topper9f834812018-04-01 21:54:24 +00001795def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001796
1797def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1798 let Latency = 8;
1799 let NumMicroOps = 6;
1800 let ResourceCycles = [1,1,1,2,1];
1801}
Craig Topper9f834812018-04-01 21:54:24 +00001802def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001803 "CMPXCHG(8|16|32|64)rm",
1804 "ROL(8|16|32|64)mCL",
1805 "SAR(8|16|32|64)mCL",
1806 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001807 "SHL(8|16|32|64)mCL",
1808 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001809def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1810 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001811
1812def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1813 let Latency = 9;
1814 let NumMicroOps = 2;
1815 let ResourceCycles = [1,1];
1816}
Craig Topper5a69a002018-03-21 06:28:42 +00001817def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1818 "ADD_F64m",
1819 "ILD_F16m",
1820 "ILD_F32m",
1821 "ILD_F64m",
1822 "SUBR_F32m",
1823 "SUBR_F64m",
1824 "SUB_F32m",
1825 "SUB_F64m",
1826 "VADDPDYrm",
1827 "VADDPSYrm",
1828 "VADDSUBPDYrm",
1829 "VADDSUBPSYrm",
1830 "VCMPPDYrmi",
1831 "VCMPPSYrmi",
1832 "VCVTDQ2PSYrm",
1833 "VCVTPS2DQYrm",
1834 "VCVTTPS2DQYrm",
1835 "VMAX(C?)PDYrm",
1836 "VMAX(C?)PSYrm",
1837 "VMIN(C?)PDYrm",
1838 "VMIN(C?)PSYrm",
1839 "VSUBPDYrm",
1840 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001841
1842def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1843 let Latency = 9;
1844 let NumMicroOps = 2;
1845 let ResourceCycles = [1,1];
1846}
Craig Topper5a69a002018-03-21 06:28:42 +00001847def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1848 "VPERM2I128rm",
1849 "VPERMDYrm",
1850 "VPERMPDYmi",
1851 "VPERMPSYrm",
1852 "VPERMQYmi",
1853 "VPMOVZXBDYrm",
1854 "VPMOVZXBQYrm",
1855 "VPMOVZXBWYrm",
1856 "VPMOVZXDQYrm",
1857 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001858
1859def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1860 let Latency = 9;
1861 let NumMicroOps = 2;
1862 let ResourceCycles = [1,1];
1863}
Craig Topper5a69a002018-03-21 06:28:42 +00001864def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1865 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001866
1867def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1868 let Latency = 9;
1869 let NumMicroOps = 3;
1870 let ResourceCycles = [1,1,1];
1871}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001872def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001873
1874def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1875 let Latency = 9;
1876 let NumMicroOps = 3;
1877 let ResourceCycles = [1,1,1];
1878}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001879def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1880 "(V?)CVTSD2SIrm",
1881 "(V?)CVTSS2SI64rm",
1882 "(V?)CVTSS2SIrm",
1883 "(V?)CVTTSD2SI64rm",
1884 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001885 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001886 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001887
1888def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1889 let Latency = 9;
1890 let NumMicroOps = 3;
1891 let ResourceCycles = [1,1,1];
1892}
1893def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1894
1895def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1896 let Latency = 9;
1897 let NumMicroOps = 3;
1898 let ResourceCycles = [1,1,1];
1899}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001900def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001901def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001902 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001903 "CVTTPD2DQrm",
1904 "MMX_CVTPD2PIirm",
1905 "MMX_CVTPI2PDirm",
1906 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001907 "(V?)CVTDQ2PDrm",
1908 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001909
1910def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1911 let Latency = 9;
1912 let NumMicroOps = 3;
1913 let ResourceCycles = [1,1,1];
1914}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001915def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1916 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001917
1918def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1919 let Latency = 9;
1920 let NumMicroOps = 4;
1921 let ResourceCycles = [2,1,1];
1922}
Craig Topper5a69a002018-03-21 06:28:42 +00001923def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1924 "VPSRAVDYrm",
1925 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001926
1927def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1928 let Latency = 9;
1929 let NumMicroOps = 4;
1930 let ResourceCycles = [2,1,1];
1931}
Craig Topper5a69a002018-03-21 06:28:42 +00001932def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1933 "VPHADDSWYrm",
1934 "VPHADDWYrm",
1935 "VPHSUBDYrm",
1936 "VPHSUBSWYrm",
1937 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001938
1939def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1940 let Latency = 9;
1941 let NumMicroOps = 4;
1942 let ResourceCycles = [1,1,1,1];
1943}
Craig Topper5a69a002018-03-21 06:28:42 +00001944def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1945 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001946
1947def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1948 let Latency = 9;
1949 let NumMicroOps = 5;
1950 let ResourceCycles = [1,1,3];
1951}
1952def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1953
1954def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1955 let Latency = 9;
1956 let NumMicroOps = 5;
1957 let ResourceCycles = [1,2,1,1];
1958}
Craig Topper5a69a002018-03-21 06:28:42 +00001959def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1960 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001961
Gadi Haber323f2e12017-10-24 20:19:47 +00001962def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1963 let Latency = 10;
1964 let NumMicroOps = 2;
1965 let ResourceCycles = [1,1];
1966}
Craig Topper5a69a002018-03-21 06:28:42 +00001967def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1968 "MMX_PMADDWDirm",
1969 "MMX_PMULHRSWrm",
1970 "MMX_PMULHUWirm",
1971 "MMX_PMULHWirm",
1972 "MMX_PMULLWirm",
1973 "MMX_PMULUDQirm",
1974 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001975 "(V?)PCMPGTQrm",
1976 "(V?)PHMINPOSUWrm",
1977 "(V?)PMADDUBSWrm",
1978 "(V?)PMADDWDrm",
1979 "(V?)PMULDQrm",
1980 "(V?)PMULHRSWrm",
1981 "(V?)PMULHUWrm",
1982 "(V?)PMULHWrm",
1983 "(V?)PMULLWrm",
1984 "(V?)PMULUDQrm",
1985 "(V?)PSADBWrm",
1986 "(V?)RCPPSm",
1987 "(V?)RCPSSm",
1988 "(V?)RSQRTPSm",
1989 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001990
1991def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1992 let Latency = 10;
1993 let NumMicroOps = 2;
1994 let ResourceCycles = [1,1];
1995}
Craig Topperf82867c2017-12-13 23:11:30 +00001996def: InstRW<[BWWriteResGroup116],
1997 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1998 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001999
2000def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
2001 let Latency = 10;
2002 let NumMicroOps = 3;
2003 let ResourceCycles = [2,1];
2004}
Craig Topper5a69a002018-03-21 06:28:42 +00002005def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
2006 "FICOM32m",
2007 "FICOMP16m",
2008 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
2010def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2011 let Latency = 10;
2012 let NumMicroOps = 3;
2013 let ResourceCycles = [1,1,1];
2014}
2015def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2016
2017def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2018 let Latency = 10;
2019 let NumMicroOps = 4;
2020 let ResourceCycles = [1,2,1];
2021}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002022def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2023 "(V?)HADDPSrm",
2024 "(V?)HSUBPDrm",
2025 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002026
2027def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2028 let Latency = 10;
2029 let NumMicroOps = 4;
2030 let ResourceCycles = [1,1,1,1];
2031}
2032def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2033
2034def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002035 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002036 let NumMicroOps = 4;
2037 let ResourceCycles = [1,1,1,1];
2038}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002039def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002040
Craig Topper8104f262018-04-02 05:33:28 +00002041def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002042 let Latency = 11;
2043 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002044 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002045}
Craig Topper8104f262018-04-02 05:33:28 +00002046def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2047
2048def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2049 let Latency = 11;
2050 let NumMicroOps = 1;
2051 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2052}
2053def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002054
2055def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2056 let Latency = 11;
2057 let NumMicroOps = 2;
2058 let ResourceCycles = [1,1];
2059}
Craig Topper5a69a002018-03-21 06:28:42 +00002060def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2061 "MUL_F64m",
2062 "VPCMPGTQYrm",
2063 "VPMADDUBSWYrm",
2064 "VPMADDWDYrm",
2065 "VPMULDQYrm",
2066 "VPMULHRSWYrm",
2067 "VPMULHUWYrm",
2068 "VPMULHWYrm",
2069 "VPMULLWYrm",
2070 "VPMULUDQYrm",
2071 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002072
2073def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2074 let Latency = 11;
2075 let NumMicroOps = 2;
2076 let ResourceCycles = [1,1];
2077}
Craig Topperf82867c2017-12-13 23:11:30 +00002078def: InstRW<[BWWriteResGroup124],
2079 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002080
Gadi Haber323f2e12017-10-24 20:19:47 +00002081def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2082 let Latency = 11;
2083 let NumMicroOps = 3;
2084 let ResourceCycles = [2,1];
2085}
Craig Topper5a69a002018-03-21 06:28:42 +00002086def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2087 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002088
2089def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2090 let Latency = 11;
2091 let NumMicroOps = 3;
2092 let ResourceCycles = [2,1];
2093}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002094def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2095 "(V?)ROUNDPSm",
2096 "(V?)ROUNDSDm",
2097 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002098
2099def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2100 let Latency = 11;
2101 let NumMicroOps = 3;
2102 let ResourceCycles = [1,1,1];
2103}
2104def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2105
2106def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2107 let Latency = 11;
2108 let NumMicroOps = 4;
2109 let ResourceCycles = [1,2,1];
2110}
Craig Topper5a69a002018-03-21 06:28:42 +00002111def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2112 "VHADDPSYrm",
2113 "VHSUBPDYrm",
2114 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002115
2116def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2117 let Latency = 11;
2118 let NumMicroOps = 6;
2119 let ResourceCycles = [1,1,1,1,2];
2120}
Craig Topper5a69a002018-03-21 06:28:42 +00002121def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2122 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002123
2124def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2125 let Latency = 11;
2126 let NumMicroOps = 7;
2127 let ResourceCycles = [2,2,3];
2128}
Craig Topper5a69a002018-03-21 06:28:42 +00002129def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2130 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002131
2132def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2133 let Latency = 11;
2134 let NumMicroOps = 9;
2135 let ResourceCycles = [1,4,1,3];
2136}
2137def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2138
2139def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2140 let Latency = 11;
2141 let NumMicroOps = 11;
2142 let ResourceCycles = [2,9];
2143}
Craig Topper2d451e72018-03-18 08:38:06 +00002144def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2145def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002146
Gadi Haber323f2e12017-10-24 20:19:47 +00002147def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2148 let Latency = 12;
2149 let NumMicroOps = 3;
2150 let ResourceCycles = [2,1];
2151}
Craig Topper5a69a002018-03-21 06:28:42 +00002152def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2153 "ADD_FI32m",
2154 "SUBR_FI16m",
2155 "SUBR_FI32m",
2156 "SUB_FI16m",
2157 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002158 "VROUNDPDYm",
2159 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002160
2161def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2162 let Latency = 12;
2163 let NumMicroOps = 4;
2164 let ResourceCycles = [1,2,1];
2165}
Craig Topper5a69a002018-03-21 06:28:42 +00002166def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002167
Craig Topper8104f262018-04-02 05:33:28 +00002168def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002169 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002170 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002171 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002172}
Craig Topper8104f262018-04-02 05:33:28 +00002173def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2174
2175def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2176 let Latency = 11;
2177 let NumMicroOps = 1;
2178 let ResourceCycles = [1,4];
2179}
2180def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002181
2182def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2183 let Latency = 13;
2184 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002185 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002186}
2187def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2188
Craig Topper8104f262018-04-02 05:33:28 +00002189def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002190 let Latency = 14;
2191 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002192 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002193}
Craig Topper8104f262018-04-02 05:33:28 +00002194def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2195
2196def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2197 let Latency = 14;
2198 let NumMicroOps = 1;
2199 let ResourceCycles = [1,4];
2200}
2201def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002202
Gadi Haber323f2e12017-10-24 20:19:47 +00002203def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2204 let Latency = 14;
2205 let NumMicroOps = 3;
2206 let ResourceCycles = [1,1,1];
2207}
Craig Topper5a69a002018-03-21 06:28:42 +00002208def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2209 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002210
2211def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2212 let Latency = 14;
2213 let NumMicroOps = 4;
2214 let ResourceCycles = [2,1,1];
2215}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002216def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002217
2218def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2219 let Latency = 14;
2220 let NumMicroOps = 4;
2221 let ResourceCycles = [1,1,1,1];
2222}
Craig Topper5a69a002018-03-21 06:28:42 +00002223def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002224
2225def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2226 let Latency = 14;
2227 let NumMicroOps = 8;
2228 let ResourceCycles = [2,2,1,3];
2229}
2230def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2231
2232def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2233 let Latency = 14;
2234 let NumMicroOps = 10;
2235 let ResourceCycles = [2,3,1,4];
2236}
2237def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2238
2239def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2240 let Latency = 14;
2241 let NumMicroOps = 12;
2242 let ResourceCycles = [2,1,4,5];
2243}
2244def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2245
2246def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2247 let Latency = 15;
2248 let NumMicroOps = 1;
2249 let ResourceCycles = [1];
2250}
Craig Topper5a69a002018-03-21 06:28:42 +00002251def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2252 "DIVR_FST0r",
2253 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002254
Gadi Haber323f2e12017-10-24 20:19:47 +00002255def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2256 let Latency = 15;
2257 let NumMicroOps = 10;
2258 let ResourceCycles = [1,1,1,4,1,2];
2259}
Craig Topper13a16502018-03-19 00:56:09 +00002260def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002261
Craig Topper8104f262018-04-02 05:33:28 +00002262def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002263 let Latency = 16;
2264 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002265 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002266}
Craig Topper5a69a002018-03-21 06:28:42 +00002267def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2268 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002269
2270def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2271 let Latency = 16;
2272 let NumMicroOps = 3;
2273 let ResourceCycles = [2,1];
2274}
2275def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2276
Gadi Haber323f2e12017-10-24 20:19:47 +00002277def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2278 let Latency = 16;
2279 let NumMicroOps = 14;
2280 let ResourceCycles = [1,1,1,4,2,5];
2281}
2282def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2283
2284def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2285 let Latency = 16;
2286 let NumMicroOps = 16;
2287 let ResourceCycles = [16];
2288}
Craig Topper5a69a002018-03-21 06:28:42 +00002289def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002290
Craig Topper8104f262018-04-02 05:33:28 +00002291def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002292 let Latency = 17;
2293 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002294 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002295}
2296def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2297
2298def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2299 let Latency = 17;
2300 let NumMicroOps = 4;
2301 let ResourceCycles = [2,1,1];
2302}
Craig Topper5a69a002018-03-21 06:28:42 +00002303def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2304 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002305
Craig Topper8104f262018-04-02 05:33:28 +00002306def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002307 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002308 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002309 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002310}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002311def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2312 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002313
Gadi Haber323f2e12017-10-24 20:19:47 +00002314def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2315 let Latency = 18;
2316 let NumMicroOps = 8;
2317 let ResourceCycles = [1,1,1,5];
2318}
Craig Topper5a69a002018-03-21 06:28:42 +00002319def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002320def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002321
2322def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2323 let Latency = 18;
2324 let NumMicroOps = 11;
2325 let ResourceCycles = [2,1,1,3,1,3];
2326}
Craig Topper13a16502018-03-19 00:56:09 +00002327def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002328
Craig Topper8104f262018-04-02 05:33:28 +00002329def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002330 let Latency = 19;
2331 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002332 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002333}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002334def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002335 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002336
Gadi Haber323f2e12017-10-24 20:19:47 +00002337def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2338 let Latency = 19;
2339 let NumMicroOps = 5;
2340 let ResourceCycles = [2,1,1,1];
2341}
Craig Topper5a69a002018-03-21 06:28:42 +00002342def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002343
Gadi Haber323f2e12017-10-24 20:19:47 +00002344def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2345 let Latency = 20;
2346 let NumMicroOps = 1;
2347 let ResourceCycles = [1];
2348}
Craig Topper5a69a002018-03-21 06:28:42 +00002349def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2350 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002351 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002352
2353def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2354 let Latency = 20;
2355 let NumMicroOps = 5;
2356 let ResourceCycles = [2,1,1,1];
2357}
2358def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2359
2360def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2361 let Latency = 20;
2362 let NumMicroOps = 8;
2363 let ResourceCycles = [1,1,1,1,1,1,2];
2364}
Craig Topper5a69a002018-03-21 06:28:42 +00002365def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2366 "INSL",
2367 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002368
Craig Topper8104f262018-04-02 05:33:28 +00002369def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002370 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002371 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002372 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002373}
Craig Topper8104f262018-04-02 05:33:28 +00002374def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2375
2376def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2377 let Latency = 16;
2378 let NumMicroOps = 1;
2379 let ResourceCycles = [1,8];
2380}
2381def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002382
2383def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2384 let Latency = 21;
2385 let NumMicroOps = 2;
2386 let ResourceCycles = [1,1];
2387}
Craig Topper5a69a002018-03-21 06:28:42 +00002388def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2389 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002390
Craig Topper8104f262018-04-02 05:33:28 +00002391def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002392 let Latency = 21;
2393 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002394 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002395}
2396def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2397
2398def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2399 let Latency = 21;
2400 let NumMicroOps = 19;
2401 let ResourceCycles = [2,1,4,1,1,4,6];
2402}
2403def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2404
2405def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2406 let Latency = 22;
2407 let NumMicroOps = 18;
2408 let ResourceCycles = [1,1,16];
2409}
2410def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2411
Craig Topper8104f262018-04-02 05:33:28 +00002412def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002413 let Latency = 23;
2414 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002415 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002416}
2417def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2418
Craig Topper8104f262018-04-02 05:33:28 +00002419def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002420 let Latency = 23;
2421 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002422 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002423}
2424def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2425
Gadi Haber323f2e12017-10-24 20:19:47 +00002426def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2427 let Latency = 23;
2428 let NumMicroOps = 19;
2429 let ResourceCycles = [3,1,15];
2430}
Craig Topper391c6f92017-12-10 01:24:08 +00002431def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002432
2433def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2434 let Latency = 24;
2435 let NumMicroOps = 3;
2436 let ResourceCycles = [1,1,1];
2437}
Craig Topper5a69a002018-03-21 06:28:42 +00002438def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2439 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002440
Craig Topper8104f262018-04-02 05:33:28 +00002441def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002442 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002443 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002444 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002445}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002446def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2447 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002448
2449def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2450 let Latency = 26;
2451 let NumMicroOps = 2;
2452 let ResourceCycles = [1,1];
2453}
Craig Topper5a69a002018-03-21 06:28:42 +00002454def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002455 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002456
Craig Topper8104f262018-04-02 05:33:28 +00002457def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002458 let Latency = 27;
2459 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002460 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002461}
2462def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2463
2464def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2465 let Latency = 29;
2466 let NumMicroOps = 3;
2467 let ResourceCycles = [1,1,1];
2468}
Craig Topper5a69a002018-03-21 06:28:42 +00002469def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2470 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002471
Craig Topper8104f262018-04-02 05:33:28 +00002472def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002473 let Latency = 29;
2474 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002475 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002476}
2477def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2478
2479def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2480 let Latency = 22;
2481 let NumMicroOps = 7;
2482 let ResourceCycles = [1,3,2,1];
2483}
Craig Topper17a31182017-12-16 18:35:29 +00002484def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002485
2486def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2487 let Latency = 23;
2488 let NumMicroOps = 9;
2489 let ResourceCycles = [1,3,4,1];
2490}
Craig Topper17a31182017-12-16 18:35:29 +00002491def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002492
2493def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2494 let Latency = 24;
2495 let NumMicroOps = 9;
2496 let ResourceCycles = [1,5,2,1];
2497}
Craig Topper17a31182017-12-16 18:35:29 +00002498def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002499
2500def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2501 let Latency = 25;
2502 let NumMicroOps = 7;
2503 let ResourceCycles = [1,3,2,1];
2504}
Craig Topper17a31182017-12-16 18:35:29 +00002505def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2506 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002507
2508def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2509 let Latency = 26;
2510 let NumMicroOps = 9;
2511 let ResourceCycles = [1,5,2,1];
2512}
Craig Topper17a31182017-12-16 18:35:29 +00002513def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002514
2515def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2516 let Latency = 26;
2517 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002518 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002519}
Craig Topper17a31182017-12-16 18:35:29 +00002520def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002521
2522def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2523 let Latency = 27;
2524 let NumMicroOps = 9;
2525 let ResourceCycles = [1,5,2,1];
2526}
Craig Topper17a31182017-12-16 18:35:29 +00002527def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002528
Gadi Haber323f2e12017-10-24 20:19:47 +00002529def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2530 let Latency = 29;
2531 let NumMicroOps = 27;
2532 let ResourceCycles = [1,5,1,1,19];
2533}
2534def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2535
2536def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2537 let Latency = 30;
2538 let NumMicroOps = 28;
2539 let ResourceCycles = [1,6,1,1,19];
2540}
Craig Topper2d451e72018-03-18 08:38:06 +00002541def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002542
2543def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2544 let Latency = 31;
2545 let NumMicroOps = 31;
2546 let ResourceCycles = [8,1,21,1];
2547}
2548def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2549
Craig Topper8104f262018-04-02 05:33:28 +00002550def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2551 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002552 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002553 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002554}
2555def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2556
2557def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2558 let Latency = 34;
2559 let NumMicroOps = 8;
2560 let ResourceCycles = [2,2,2,1,1];
2561}
Craig Topper13a16502018-03-19 00:56:09 +00002562def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002563
2564def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2565 let Latency = 34;
2566 let NumMicroOps = 23;
2567 let ResourceCycles = [1,5,3,4,10];
2568}
Craig Topper5a69a002018-03-21 06:28:42 +00002569def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2570 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002571
2572def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2573 let Latency = 35;
2574 let NumMicroOps = 8;
2575 let ResourceCycles = [2,2,2,1,1];
2576}
Craig Topper13a16502018-03-19 00:56:09 +00002577def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002578
2579def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2580 let Latency = 35;
2581 let NumMicroOps = 23;
2582 let ResourceCycles = [1,5,2,1,4,10];
2583}
Craig Topper5a69a002018-03-21 06:28:42 +00002584def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2585 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002586
Craig Topper8104f262018-04-02 05:33:28 +00002587def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2588 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002589 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002590 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002591}
2592def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2593
2594def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2595 let Latency = 42;
2596 let NumMicroOps = 22;
2597 let ResourceCycles = [2,20];
2598}
Craig Topper2d451e72018-03-18 08:38:06 +00002599def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002600
2601def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2602 let Latency = 60;
2603 let NumMicroOps = 64;
2604 let ResourceCycles = [2,2,8,1,10,2,39];
2605}
2606def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002607
2608def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2609 let Latency = 63;
2610 let NumMicroOps = 88;
2611 let ResourceCycles = [4,4,31,1,2,1,45];
2612}
Craig Topper2d451e72018-03-18 08:38:06 +00002613def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002614
2615def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2616 let Latency = 63;
2617 let NumMicroOps = 90;
2618 let ResourceCycles = [4,2,33,1,2,1,47];
2619}
Craig Topper2d451e72018-03-18 08:38:06 +00002620def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002621
2622def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2623 let Latency = 75;
2624 let NumMicroOps = 15;
2625 let ResourceCycles = [6,3,6];
2626}
2627def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2628
2629def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2630 let Latency = 80;
2631 let NumMicroOps = 32;
2632 let ResourceCycles = [7,7,3,3,1,11];
2633}
2634def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2635
2636def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2637 let Latency = 115;
2638 let NumMicroOps = 100;
2639 let ResourceCycles = [9,9,11,8,1,11,21,30];
2640}
2641def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002642
2643} // SchedModel
2644