blob: e9215ad28ba9fb5a2aeb92ba3fed99c795827a9e [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 Pilgrimc0f654f2018-04-21 11:25:02 +0000768def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000769 "PDEP(32|64)rr",
770 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000771 "SHLD(16|32|64)rri8",
772 "SHRD(16|32|64)rri8",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000773 "(V?)CVTDQ2PS(Y?)rr",
774 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000775 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000776
777def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000778 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
Clement Courbet327fac42018-03-07 08:14:02 +0000782def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000783
784def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
785 let Latency = 3;
786 let NumMicroOps = 1;
787 let ResourceCycles = [1];
788}
Craig Topper5a69a002018-03-21 06:28:42 +0000789def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
790 "VBROADCASTSSYrr",
791 "VEXTRACTF128rr",
792 "VEXTRACTI128rr",
793 "VINSERTF128rr",
794 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000795 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000796 "VPBROADCASTDYrr",
797 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000798 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000799 "VPERM2F128rr",
800 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000801 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000802 "VPERMQYri",
803 "VPMOVSXBDYrr",
804 "VPMOVSXBQYrr",
805 "VPMOVSXBWYrr",
806 "VPMOVSXDQYrr",
807 "VPMOVSXWDYrr",
808 "VPMOVSXWQYrr",
809 "VPMOVZXBDYrr",
810 "VPMOVZXBQYrr",
811 "VPMOVZXBWYrr",
812 "VPMOVZXDQYrr",
813 "VPMOVZXWDYrr",
814 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000815
816def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
817 let Latency = 3;
818 let NumMicroOps = 1;
819 let ResourceCycles = [1];
820}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000821def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
822 "(V?)MULPS(Y?)rr",
823 "(V?)MULSDrr",
824 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000825
826def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000827 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000828 let NumMicroOps = 3;
829 let ResourceCycles = [3];
830}
Craig Topperb5f26592018-04-19 18:00:17 +0000831def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
832 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
833 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000834
835def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
836 let Latency = 3;
837 let NumMicroOps = 3;
838 let ResourceCycles = [2,1];
839}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000840def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
841 "VPSRAVD(Y?)rr",
842 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000843
844def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
845 let Latency = 3;
846 let NumMicroOps = 3;
847 let ResourceCycles = [2,1];
848}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000849def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000850 "(V?)PHADDD(Y?)rr",
851 "(V?)PHADDSW(Y?)rr",
852 "(V?)PHADDW(Y?)rr",
853 "(V?)PHSUBD(Y?)rr",
854 "(V?)PHSUBSW(Y?)rr",
855 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000856
857def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
858 let Latency = 3;
859 let NumMicroOps = 3;
860 let ResourceCycles = [2,1];
861}
Craig Topper5a69a002018-03-21 06:28:42 +0000862def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
863 "MMX_PACKSSWBirr",
864 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000865
866def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
867 let Latency = 3;
868 let NumMicroOps = 3;
869 let ResourceCycles = [1,2];
870}
871def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
872
873def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
874 let Latency = 3;
875 let NumMicroOps = 3;
876 let ResourceCycles = [1,2];
877}
Craig Topper5a69a002018-03-21 06:28:42 +0000878def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
879 "RCL(8|16|32|64)ri",
880 "RCR(8|16|32|64)r1",
881 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000882
883def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
884 let Latency = 3;
885 let NumMicroOps = 3;
886 let ResourceCycles = [2,1];
887}
Craig Topper5a69a002018-03-21 06:28:42 +0000888def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
889 "ROR(8|16|32|64)rCL",
890 "SAR(8|16|32|64)rCL",
891 "SHL(8|16|32|64)rCL",
892 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000893
894def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
895 let Latency = 3;
896 let NumMicroOps = 4;
897 let ResourceCycles = [1,1,1,1];
898}
899def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
900
901def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
902 let Latency = 3;
903 let NumMicroOps = 4;
904 let ResourceCycles = [1,1,1,1];
905}
Craig Topper5a69a002018-03-21 06:28:42 +0000906def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
907 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
910 let Latency = 4;
911 let NumMicroOps = 2;
912 let ResourceCycles = [1,1];
913}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000914def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
915 "(V?)CVTSD2SIrr",
916 "(V?)CVTSS2SI64rr",
917 "(V?)CVTSS2SIrr",
918 "(V?)CVTTSD2SI64rr",
919 "(V?)CVTTSD2SIrr",
920 "(V?)CVTTSS2SI64rr",
921 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000922
923def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
924 let Latency = 4;
925 let NumMicroOps = 2;
926 let ResourceCycles = [1,1];
927}
Craig Topper5a69a002018-03-21 06:28:42 +0000928def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
929 "VPSLLDYrr",
930 "VPSLLQYrr",
931 "VPSLLWYrr",
932 "VPSRADYrr",
933 "VPSRAWYrr",
934 "VPSRLDYrr",
935 "VPSRLQYrr",
936 "VPSRLWYrr",
937 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000938
939def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
940 let Latency = 4;
941 let NumMicroOps = 2;
942 let ResourceCycles = [1,1];
943}
944def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
945
946def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
947 let Latency = 4;
948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000951def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000952def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000953 "MMX_CVTPI2PDirr",
954 "MMX_CVTPS2PIirr",
955 "MMX_CVTTPD2PIirr",
956 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000957 "(V?)CVTDQ2PDrr",
958 "(V?)CVTPD2DQrr",
959 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000960 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000961 "(V?)CVTSD2SSrr",
962 "(V?)CVTSI642SDrr",
963 "(V?)CVTSI2SDrr",
964 "(V?)CVTSI2SSrr",
965 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000966
967def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
968 let Latency = 4;
969 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000970 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000971}
Craig Topper5a69a002018-03-21 06:28:42 +0000972def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000973
974def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
975 let Latency = 4;
976 let NumMicroOps = 3;
977 let ResourceCycles = [1,1,1];
978}
979def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
980
981def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
982 let Latency = 4;
983 let NumMicroOps = 3;
984 let ResourceCycles = [1,1,1];
985}
Craig Topper5a69a002018-03-21 06:28:42 +0000986def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
987 "ISTT_FP32m",
988 "ISTT_FP64m",
989 "IST_F16m",
990 "IST_F32m",
991 "IST_FP16m",
992 "IST_FP32m",
993 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000994 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000995
996def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
997 let Latency = 4;
998 let NumMicroOps = 4;
999 let ResourceCycles = [4];
1000}
1001def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
1002
1003def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
1004 let Latency = 4;
1005 let NumMicroOps = 4;
1006 let ResourceCycles = [1,3];
1007}
1008def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
1009
1010def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
1011 let Latency = 5;
1012 let NumMicroOps = 1;
1013 let ResourceCycles = [1];
1014}
Craig Topper5a69a002018-03-21 06:28:42 +00001015def: InstRW<[BWWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
1016 "MMX_PMADDWDirr",
1017 "MMX_PMULHRSWrr",
1018 "MMX_PMULHUWirr",
1019 "MMX_PMULHWirr",
1020 "MMX_PMULLWirr",
1021 "MMX_PMULUDQirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001022 "(V?)PCMPGTQ(Y?)rr",
1023 "(V?)PHMINPOSUWrr",
1024 "(V?)PMADDUBSW(Y?)rr",
1025 "(V?)PMADDWD(Y?)rr",
1026 "(V?)PMULDQ(Y?)rr",
1027 "(V?)PMULHRSW(Y?)rr",
1028 "(V?)PMULHUW(Y?)rr",
1029 "(V?)PMULHW(Y?)rr",
1030 "(V?)PMULLW(Y?)rr",
1031 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001032 "(V?)RCPPSr",
1033 "(V?)RCPSSr",
1034 "(V?)RSQRTPSr",
1035 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001036
Gadi Haber323f2e12017-10-24 20:19:47 +00001037def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
1038 let Latency = 5;
1039 let NumMicroOps = 1;
1040 let ResourceCycles = [1];
1041}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001042def: InstRW<[BWWriteResGroup49], (instregex "MMX_MOVD64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001043 "MMX_MOVD64to64rm",
1044 "MMX_MOVQ64rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001045 "MOVSX(16|32|64)rm16",
1046 "MOVSX(16|32|64)rm32",
1047 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001048 "MOVZX(16|32|64)rm16",
1049 "MOVZX(16|32|64)rm8",
1050 "PREFETCHNTA",
1051 "PREFETCHT0",
1052 "PREFETCHT1",
1053 "PREFETCHT2",
1054 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001055 "(V?)LDDQUrm",
1056 "(V?)MOV64toPQIrm",
1057 "(V?)MOVAPDrm",
1058 "(V?)MOVAPSrm",
1059 "(V?)MOVDDUPrm",
1060 "(V?)MOVDI2PDIrm",
1061 "(V?)MOVDQArm",
1062 "(V?)MOVDQUrm",
1063 "(V?)MOVNTDQArm",
1064 "(V?)MOVQI2PQIrm",
1065 "(V?)MOVSDrm",
1066 "(V?)MOVSHDUPrm",
1067 "(V?)MOVSLDUPrm",
1068 "(V?)MOVSSrm",
1069 "(V?)MOVUPDrm",
1070 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001071 "VPBROADCASTDrm",
1072 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001073
1074def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1075 let Latency = 5;
1076 let NumMicroOps = 3;
1077 let ResourceCycles = [1,2];
1078}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001079def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1080 "(V?)HADDPD(Y?)rr",
1081 "(V?)HADDPS(Y?)rr",
1082 "(V?)HSUBPD(Y?)rr",
1083 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001084
1085def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1086 let Latency = 5;
1087 let NumMicroOps = 3;
1088 let ResourceCycles = [1,1,1];
1089}
1090def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1091
1092def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001093 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001094 let NumMicroOps = 3;
1095 let ResourceCycles = [1,1,1];
1096}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001097def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001098
1099def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1100 let Latency = 5;
1101 let NumMicroOps = 4;
1102 let ResourceCycles = [1,1,1,1];
1103}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001104def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1105 "VMASKMOVPS(Y?)mr",
1106 "VPMASKMOVD(Y?)mr",
1107 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001108
1109def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1110 let Latency = 5;
1111 let NumMicroOps = 5;
1112 let ResourceCycles = [1,4];
1113}
1114def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1115
1116def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1117 let Latency = 5;
1118 let NumMicroOps = 5;
1119 let ResourceCycles = [1,4];
1120}
1121def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1122
1123def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1124 let Latency = 5;
1125 let NumMicroOps = 5;
1126 let ResourceCycles = [2,3];
1127}
Craig Topper5a69a002018-03-21 06:28:42 +00001128def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001129
1130def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1131 let Latency = 5;
1132 let NumMicroOps = 6;
1133 let ResourceCycles = [1,1,4];
1134}
Craig Topper5a69a002018-03-21 06:28:42 +00001135def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001136
1137def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1138 let Latency = 6;
1139 let NumMicroOps = 1;
1140 let ResourceCycles = [1];
1141}
Craig Topper5a69a002018-03-21 06:28:42 +00001142def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1143 "LD_F64m",
1144 "LD_F80m",
1145 "VBROADCASTF128",
1146 "VBROADCASTI128",
1147 "VBROADCASTSDYrm",
1148 "VBROADCASTSSYrm",
1149 "VLDDQUYrm",
1150 "VMOVAPDYrm",
1151 "VMOVAPSYrm",
1152 "VMOVDDUPYrm",
1153 "VMOVDQAYrm",
1154 "VMOVDQUYrm",
1155 "VMOVNTDQAYrm",
1156 "VMOVSHDUPYrm",
1157 "VMOVSLDUPYrm",
1158 "VMOVUPDYrm",
1159 "VMOVUPSYrm",
1160 "VPBROADCASTDYrm",
1161 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001162 "(V?)ROUNDPD(Y?)r",
1163 "(V?)ROUNDPS(Y?)r",
1164 "(V?)ROUNDSDr",
1165 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001166
1167def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1168 let Latency = 6;
1169 let NumMicroOps = 2;
1170 let ResourceCycles = [1,1];
1171}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001172def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001173 "MMX_PSLLQrm",
1174 "MMX_PSLLWrm",
1175 "MMX_PSRADrm",
1176 "MMX_PSRAWrm",
1177 "MMX_PSRLDrm",
1178 "MMX_PSRLQrm",
1179 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001180 "VCVTPH2PS(Y?)rm",
1181 "(V?)CVTPS2PDrm",
1182 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001183 "VPSLLVQrm",
1184 "VPSRLVQrm",
1185 "VTESTPDrm",
1186 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001187
1188def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1189 let Latency = 6;
1190 let NumMicroOps = 2;
1191 let ResourceCycles = [1,1];
1192}
Craig Topper5a69a002018-03-21 06:28:42 +00001193def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1194 "VCVTPD2DQYrr",
1195 "VCVTPD2PSYrr",
1196 "VCVTPS2PHYrr",
1197 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001198
1199def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1200 let Latency = 6;
1201 let NumMicroOps = 2;
1202 let ResourceCycles = [1,1];
1203}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001204def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001205 "MMX_PINSRWrm",
1206 "MMX_PSHUFBrm",
1207 "MMX_PSHUFWmi",
1208 "MMX_PUNPCKHBWirm",
1209 "MMX_PUNPCKHDQirm",
1210 "MMX_PUNPCKHWDirm",
1211 "MMX_PUNPCKLBWirm",
1212 "MMX_PUNPCKLDQirm",
1213 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001214 "(V?)INSERTPSrm",
1215 "(V?)MOVHPDrm",
1216 "(V?)MOVHPSrm",
1217 "(V?)MOVLPDrm",
1218 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001219 "(V?)PACKSSDWrm",
1220 "(V?)PACKSSWBrm",
1221 "(V?)PACKUSDWrm",
1222 "(V?)PACKUSWBrm",
1223 "(V?)PALIGNRrmi",
1224 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001225 "VPERMILPDmi",
1226 "VPERMILPDrm",
1227 "VPERMILPSmi",
1228 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001229 "(V?)PINSRBrm",
1230 "(V?)PINSRDrm",
1231 "(V?)PINSRQrm",
1232 "(V?)PINSRWrm",
1233 "(V?)PMOVSXBDrm",
1234 "(V?)PMOVSXBQrm",
1235 "(V?)PMOVSXBWrm",
1236 "(V?)PMOVSXDQrm",
1237 "(V?)PMOVSXWDrm",
1238 "(V?)PMOVSXWQrm",
1239 "(V?)PMOVZXBDrm",
1240 "(V?)PMOVZXBQrm",
1241 "(V?)PMOVZXBWrm",
1242 "(V?)PMOVZXDQrm",
1243 "(V?)PMOVZXWDrm",
1244 "(V?)PMOVZXWQrm",
1245 "(V?)PSHUFBrm",
1246 "(V?)PSHUFDmi",
1247 "(V?)PSHUFHWmi",
1248 "(V?)PSHUFLWmi",
1249 "(V?)PUNPCKHBWrm",
1250 "(V?)PUNPCKHDQrm",
1251 "(V?)PUNPCKHQDQrm",
1252 "(V?)PUNPCKHWDrm",
1253 "(V?)PUNPCKLBWrm",
1254 "(V?)PUNPCKLDQrm",
1255 "(V?)PUNPCKLQDQrm",
1256 "(V?)PUNPCKLWDrm",
1257 "(V?)SHUFPDrmi",
1258 "(V?)SHUFPSrmi",
1259 "(V?)UNPCKHPDrm",
1260 "(V?)UNPCKHPSrm",
1261 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001262 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001263
1264def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1265 let Latency = 6;
1266 let NumMicroOps = 2;
1267 let ResourceCycles = [1,1];
1268}
Craig Topper5a69a002018-03-21 06:28:42 +00001269def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1270 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001271
1272def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1273 let Latency = 6;
1274 let NumMicroOps = 2;
1275 let ResourceCycles = [1,1];
1276}
Craig Topperdfccafe2018-04-18 06:41:25 +00001277def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001278def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1279 ADCX32rm, ADCX64rm,
1280 ADOX32rm, ADOX64rm,
1281 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001282
1283def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1284 let Latency = 6;
1285 let NumMicroOps = 2;
1286 let ResourceCycles = [1,1];
1287}
Craig Topper5a69a002018-03-21 06:28:42 +00001288def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1289 "BLSI(32|64)rm",
1290 "BLSMSK(32|64)rm",
1291 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001292 "MMX_PABS(B|D|W)rm",
1293 "MMX_PADD(B|D|Q|W)irm",
1294 "MMX_PADDS(B|W)irm",
1295 "MMX_PADDUS(B|W)irm",
1296 "MMX_PAVG(B|W)irm",
1297 "MMX_PCMPEQ(B|D|W)irm",
1298 "MMX_PCMPGT(B|D|W)irm",
1299 "MMX_P(MAX|MIN)SWirm",
1300 "MMX_P(MAX|MIN)UBirm",
1301 "MMX_PSIGN(B|D|W)rm",
1302 "MMX_PSUB(B|D|Q|W)irm",
1303 "MMX_PSUBS(B|W)irm",
1304 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001305 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001306 "(V?)PABSBrm",
1307 "(V?)PABSDrm",
1308 "(V?)PABSWrm",
1309 "(V?)PADDBrm",
1310 "(V?)PADDDrm",
1311 "(V?)PADDQrm",
1312 "(V?)PADDSBrm",
1313 "(V?)PADDSWrm",
1314 "(V?)PADDUSBrm",
1315 "(V?)PADDUSWrm",
1316 "(V?)PADDWrm",
1317 "(V?)PAVGBrm",
1318 "(V?)PAVGWrm",
1319 "(V?)PCMPEQBrm",
1320 "(V?)PCMPEQDrm",
1321 "(V?)PCMPEQQrm",
1322 "(V?)PCMPEQWrm",
1323 "(V?)PCMPGTBrm",
1324 "(V?)PCMPGTDrm",
1325 "(V?)PCMPGTWrm",
1326 "(V?)PMAXSBrm",
1327 "(V?)PMAXSDrm",
1328 "(V?)PMAXSWrm",
1329 "(V?)PMAXUBrm",
1330 "(V?)PMAXUDrm",
1331 "(V?)PMAXUWrm",
1332 "(V?)PMINSBrm",
1333 "(V?)PMINSDrm",
1334 "(V?)PMINSWrm",
1335 "(V?)PMINUBrm",
1336 "(V?)PMINUDrm",
1337 "(V?)PMINUWrm",
1338 "(V?)PSIGNBrm",
1339 "(V?)PSIGNDrm",
1340 "(V?)PSIGNWrm",
1341 "(V?)PSUBBrm",
1342 "(V?)PSUBDrm",
1343 "(V?)PSUBQrm",
1344 "(V?)PSUBSBrm",
1345 "(V?)PSUBSWrm",
1346 "(V?)PSUBUSBrm",
1347 "(V?)PSUBUSWrm",
1348 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001349
1350def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1351 let Latency = 6;
1352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001355def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001356 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001357 "VINSERTF128rm",
1358 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001359 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001360
1361def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1362 let Latency = 6;
1363 let NumMicroOps = 2;
1364 let ResourceCycles = [1,1];
1365}
Craig Topper2d451e72018-03-18 08:38:06 +00001366def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001367def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001368
1369def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1370 let Latency = 6;
1371 let NumMicroOps = 4;
1372 let ResourceCycles = [1,1,2];
1373}
Craig Topper5a69a002018-03-21 06:28:42 +00001374def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1375 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001376
1377def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1378 let Latency = 6;
1379 let NumMicroOps = 4;
1380 let ResourceCycles = [1,1,1,1];
1381}
1382def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1383
1384def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1385 let Latency = 6;
1386 let NumMicroOps = 4;
1387 let ResourceCycles = [1,1,1,1];
1388}
Craig Topper5a69a002018-03-21 06:28:42 +00001389def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1390 "BTR(16|32|64)mi8",
1391 "BTS(16|32|64)mi8",
1392 "SAR(8|16|32|64)m1",
1393 "SAR(8|16|32|64)mi",
1394 "SHL(8|16|32|64)m1",
1395 "SHL(8|16|32|64)mi",
1396 "SHR(8|16|32|64)m1",
1397 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001398
1399def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1400 let Latency = 6;
1401 let NumMicroOps = 4;
1402 let ResourceCycles = [1,1,1,1];
1403}
Craig Topperf0d04262018-04-06 16:16:48 +00001404def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1405 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001406
1407def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1408 let Latency = 6;
1409 let NumMicroOps = 6;
1410 let ResourceCycles = [1,5];
1411}
1412def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1413
Gadi Haber323f2e12017-10-24 20:19:47 +00001414def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1415 let Latency = 7;
1416 let NumMicroOps = 2;
1417 let ResourceCycles = [1,1];
1418}
Craig Topper5a69a002018-03-21 06:28:42 +00001419def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1420 "VPSLLQYrm",
1421 "VPSLLVQYrm",
1422 "VPSLLWYrm",
1423 "VPSRADYrm",
1424 "VPSRAWYrm",
1425 "VPSRLDYrm",
1426 "VPSRLQYrm",
1427 "VPSRLVQYrm",
1428 "VPSRLWYrm",
1429 "VTESTPDYrm",
1430 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001431
1432def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1433 let Latency = 7;
1434 let NumMicroOps = 2;
1435 let ResourceCycles = [1,1];
1436}
Craig Topper5a69a002018-03-21 06:28:42 +00001437def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1438 "FCOM64m",
1439 "FCOMP32m",
1440 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001441
1442def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1443 let Latency = 7;
1444 let NumMicroOps = 2;
1445 let ResourceCycles = [1,1];
1446}
Craig Topper5a69a002018-03-21 06:28:42 +00001447def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1448 "VANDNPSYrm",
1449 "VANDPDYrm",
1450 "VANDPSYrm",
1451 "VORPDYrm",
1452 "VORPSYrm",
1453 "VPACKSSDWYrm",
1454 "VPACKSSWBYrm",
1455 "VPACKUSDWYrm",
1456 "VPACKUSWBYrm",
1457 "VPALIGNRYrmi",
1458 "VPBLENDWYrmi",
1459 "VPERMILPDYmi",
1460 "VPERMILPDYrm",
1461 "VPERMILPSYmi",
1462 "VPERMILPSYrm",
1463 "VPSHUFBYrm",
1464 "VPSHUFDYmi",
1465 "VPSHUFHWYmi",
1466 "VPSHUFLWYmi",
1467 "VPUNPCKHBWYrm",
1468 "VPUNPCKHDQYrm",
1469 "VPUNPCKHQDQYrm",
1470 "VPUNPCKHWDYrm",
1471 "VPUNPCKLBWYrm",
1472 "VPUNPCKLDQYrm",
1473 "VPUNPCKLQDQYrm",
1474 "VPUNPCKLWDYrm",
1475 "VSHUFPDYrmi",
1476 "VSHUFPSYrmi",
1477 "VUNPCKHPDYrm",
1478 "VUNPCKHPSYrm",
1479 "VUNPCKLPDYrm",
1480 "VUNPCKLPSYrm",
1481 "VXORPDYrm",
1482 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001483
1484def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1485 let Latency = 7;
1486 let NumMicroOps = 2;
1487 let ResourceCycles = [1,1];
1488}
Craig Topper5a69a002018-03-21 06:28:42 +00001489def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1490 "VPABSDYrm",
1491 "VPABSWYrm",
1492 "VPADDBYrm",
1493 "VPADDDYrm",
1494 "VPADDQYrm",
1495 "VPADDSBYrm",
1496 "VPADDSWYrm",
1497 "VPADDUSBYrm",
1498 "VPADDUSWYrm",
1499 "VPADDWYrm",
1500 "VPAVGBYrm",
1501 "VPAVGWYrm",
1502 "VPCMPEQBYrm",
1503 "VPCMPEQDYrm",
1504 "VPCMPEQQYrm",
1505 "VPCMPEQWYrm",
1506 "VPCMPGTBYrm",
1507 "VPCMPGTDYrm",
1508 "VPCMPGTWYrm",
1509 "VPMAXSBYrm",
1510 "VPMAXSDYrm",
1511 "VPMAXSWYrm",
1512 "VPMAXUBYrm",
1513 "VPMAXUDYrm",
1514 "VPMAXUWYrm",
1515 "VPMINSBYrm",
1516 "VPMINSDYrm",
1517 "VPMINSWYrm",
1518 "VPMINUBYrm",
1519 "VPMINUDYrm",
1520 "VPMINUWYrm",
1521 "VPSIGNBYrm",
1522 "VPSIGNDYrm",
1523 "VPSIGNWYrm",
1524 "VPSUBBYrm",
1525 "VPSUBDYrm",
1526 "VPSUBQYrm",
1527 "VPSUBSBYrm",
1528 "VPSUBSWYrm",
1529 "VPSUBUSBYrm",
1530 "VPSUBUSWYrm",
1531 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001532
1533def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1534 let Latency = 7;
1535 let NumMicroOps = 2;
1536 let ResourceCycles = [1,1];
1537}
Craig Topper5a69a002018-03-21 06:28:42 +00001538def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1539 "VBLENDPSYrmi",
1540 "VPANDNYrm",
1541 "VPANDYrm",
1542 "VPBLENDDYrmi",
1543 "VPORYrm",
1544 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001545
1546def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1547 let Latency = 7;
1548 let NumMicroOps = 3;
1549 let ResourceCycles = [1,2];
1550}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001551def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001552
1553def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1554 let Latency = 7;
1555 let NumMicroOps = 3;
1556 let ResourceCycles = [2,1];
1557}
Craig Topper5a69a002018-03-21 06:28:42 +00001558def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1559 "BLENDVPSrm0",
1560 "MMX_PACKSSDWirm",
1561 "MMX_PACKSSWBirm",
1562 "MMX_PACKUSWBirm",
1563 "PBLENDVBrm0",
1564 "VBLENDVPDrm",
1565 "VBLENDVPSrm",
1566 "VMASKMOVPDrm",
1567 "VMASKMOVPSrm",
1568 "VPBLENDVBrm",
1569 "VPMASKMOVDrm",
1570 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001571
1572def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1573 let Latency = 7;
1574 let NumMicroOps = 3;
1575 let ResourceCycles = [1,2];
1576}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001577def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1578 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001579
1580def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1581 let Latency = 7;
1582 let NumMicroOps = 3;
1583 let ResourceCycles = [1,1,1];
1584}
Craig Topper5a69a002018-03-21 06:28:42 +00001585def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1586 "PSLLQrm",
1587 "PSLLWrm",
1588 "PSRADrm",
1589 "PSRAWrm",
1590 "PSRLDrm",
1591 "PSRLQrm",
1592 "PSRLWrm",
1593 "PTESTrm",
1594 "VPSLLDrm",
1595 "VPSLLQrm",
1596 "VPSLLWrm",
1597 "VPSRADrm",
1598 "VPSRAWrm",
1599 "VPSRLDrm",
1600 "VPSRLQrm",
1601 "VPSRLWrm",
1602 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001603
1604def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1605 let Latency = 7;
1606 let NumMicroOps = 3;
1607 let ResourceCycles = [1,1,1];
1608}
1609def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1610
1611def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1612 let Latency = 7;
1613 let NumMicroOps = 3;
1614 let ResourceCycles = [1,1,1];
1615}
Craig Topper5a69a002018-03-21 06:28:42 +00001616def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001617
1618def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1619 let Latency = 7;
1620 let NumMicroOps = 3;
1621 let ResourceCycles = [1,1,1];
1622}
Craig Topper5a69a002018-03-21 06:28:42 +00001623def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1624 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001625
Gadi Haber323f2e12017-10-24 20:19:47 +00001626def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1627 let Latency = 7;
1628 let NumMicroOps = 3;
1629 let ResourceCycles = [1,1,1];
1630}
Craig Topperf4cd9082018-01-19 05:47:32 +00001631def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001632
1633def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1634 let Latency = 7;
1635 let NumMicroOps = 5;
1636 let ResourceCycles = [1,1,1,2];
1637}
Craig Topper5a69a002018-03-21 06:28:42 +00001638def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1639 "ROL(8|16|32|64)mi",
1640 "ROR(8|16|32|64)m1",
1641 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001642
1643def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1644 let Latency = 7;
1645 let NumMicroOps = 5;
1646 let ResourceCycles = [1,1,1,2];
1647}
Craig Topper5a69a002018-03-21 06:28:42 +00001648def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001649
1650def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1651 let Latency = 7;
1652 let NumMicroOps = 5;
1653 let ResourceCycles = [1,1,1,1,1];
1654}
Craig Topper5a69a002018-03-21 06:28:42 +00001655def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1656 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001657
1658def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1659 let Latency = 7;
1660 let NumMicroOps = 7;
1661 let ResourceCycles = [2,2,1,2];
1662}
Craig Topper2d451e72018-03-18 08:38:06 +00001663def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001664
1665def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1666 let Latency = 8;
1667 let NumMicroOps = 2;
1668 let ResourceCycles = [1,1];
1669}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001670def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001671 "MMX_CVTPS2PIirm",
1672 "MMX_CVTTPS2PIirm",
1673 "PDEP(32|64)rm",
1674 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001675 "(V?)ADDPDrm",
1676 "(V?)ADDPSrm",
1677 "(V?)ADDSDrm",
1678 "(V?)ADDSSrm",
1679 "(V?)ADDSUBPDrm",
1680 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001681 "(V?)CVTDQ2PSrm",
1682 "(V?)CVTPS2DQrm",
1683 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001684 "(V?)SUBPDrm",
1685 "(V?)SUBPSrm",
1686 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001687 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001688
1689def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001690 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001691 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001692 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001693}
Craig Topperf846e2d2018-04-19 05:34:05 +00001694def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001695
Craig Topperf846e2d2018-04-19 05:34:05 +00001696def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1697 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001698 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001699 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001700}
Craig Topper5a69a002018-03-21 06:28:42 +00001701def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001702
Gadi Haber323f2e12017-10-24 20:19:47 +00001703def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1704 let Latency = 8;
1705 let NumMicroOps = 2;
1706 let ResourceCycles = [1,1];
1707}
Craig Topper5a69a002018-03-21 06:28:42 +00001708def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1709 "VPMOVSXBQYrm",
1710 "VPMOVSXBWYrm",
1711 "VPMOVSXDQYrm",
1712 "VPMOVSXWDYrm",
1713 "VPMOVSXWQYrm",
1714 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001715
1716def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1717 let Latency = 8;
1718 let NumMicroOps = 2;
1719 let ResourceCycles = [1,1];
1720}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001721def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1722 "(V?)MULPSrm",
1723 "(V?)MULSDrm",
1724 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001725
1726def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1727 let Latency = 8;
1728 let NumMicroOps = 3;
1729 let ResourceCycles = [2,1];
1730}
Craig Topper5a69a002018-03-21 06:28:42 +00001731def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1732 "VBLENDVPSYrm",
1733 "VMASKMOVPDYrm",
1734 "VMASKMOVPSYrm",
1735 "VPBLENDVBYrm",
1736 "VPMASKMOVDYrm",
1737 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001738
1739def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1740 let Latency = 8;
1741 let NumMicroOps = 4;
1742 let ResourceCycles = [2,1,1];
1743}
Craig Topper5a69a002018-03-21 06:28:42 +00001744def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1745 "VPSRAVDrm",
1746 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001747
1748def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1749 let Latency = 8;
1750 let NumMicroOps = 4;
1751 let ResourceCycles = [2,1,1];
1752}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001753def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001754 "(V?)PHADDDrm",
1755 "(V?)PHADDSWrm",
1756 "(V?)PHADDWrm",
1757 "(V?)PHSUBDrm",
1758 "(V?)PHSUBSWrm",
1759 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001760
1761def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1762 let Latency = 8;
1763 let NumMicroOps = 5;
1764 let ResourceCycles = [1,1,1,2];
1765}
Craig Topper5a69a002018-03-21 06:28:42 +00001766def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1767 "RCL(8|16|32|64)mi",
1768 "RCR(8|16|32|64)m1",
1769 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001770
1771def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1772 let Latency = 8;
1773 let NumMicroOps = 5;
1774 let ResourceCycles = [1,1,2,1];
1775}
Craig Topper13a16502018-03-19 00:56:09 +00001776def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001777
1778def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1779 let Latency = 8;
1780 let NumMicroOps = 6;
1781 let ResourceCycles = [1,1,1,3];
1782}
Craig Topper9f834812018-04-01 21:54:24 +00001783def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001784
1785def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1786 let Latency = 8;
1787 let NumMicroOps = 6;
1788 let ResourceCycles = [1,1,1,2,1];
1789}
Craig Topper9f834812018-04-01 21:54:24 +00001790def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001791 "CMPXCHG(8|16|32|64)rm",
1792 "ROL(8|16|32|64)mCL",
1793 "SAR(8|16|32|64)mCL",
1794 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001795 "SHL(8|16|32|64)mCL",
1796 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001797def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1798 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001799
1800def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1801 let Latency = 9;
1802 let NumMicroOps = 2;
1803 let ResourceCycles = [1,1];
1804}
Craig Topper5a69a002018-03-21 06:28:42 +00001805def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1806 "ADD_F64m",
1807 "ILD_F16m",
1808 "ILD_F32m",
1809 "ILD_F64m",
1810 "SUBR_F32m",
1811 "SUBR_F64m",
1812 "SUB_F32m",
1813 "SUB_F64m",
1814 "VADDPDYrm",
1815 "VADDPSYrm",
1816 "VADDSUBPDYrm",
1817 "VADDSUBPSYrm",
1818 "VCMPPDYrmi",
1819 "VCMPPSYrmi",
1820 "VCVTDQ2PSYrm",
1821 "VCVTPS2DQYrm",
1822 "VCVTTPS2DQYrm",
1823 "VMAX(C?)PDYrm",
1824 "VMAX(C?)PSYrm",
1825 "VMIN(C?)PDYrm",
1826 "VMIN(C?)PSYrm",
1827 "VSUBPDYrm",
1828 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001829
1830def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1831 let Latency = 9;
1832 let NumMicroOps = 2;
1833 let ResourceCycles = [1,1];
1834}
Craig Topper5a69a002018-03-21 06:28:42 +00001835def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1836 "VPERM2I128rm",
1837 "VPERMDYrm",
1838 "VPERMPDYmi",
1839 "VPERMPSYrm",
1840 "VPERMQYmi",
1841 "VPMOVZXBDYrm",
1842 "VPMOVZXBQYrm",
1843 "VPMOVZXBWYrm",
1844 "VPMOVZXDQYrm",
1845 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
1847def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1848 let Latency = 9;
1849 let NumMicroOps = 2;
1850 let ResourceCycles = [1,1];
1851}
Craig Topper5a69a002018-03-21 06:28:42 +00001852def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1853 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001854
1855def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1856 let Latency = 9;
1857 let NumMicroOps = 3;
1858 let ResourceCycles = [1,1,1];
1859}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001860def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001861
1862def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1863 let Latency = 9;
1864 let NumMicroOps = 3;
1865 let ResourceCycles = [1,1,1];
1866}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001867def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1868 "(V?)CVTSD2SIrm",
1869 "(V?)CVTSS2SI64rm",
1870 "(V?)CVTSS2SIrm",
1871 "(V?)CVTTSD2SI64rm",
1872 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001873 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001874 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001875
1876def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1877 let Latency = 9;
1878 let NumMicroOps = 3;
1879 let ResourceCycles = [1,1,1];
1880}
1881def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1882
1883def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1884 let Latency = 9;
1885 let NumMicroOps = 3;
1886 let ResourceCycles = [1,1,1];
1887}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001888def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001889def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001890 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001891 "CVTTPD2DQrm",
1892 "MMX_CVTPD2PIirm",
1893 "MMX_CVTPI2PDirm",
1894 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001895 "(V?)CVTDQ2PDrm",
1896 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001897
1898def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1899 let Latency = 9;
1900 let NumMicroOps = 3;
1901 let ResourceCycles = [1,1,1];
1902}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001903def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1904 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001905
1906def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1907 let Latency = 9;
1908 let NumMicroOps = 4;
1909 let ResourceCycles = [2,1,1];
1910}
Craig Topper5a69a002018-03-21 06:28:42 +00001911def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1912 "VPSRAVDYrm",
1913 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001914
1915def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1916 let Latency = 9;
1917 let NumMicroOps = 4;
1918 let ResourceCycles = [2,1,1];
1919}
Craig Topper5a69a002018-03-21 06:28:42 +00001920def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1921 "VPHADDSWYrm",
1922 "VPHADDWYrm",
1923 "VPHSUBDYrm",
1924 "VPHSUBSWYrm",
1925 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001926
1927def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1928 let Latency = 9;
1929 let NumMicroOps = 4;
1930 let ResourceCycles = [1,1,1,1];
1931}
Craig Topper5a69a002018-03-21 06:28:42 +00001932def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1933 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001934
1935def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1936 let Latency = 9;
1937 let NumMicroOps = 5;
1938 let ResourceCycles = [1,1,3];
1939}
1940def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1941
1942def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1943 let Latency = 9;
1944 let NumMicroOps = 5;
1945 let ResourceCycles = [1,2,1,1];
1946}
Craig Topper5a69a002018-03-21 06:28:42 +00001947def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1948 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001949
Gadi Haber323f2e12017-10-24 20:19:47 +00001950def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1951 let Latency = 10;
1952 let NumMicroOps = 2;
1953 let ResourceCycles = [1,1];
1954}
Craig Topper5a69a002018-03-21 06:28:42 +00001955def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1956 "MMX_PMADDWDirm",
1957 "MMX_PMULHRSWrm",
1958 "MMX_PMULHUWirm",
1959 "MMX_PMULHWirm",
1960 "MMX_PMULLWirm",
1961 "MMX_PMULUDQirm",
1962 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001963 "(V?)PCMPGTQrm",
1964 "(V?)PHMINPOSUWrm",
1965 "(V?)PMADDUBSWrm",
1966 "(V?)PMADDWDrm",
1967 "(V?)PMULDQrm",
1968 "(V?)PMULHRSWrm",
1969 "(V?)PMULHUWrm",
1970 "(V?)PMULHWrm",
1971 "(V?)PMULLWrm",
1972 "(V?)PMULUDQrm",
1973 "(V?)PSADBWrm",
1974 "(V?)RCPPSm",
1975 "(V?)RCPSSm",
1976 "(V?)RSQRTPSm",
1977 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001978
1979def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1980 let Latency = 10;
1981 let NumMicroOps = 2;
1982 let ResourceCycles = [1,1];
1983}
Craig Topperf82867c2017-12-13 23:11:30 +00001984def: InstRW<[BWWriteResGroup116],
1985 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1986 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001987
1988def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1989 let Latency = 10;
1990 let NumMicroOps = 3;
1991 let ResourceCycles = [2,1];
1992}
Craig Topper5a69a002018-03-21 06:28:42 +00001993def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1994 "FICOM32m",
1995 "FICOMP16m",
1996 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001997
1998def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1999 let Latency = 10;
2000 let NumMicroOps = 3;
2001 let ResourceCycles = [1,1,1];
2002}
2003def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
2004
2005def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2006 let Latency = 10;
2007 let NumMicroOps = 4;
2008 let ResourceCycles = [1,2,1];
2009}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002010def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
2011 "(V?)HADDPSrm",
2012 "(V?)HSUBPDrm",
2013 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002014
2015def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2016 let Latency = 10;
2017 let NumMicroOps = 4;
2018 let ResourceCycles = [1,1,1,1];
2019}
2020def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
2021
2022def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002023 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00002024 let NumMicroOps = 4;
2025 let ResourceCycles = [1,1,1,1];
2026}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002027def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002028
Craig Topper8104f262018-04-02 05:33:28 +00002029def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002030 let Latency = 11;
2031 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002032 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002033}
Craig Topper8104f262018-04-02 05:33:28 +00002034def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
2035
2036def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2037 let Latency = 11;
2038 let NumMicroOps = 1;
2039 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
2040}
2041def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002042
2043def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
2044 let Latency = 11;
2045 let NumMicroOps = 2;
2046 let ResourceCycles = [1,1];
2047}
Craig Topper5a69a002018-03-21 06:28:42 +00002048def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
2049 "MUL_F64m",
2050 "VPCMPGTQYrm",
2051 "VPMADDUBSWYrm",
2052 "VPMADDWDYrm",
2053 "VPMULDQYrm",
2054 "VPMULHRSWYrm",
2055 "VPMULHUWYrm",
2056 "VPMULHWYrm",
2057 "VPMULLWYrm",
2058 "VPMULUDQYrm",
2059 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002060
2061def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2062 let Latency = 11;
2063 let NumMicroOps = 2;
2064 let ResourceCycles = [1,1];
2065}
Craig Topperf82867c2017-12-13 23:11:30 +00002066def: InstRW<[BWWriteResGroup124],
2067 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002068
Gadi Haber323f2e12017-10-24 20:19:47 +00002069def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2070 let Latency = 11;
2071 let NumMicroOps = 3;
2072 let ResourceCycles = [2,1];
2073}
Craig Topper5a69a002018-03-21 06:28:42 +00002074def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2075 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002076
2077def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2078 let Latency = 11;
2079 let NumMicroOps = 3;
2080 let ResourceCycles = [2,1];
2081}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002082def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2083 "(V?)ROUNDPSm",
2084 "(V?)ROUNDSDm",
2085 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002086
2087def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2088 let Latency = 11;
2089 let NumMicroOps = 3;
2090 let ResourceCycles = [1,1,1];
2091}
2092def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2093
2094def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2095 let Latency = 11;
2096 let NumMicroOps = 4;
2097 let ResourceCycles = [1,2,1];
2098}
Craig Topper5a69a002018-03-21 06:28:42 +00002099def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2100 "VHADDPSYrm",
2101 "VHSUBPDYrm",
2102 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002103
2104def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2105 let Latency = 11;
2106 let NumMicroOps = 6;
2107 let ResourceCycles = [1,1,1,1,2];
2108}
Craig Topper5a69a002018-03-21 06:28:42 +00002109def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2110 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002111
2112def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2113 let Latency = 11;
2114 let NumMicroOps = 7;
2115 let ResourceCycles = [2,2,3];
2116}
Craig Topper5a69a002018-03-21 06:28:42 +00002117def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2118 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002119
2120def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2121 let Latency = 11;
2122 let NumMicroOps = 9;
2123 let ResourceCycles = [1,4,1,3];
2124}
2125def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2126
2127def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2128 let Latency = 11;
2129 let NumMicroOps = 11;
2130 let ResourceCycles = [2,9];
2131}
Craig Topper2d451e72018-03-18 08:38:06 +00002132def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2133def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002134
Gadi Haber323f2e12017-10-24 20:19:47 +00002135def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2136 let Latency = 12;
2137 let NumMicroOps = 3;
2138 let ResourceCycles = [2,1];
2139}
Craig Topper5a69a002018-03-21 06:28:42 +00002140def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2141 "ADD_FI32m",
2142 "SUBR_FI16m",
2143 "SUBR_FI32m",
2144 "SUB_FI16m",
2145 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002146 "VROUNDPDYm",
2147 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002148
2149def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2150 let Latency = 12;
2151 let NumMicroOps = 4;
2152 let ResourceCycles = [1,2,1];
2153}
Craig Topper5a69a002018-03-21 06:28:42 +00002154def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002155
Craig Topper8104f262018-04-02 05:33:28 +00002156def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002157 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002158 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002159 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002160}
Craig Topper8104f262018-04-02 05:33:28 +00002161def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2162
2163def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2164 let Latency = 11;
2165 let NumMicroOps = 1;
2166 let ResourceCycles = [1,4];
2167}
2168def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002169
2170def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2171 let Latency = 13;
2172 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002173 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002174}
2175def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2176
Craig Topper8104f262018-04-02 05:33:28 +00002177def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002178 let Latency = 14;
2179 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002180 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002181}
Craig Topper8104f262018-04-02 05:33:28 +00002182def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2183
2184def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2185 let Latency = 14;
2186 let NumMicroOps = 1;
2187 let ResourceCycles = [1,4];
2188}
2189def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002190
Gadi Haber323f2e12017-10-24 20:19:47 +00002191def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2192 let Latency = 14;
2193 let NumMicroOps = 3;
2194 let ResourceCycles = [1,1,1];
2195}
Craig Topper5a69a002018-03-21 06:28:42 +00002196def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2197 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198
2199def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2200 let Latency = 14;
2201 let NumMicroOps = 4;
2202 let ResourceCycles = [2,1,1];
2203}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002204def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002205
2206def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2207 let Latency = 14;
2208 let NumMicroOps = 4;
2209 let ResourceCycles = [1,1,1,1];
2210}
Craig Topper5a69a002018-03-21 06:28:42 +00002211def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002212
2213def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2214 let Latency = 14;
2215 let NumMicroOps = 8;
2216 let ResourceCycles = [2,2,1,3];
2217}
2218def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2219
2220def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2221 let Latency = 14;
2222 let NumMicroOps = 10;
2223 let ResourceCycles = [2,3,1,4];
2224}
2225def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2226
2227def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2228 let Latency = 14;
2229 let NumMicroOps = 12;
2230 let ResourceCycles = [2,1,4,5];
2231}
2232def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2233
2234def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2235 let Latency = 15;
2236 let NumMicroOps = 1;
2237 let ResourceCycles = [1];
2238}
Craig Topper5a69a002018-03-21 06:28:42 +00002239def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2240 "DIVR_FST0r",
2241 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002242
Gadi Haber323f2e12017-10-24 20:19:47 +00002243def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2244 let Latency = 15;
2245 let NumMicroOps = 10;
2246 let ResourceCycles = [1,1,1,4,1,2];
2247}
Craig Topper13a16502018-03-19 00:56:09 +00002248def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002249
Craig Topper8104f262018-04-02 05:33:28 +00002250def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002251 let Latency = 16;
2252 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002253 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002254}
Craig Topper5a69a002018-03-21 06:28:42 +00002255def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2256 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002257
2258def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2259 let Latency = 16;
2260 let NumMicroOps = 3;
2261 let ResourceCycles = [2,1];
2262}
2263def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2264
Gadi Haber323f2e12017-10-24 20:19:47 +00002265def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2266 let Latency = 16;
2267 let NumMicroOps = 14;
2268 let ResourceCycles = [1,1,1,4,2,5];
2269}
2270def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2271
2272def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2273 let Latency = 16;
2274 let NumMicroOps = 16;
2275 let ResourceCycles = [16];
2276}
Craig Topper5a69a002018-03-21 06:28:42 +00002277def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002278
Craig Topper8104f262018-04-02 05:33:28 +00002279def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002280 let Latency = 17;
2281 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002282 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002283}
2284def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2285
2286def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2287 let Latency = 17;
2288 let NumMicroOps = 4;
2289 let ResourceCycles = [2,1,1];
2290}
Craig Topper5a69a002018-03-21 06:28:42 +00002291def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2292 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002293
Craig Topper8104f262018-04-02 05:33:28 +00002294def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002295 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002296 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002297 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002298}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002299def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2300 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002301
Gadi Haber323f2e12017-10-24 20:19:47 +00002302def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2303 let Latency = 18;
2304 let NumMicroOps = 8;
2305 let ResourceCycles = [1,1,1,5];
2306}
Craig Topper5a69a002018-03-21 06:28:42 +00002307def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002308def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002309
2310def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2311 let Latency = 18;
2312 let NumMicroOps = 11;
2313 let ResourceCycles = [2,1,1,3,1,3];
2314}
Craig Topper13a16502018-03-19 00:56:09 +00002315def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002316
Craig Topper8104f262018-04-02 05:33:28 +00002317def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002318 let Latency = 19;
2319 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002320 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002321}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002322def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002323 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002324
Gadi Haber323f2e12017-10-24 20:19:47 +00002325def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2326 let Latency = 19;
2327 let NumMicroOps = 5;
2328 let ResourceCycles = [2,1,1,1];
2329}
Craig Topper5a69a002018-03-21 06:28:42 +00002330def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002331
Gadi Haber323f2e12017-10-24 20:19:47 +00002332def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2333 let Latency = 20;
2334 let NumMicroOps = 1;
2335 let ResourceCycles = [1];
2336}
Craig Topper5a69a002018-03-21 06:28:42 +00002337def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2338 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002339 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002340
2341def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2342 let Latency = 20;
2343 let NumMicroOps = 5;
2344 let ResourceCycles = [2,1,1,1];
2345}
2346def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2347
2348def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2349 let Latency = 20;
2350 let NumMicroOps = 8;
2351 let ResourceCycles = [1,1,1,1,1,1,2];
2352}
Craig Topper5a69a002018-03-21 06:28:42 +00002353def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2354 "INSL",
2355 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002356
Craig Topper8104f262018-04-02 05:33:28 +00002357def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002358 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002359 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002360 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002361}
Craig Topper8104f262018-04-02 05:33:28 +00002362def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2363
2364def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2365 let Latency = 16;
2366 let NumMicroOps = 1;
2367 let ResourceCycles = [1,8];
2368}
2369def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002370
2371def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2372 let Latency = 21;
2373 let NumMicroOps = 2;
2374 let ResourceCycles = [1,1];
2375}
Craig Topper5a69a002018-03-21 06:28:42 +00002376def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2377 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002378
Craig Topper8104f262018-04-02 05:33:28 +00002379def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002380 let Latency = 21;
2381 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002382 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002383}
2384def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2385
2386def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2387 let Latency = 21;
2388 let NumMicroOps = 19;
2389 let ResourceCycles = [2,1,4,1,1,4,6];
2390}
2391def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2392
2393def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2394 let Latency = 22;
2395 let NumMicroOps = 18;
2396 let ResourceCycles = [1,1,16];
2397}
2398def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2399
Craig Topper8104f262018-04-02 05:33:28 +00002400def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002401 let Latency = 23;
2402 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002403 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002404}
2405def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2406
Craig Topper8104f262018-04-02 05:33:28 +00002407def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002408 let Latency = 23;
2409 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002410 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002411}
2412def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2413
Gadi Haber323f2e12017-10-24 20:19:47 +00002414def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2415 let Latency = 23;
2416 let NumMicroOps = 19;
2417 let ResourceCycles = [3,1,15];
2418}
Craig Topper391c6f92017-12-10 01:24:08 +00002419def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002420
2421def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2422 let Latency = 24;
2423 let NumMicroOps = 3;
2424 let ResourceCycles = [1,1,1];
2425}
Craig Topper5a69a002018-03-21 06:28:42 +00002426def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2427 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002428
Craig Topper8104f262018-04-02 05:33:28 +00002429def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002430 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002431 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002432 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002433}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002434def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2435 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002436
2437def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2438 let Latency = 26;
2439 let NumMicroOps = 2;
2440 let ResourceCycles = [1,1];
2441}
Craig Topper5a69a002018-03-21 06:28:42 +00002442def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002443 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002444
Craig Topper8104f262018-04-02 05:33:28 +00002445def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002446 let Latency = 27;
2447 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002448 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002449}
2450def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2451
2452def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2453 let Latency = 29;
2454 let NumMicroOps = 3;
2455 let ResourceCycles = [1,1,1];
2456}
Craig Topper5a69a002018-03-21 06:28:42 +00002457def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2458 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002459
Craig Topper8104f262018-04-02 05:33:28 +00002460def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002461 let Latency = 29;
2462 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002463 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002464}
2465def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2466
2467def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2468 let Latency = 22;
2469 let NumMicroOps = 7;
2470 let ResourceCycles = [1,3,2,1];
2471}
Craig Topper17a31182017-12-16 18:35:29 +00002472def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002473
2474def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2475 let Latency = 23;
2476 let NumMicroOps = 9;
2477 let ResourceCycles = [1,3,4,1];
2478}
Craig Topper17a31182017-12-16 18:35:29 +00002479def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002480
2481def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2482 let Latency = 24;
2483 let NumMicroOps = 9;
2484 let ResourceCycles = [1,5,2,1];
2485}
Craig Topper17a31182017-12-16 18:35:29 +00002486def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002487
2488def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2489 let Latency = 25;
2490 let NumMicroOps = 7;
2491 let ResourceCycles = [1,3,2,1];
2492}
Craig Topper17a31182017-12-16 18:35:29 +00002493def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2494 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002495
2496def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2497 let Latency = 26;
2498 let NumMicroOps = 9;
2499 let ResourceCycles = [1,5,2,1];
2500}
Craig Topper17a31182017-12-16 18:35:29 +00002501def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002502
2503def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2504 let Latency = 26;
2505 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002506 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002507}
Craig Topper17a31182017-12-16 18:35:29 +00002508def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002509
2510def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2511 let Latency = 27;
2512 let NumMicroOps = 9;
2513 let ResourceCycles = [1,5,2,1];
2514}
Craig Topper17a31182017-12-16 18:35:29 +00002515def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002516
Gadi Haber323f2e12017-10-24 20:19:47 +00002517def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2518 let Latency = 29;
2519 let NumMicroOps = 27;
2520 let ResourceCycles = [1,5,1,1,19];
2521}
2522def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2523
2524def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2525 let Latency = 30;
2526 let NumMicroOps = 28;
2527 let ResourceCycles = [1,6,1,1,19];
2528}
Craig Topper2d451e72018-03-18 08:38:06 +00002529def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002530
2531def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2532 let Latency = 31;
2533 let NumMicroOps = 31;
2534 let ResourceCycles = [8,1,21,1];
2535}
2536def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2537
Craig Topper8104f262018-04-02 05:33:28 +00002538def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2539 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002540 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002541 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002542}
2543def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2544
2545def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2546 let Latency = 34;
2547 let NumMicroOps = 8;
2548 let ResourceCycles = [2,2,2,1,1];
2549}
Craig Topper13a16502018-03-19 00:56:09 +00002550def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002551
2552def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2553 let Latency = 34;
2554 let NumMicroOps = 23;
2555 let ResourceCycles = [1,5,3,4,10];
2556}
Craig Topper5a69a002018-03-21 06:28:42 +00002557def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2558 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002559
2560def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2561 let Latency = 35;
2562 let NumMicroOps = 8;
2563 let ResourceCycles = [2,2,2,1,1];
2564}
Craig Topper13a16502018-03-19 00:56:09 +00002565def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002566
2567def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2568 let Latency = 35;
2569 let NumMicroOps = 23;
2570 let ResourceCycles = [1,5,2,1,4,10];
2571}
Craig Topper5a69a002018-03-21 06:28:42 +00002572def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2573 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002574
Craig Topper8104f262018-04-02 05:33:28 +00002575def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2576 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002577 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002578 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002579}
2580def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2581
2582def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2583 let Latency = 42;
2584 let NumMicroOps = 22;
2585 let ResourceCycles = [2,20];
2586}
Craig Topper2d451e72018-03-18 08:38:06 +00002587def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002588
2589def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2590 let Latency = 60;
2591 let NumMicroOps = 64;
2592 let ResourceCycles = [2,2,8,1,10,2,39];
2593}
2594def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002595
2596def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2597 let Latency = 63;
2598 let NumMicroOps = 88;
2599 let ResourceCycles = [4,4,31,1,2,1,45];
2600}
Craig Topper2d451e72018-03-18 08:38:06 +00002601def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002602
2603def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2604 let Latency = 63;
2605 let NumMicroOps = 90;
2606 let ResourceCycles = [4,2,33,1,2,1,47];
2607}
Craig Topper2d451e72018-03-18 08:38:06 +00002608def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002609
2610def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2611 let Latency = 75;
2612 let NumMicroOps = 15;
2613 let ResourceCycles = [6,3,6];
2614}
2615def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2616
2617def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2618 let Latency = 80;
2619 let NumMicroOps = 32;
2620 let ResourceCycles = [7,7,3,3,1,11];
2621}
2622def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2623
2624def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2625 let Latency = 115;
2626 let NumMicroOps = 100;
2627 let ResourceCycles = [9,9,11,8,1,11,21,30];
2628}
2629def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002630
2631} // SchedModel
2632