blob: e658bfe3758ceecdebdfe2bde6d4ff24032456b8 [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",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000325 "(V?)MOVPDI2DIrr",
326 "(V?)MOVPQIto64rr",
327 "(V?)PSLLD(Y?)ri",
328 "(V?)PSLLQ(Y?)ri",
329 "VPSLLVQ(Y?)rr",
330 "(V?)PSLLW(Y?)ri",
331 "(V?)PSRAD(Y?)ri",
332 "(V?)PSRAW(Y?)ri",
333 "(V?)PSRLD(Y?)ri",
334 "(V?)PSRLQ(Y?)ri",
335 "VPSRLVQ(Y?)rr",
336 "(V?)PSRLW(Y?)ri",
337 "VTESTPD(Y?)rr",
338 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000339
340def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
341 let Latency = 1;
342 let NumMicroOps = 1;
343 let ResourceCycles = [1];
344}
Craig Topper5a69a002018-03-21 06:28:42 +0000345def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
346 "COM_FST0r",
347 "UCOM_FPr",
348 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000349
350def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
351 let Latency = 1;
352 let NumMicroOps = 1;
353 let ResourceCycles = [1];
354}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000355def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000356 "MMX_MOVD64to64rr",
357 "MMX_MOVQ2DQrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000358 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000359 "(V?)INSERTPSrr",
360 "(V?)MOV64toPQIrr",
361 "(V?)MOVAPD(Y?)rr",
362 "(V?)MOVAPS(Y?)rr",
363 "(V?)MOVDDUP(Y?)rr",
364 "(V?)MOVDI2PDIrr",
365 "(V?)MOVHLPSrr",
366 "(V?)MOVLHPSrr",
367 "(V?)MOVSDrr",
368 "(V?)MOVSHDUP(Y?)rr",
369 "(V?)MOVSLDUP(Y?)rr",
370 "(V?)MOVSSrr",
371 "(V?)MOVUPD(Y?)rr",
372 "(V?)MOVUPS(Y?)rr",
373 "(V?)ORPD(Y?)rr",
374 "(V?)ORPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000375 "(V?)PALIGNR(Y?)rri",
376 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000377 "VPBROADCASTDrr",
378 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000379 "VPERMILPD(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000380 "VPERMILPS(Y?)ri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000381 "(V?)PMOVSXBDrr",
382 "(V?)PMOVSXBQrr",
383 "(V?)PMOVSXBWrr",
384 "(V?)PMOVSXDQrr",
385 "(V?)PMOVSXWDrr",
386 "(V?)PMOVSXWQrr",
387 "(V?)PMOVZXBDrr",
388 "(V?)PMOVZXBQrr",
389 "(V?)PMOVZXBWrr",
390 "(V?)PMOVZXDQrr",
391 "(V?)PMOVZXWDrr",
392 "(V?)PMOVZXWQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000393 "(V?)PSHUFD(Y?)ri",
394 "(V?)PSHUFHW(Y?)ri",
395 "(V?)PSHUFLW(Y?)ri",
396 "(V?)PSLLDQ(Y?)ri",
397 "(V?)PSRLDQ(Y?)ri",
398 "(V?)PUNPCKHBW(Y?)rr",
399 "(V?)PUNPCKHDQ(Y?)rr",
400 "(V?)PUNPCKHQDQ(Y?)rr",
401 "(V?)PUNPCKHWD(Y?)rr",
402 "(V?)PUNPCKLBW(Y?)rr",
403 "(V?)PUNPCKLDQ(Y?)rr",
404 "(V?)PUNPCKLQDQ(Y?)rr",
405 "(V?)PUNPCKLWD(Y?)rr",
406 "(V?)SHUFPD(Y?)rri",
407 "(V?)SHUFPS(Y?)rri",
408 "(V?)UNPCKHPD(Y?)rr",
409 "(V?)UNPCKHPS(Y?)rr",
410 "(V?)UNPCKLPD(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000411 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000412
413def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
414 let Latency = 1;
415 let NumMicroOps = 1;
416 let ResourceCycles = [1];
417}
418def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
419
420def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
421 let Latency = 1;
422 let NumMicroOps = 1;
423 let ResourceCycles = [1];
424}
Craig Topper5a69a002018-03-21 06:28:42 +0000425def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
426 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000427
428def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
429 let Latency = 1;
430 let NumMicroOps = 1;
431 let ResourceCycles = [1];
432}
Craig Topperfbe31322018-04-05 21:56:19 +0000433def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000434def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
435 "ADC(16|32|64)i",
436 "ADC(8|16|32|64)rr",
437 "ADCX(32|64)rr",
438 "ADOX(32|64)rr",
439 "BT(16|32|64)ri8",
440 "BT(16|32|64)rr",
441 "BTC(16|32|64)ri8",
442 "BTC(16|32|64)rr",
443 "BTR(16|32|64)ri8",
444 "BTR(16|32|64)rr",
445 "BTS(16|32|64)ri8",
446 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000447 "SBB(16|32|64)ri",
448 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000449 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000450
451def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
452 let Latency = 1;
453 let NumMicroOps = 1;
454 let ResourceCycles = [1];
455}
Craig Topper5a69a002018-03-21 06:28:42 +0000456def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
457 "BLSI(32|64)rr",
458 "BLSMSK(32|64)rr",
459 "BLSR(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000460 "LEA(16|32|64)(_32)?r",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000461 "(V?)PABSB(Y?)rr",
462 "(V?)PABSD(Y?)rr",
463 "(V?)PABSW(Y?)rr",
464 "(V?)PADDB(Y?)rr",
465 "(V?)PADDD(Y?)rr",
466 "(V?)PADDQ(Y?)rr",
467 "(V?)PADDSB(Y?)rr",
468 "(V?)PADDSW(Y?)rr",
469 "(V?)PADDUSB(Y?)rr",
470 "(V?)PADDUSW(Y?)rr",
471 "(V?)PADDW(Y?)rr",
472 "(V?)PAVGB(Y?)rr",
473 "(V?)PAVGW(Y?)rr",
474 "(V?)PCMPEQB(Y?)rr",
475 "(V?)PCMPEQD(Y?)rr",
476 "(V?)PCMPEQQ(Y?)rr",
477 "(V?)PCMPEQW(Y?)rr",
478 "(V?)PCMPGTB(Y?)rr",
479 "(V?)PCMPGTD(Y?)rr",
480 "(V?)PCMPGTW(Y?)rr",
481 "(V?)PMAXSB(Y?)rr",
482 "(V?)PMAXSD(Y?)rr",
483 "(V?)PMAXSW(Y?)rr",
484 "(V?)PMAXUB(Y?)rr",
485 "(V?)PMAXUD(Y?)rr",
486 "(V?)PMAXUW(Y?)rr",
487 "(V?)PMINSB(Y?)rr",
488 "(V?)PMINSD(Y?)rr",
489 "(V?)PMINSW(Y?)rr",
490 "(V?)PMINUB(Y?)rr",
491 "(V?)PMINUD(Y?)rr",
492 "(V?)PMINUW(Y?)rr",
493 "(V?)PSIGNB(Y?)rr",
494 "(V?)PSIGND(Y?)rr",
495 "(V?)PSIGNW(Y?)rr",
496 "(V?)PSUBB(Y?)rr",
497 "(V?)PSUBD(Y?)rr",
498 "(V?)PSUBQ(Y?)rr",
499 "(V?)PSUBSB(Y?)rr",
500 "(V?)PSUBSW(Y?)rr",
501 "(V?)PSUBUSB(Y?)rr",
502 "(V?)PSUBUSW(Y?)rr",
503 "(V?)PSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000504
505def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
506 let Latency = 1;
507 let NumMicroOps = 1;
508 let ResourceCycles = [1];
509}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000510def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000511 "(V?)BLENDPD(Y?)rri",
512 "(V?)BLENDPS(Y?)rri",
513 "(V?)MOVDQA(Y?)rr",
514 "(V?)MOVDQU(Y?)rr",
515 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000516 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000517 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000518
519def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
520 let Latency = 1;
521 let NumMicroOps = 1;
522 let ResourceCycles = [1];
523}
Craig Topperdfccafe2018-04-18 06:41:25 +0000524def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000525 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000526 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000527 "SGDT64m",
528 "SIDT64m",
529 "SLDT64m",
530 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000531 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000532 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000533
534def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
535 let Latency = 1;
536 let NumMicroOps = 2;
537 let ResourceCycles = [1,1];
538}
Craig Topper5a69a002018-03-21 06:28:42 +0000539def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
540 "MMX_MOVD64from64rm",
541 "MMX_MOVD64mr",
542 "MMX_MOVNTQmr",
543 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000544 "MOVNTI_64mr",
545 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000546 "ST_FP32m",
547 "ST_FP64m",
548 "ST_FP80m",
549 "VEXTRACTF128mr",
550 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000551 "(V?)MOVAPD(Y?)mr",
552 "(V?)MOVAPS(Y?)mr",
553 "(V?)MOVDQA(Y?)mr",
554 "(V?)MOVDQU(Y?)mr",
555 "(V?)MOVHPDmr",
556 "(V?)MOVHPSmr",
557 "(V?)MOVLPDmr",
558 "(V?)MOVLPSmr",
559 "(V?)MOVNTDQ(V?)mr",
560 "(V?)MOVNTPD(V?)mr",
561 "(V?)MOVNTPS(V?)mr",
562 "(V?)MOVPDI2DImr",
563 "(V?)MOVPQI2QImr",
564 "(V?)MOVPQIto64mr",
565 "(V?)MOVSDmr",
566 "(V?)MOVSSmr",
567 "(V?)MOVUPD(Y?)mr",
568 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000569
570def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
571 let Latency = 2;
572 let NumMicroOps = 2;
573 let ResourceCycles = [2];
574}
Craig Topper5a69a002018-03-21 06:28:42 +0000575def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
576 "BLENDVPSrr0",
577 "MMX_PINSRWrr",
578 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000579 "VBLENDVPD(Y?)rr",
580 "VBLENDVPS(Y?)rr",
581 "VPBLENDVB(Y?)rr",
582 "(V?)PINSRBrr",
583 "(V?)PINSRDrr",
584 "(V?)PINSRQrr",
585 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000586
587def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
588 let Latency = 2;
589 let NumMicroOps = 2;
590 let ResourceCycles = [2];
591}
592def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
593
594def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
595 let Latency = 2;
596 let NumMicroOps = 2;
597 let ResourceCycles = [2];
598}
Craig Topper5a69a002018-03-21 06:28:42 +0000599def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
600 "ROL(8|16|32|64)ri",
601 "ROR(8|16|32|64)r1",
602 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000603
604def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
605 let Latency = 2;
606 let NumMicroOps = 2;
607 let ResourceCycles = [2];
608}
Craig Topper5a69a002018-03-21 06:28:42 +0000609def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
610 "MFENCE",
611 "WAIT",
612 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000613
614def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
615 let Latency = 2;
616 let NumMicroOps = 2;
617 let ResourceCycles = [1,1];
618}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000619def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
620 "VCVTPH2PS(Y?)rr",
621 "(V?)CVTPS2PDrr",
622 "(V?)CVTSS2SDrr",
623 "(V?)EXTRACTPSrr",
624 "(V?)PEXTRBrr",
625 "(V?)PEXTRDrr",
626 "(V?)PEXTRQrr",
627 "(V?)PEXTRWrr",
628 "(V?)PSLLDrr",
629 "(V?)PSLLQrr",
630 "(V?)PSLLWrr",
631 "(V?)PSRADrr",
632 "(V?)PSRAWrr",
633 "(V?)PSRLDrr",
634 "(V?)PSRLQrr",
635 "(V?)PSRLWrr",
636 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000637
638def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
639 let Latency = 2;
640 let NumMicroOps = 2;
641 let ResourceCycles = [1,1];
642}
643def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
644
645def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
646 let Latency = 2;
647 let NumMicroOps = 2;
648 let ResourceCycles = [1,1];
649}
650def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
651
652def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
653 let Latency = 2;
654 let NumMicroOps = 2;
655 let ResourceCycles = [1,1];
656}
657def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
658
659def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
660 let Latency = 2;
661 let NumMicroOps = 2;
662 let ResourceCycles = [1,1];
663}
Craig Topper498875f2018-04-04 17:54:19 +0000664def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
665
666def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
667 let Latency = 1;
668 let NumMicroOps = 1;
669 let ResourceCycles = [1];
670}
671def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000672
673def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
674 let Latency = 2;
675 let NumMicroOps = 2;
676 let ResourceCycles = [1,1];
677}
Craig Topper2d451e72018-03-18 08:38:06 +0000678def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000679def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000680def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
681 "ADC8ri",
682 "CMOV(A|BE)(16|32|64)rr",
683 "SBB8i8",
684 "SBB8ri",
685 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000686
687def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
688 let Latency = 2;
689 let NumMicroOps = 3;
690 let ResourceCycles = [1,1,1];
691}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000692def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
693 "(V?)PEXTRBmr",
694 "(V?)PEXTRDmr",
695 "(V?)PEXTRQmr",
696 "(V?)PEXTRWmr",
697 "(V?)STMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000698
699def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
700 let Latency = 2;
701 let NumMicroOps = 3;
702 let ResourceCycles = [1,1,1];
703}
704def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
705
Gadi Haber323f2e12017-10-24 20:19:47 +0000706def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
707 let Latency = 2;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,1,1];
710}
711def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
712
713def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
714 let Latency = 2;
715 let NumMicroOps = 3;
716 let ResourceCycles = [1,1,1];
717}
Craig Topper2d451e72018-03-18 08:38:06 +0000718def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000719def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
720 "PUSH64i8",
721 "STOSB",
722 "STOSL",
723 "STOSQ",
724 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000725
Gadi Haber323f2e12017-10-24 20:19:47 +0000726def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
727 let Latency = 3;
728 let NumMicroOps = 1;
729 let ResourceCycles = [1];
730}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000731def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000732 "PDEP(32|64)rr",
733 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000734 "SHLD(16|32|64)rri8",
735 "SHRD(16|32|64)rri8",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000736 "(V?)CVTDQ2PS(Y?)rr",
737 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000738 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000739
740def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000741 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000742 let NumMicroOps = 2;
743 let ResourceCycles = [1,1];
744}
Clement Courbet327fac42018-03-07 08:14:02 +0000745def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000746
747def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
748 let Latency = 3;
749 let NumMicroOps = 1;
750 let ResourceCycles = [1];
751}
Craig Topper5a69a002018-03-21 06:28:42 +0000752def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
753 "VBROADCASTSSYrr",
754 "VEXTRACTF128rr",
755 "VEXTRACTI128rr",
756 "VINSERTF128rr",
757 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000758 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000759 "VPBROADCASTDYrr",
760 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000761 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000762 "VPERM2F128rr",
763 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000764 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000765 "VPERMQYri",
766 "VPMOVSXBDYrr",
767 "VPMOVSXBQYrr",
768 "VPMOVSXBWYrr",
769 "VPMOVSXDQYrr",
770 "VPMOVSXWDYrr",
771 "VPMOVSXWQYrr",
772 "VPMOVZXBDYrr",
773 "VPMOVZXBQYrr",
774 "VPMOVZXBWYrr",
775 "VPMOVZXDQYrr",
776 "VPMOVZXWDYrr",
777 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000778
779def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
780 let Latency = 3;
781 let NumMicroOps = 1;
782 let ResourceCycles = [1];
783}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000784def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
785 "(V?)MULPS(Y?)rr",
786 "(V?)MULSDrr",
787 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000788
789def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000790 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000791 let NumMicroOps = 3;
792 let ResourceCycles = [3];
793}
Craig Topperb5f26592018-04-19 18:00:17 +0000794def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
795 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
796 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000797
798def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
799 let Latency = 3;
800 let NumMicroOps = 3;
801 let ResourceCycles = [2,1];
802}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000803def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
804 "VPSRAVD(Y?)rr",
805 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000806
807def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
808 let Latency = 3;
809 let NumMicroOps = 3;
810 let ResourceCycles = [2,1];
811}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000812def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000813 "(V?)PHADDD(Y?)rr",
814 "(V?)PHADDSW(Y?)rr",
815 "(V?)PHADDW(Y?)rr",
816 "(V?)PHSUBD(Y?)rr",
817 "(V?)PHSUBSW(Y?)rr",
818 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000819
820def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
821 let Latency = 3;
822 let NumMicroOps = 3;
823 let ResourceCycles = [2,1];
824}
Craig Topper5a69a002018-03-21 06:28:42 +0000825def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
826 "MMX_PACKSSWBirr",
827 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000828
829def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
830 let Latency = 3;
831 let NumMicroOps = 3;
832 let ResourceCycles = [1,2];
833}
834def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
835
836def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
837 let Latency = 3;
838 let NumMicroOps = 3;
839 let ResourceCycles = [1,2];
840}
Craig Topper5a69a002018-03-21 06:28:42 +0000841def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
842 "RCL(8|16|32|64)ri",
843 "RCR(8|16|32|64)r1",
844 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000845
846def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
847 let Latency = 3;
848 let NumMicroOps = 3;
849 let ResourceCycles = [2,1];
850}
Craig Topper5a69a002018-03-21 06:28:42 +0000851def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
852 "ROR(8|16|32|64)rCL",
853 "SAR(8|16|32|64)rCL",
854 "SHL(8|16|32|64)rCL",
855 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000856
857def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
858 let Latency = 3;
859 let NumMicroOps = 4;
860 let ResourceCycles = [1,1,1,1];
861}
862def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
863
864def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
865 let Latency = 3;
866 let NumMicroOps = 4;
867 let ResourceCycles = [1,1,1,1];
868}
Craig Topper5a69a002018-03-21 06:28:42 +0000869def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
870 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000871
872def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
873 let Latency = 4;
874 let NumMicroOps = 2;
875 let ResourceCycles = [1,1];
876}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000877def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
878 "(V?)CVTSD2SIrr",
879 "(V?)CVTSS2SI64rr",
880 "(V?)CVTSS2SIrr",
881 "(V?)CVTTSD2SI64rr",
882 "(V?)CVTTSD2SIrr",
883 "(V?)CVTTSS2SI64rr",
884 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000885
886def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
887 let Latency = 4;
888 let NumMicroOps = 2;
889 let ResourceCycles = [1,1];
890}
Craig Topper5a69a002018-03-21 06:28:42 +0000891def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
892 "VPSLLDYrr",
893 "VPSLLQYrr",
894 "VPSLLWYrr",
895 "VPSRADYrr",
896 "VPSRAWYrr",
897 "VPSRLDYrr",
898 "VPSRLQYrr",
899 "VPSRLWYrr",
900 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000901
902def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
903 let Latency = 4;
904 let NumMicroOps = 2;
905 let ResourceCycles = [1,1];
906}
907def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
908
909def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
910 let Latency = 4;
911 let NumMicroOps = 2;
912 let ResourceCycles = [1,1];
913}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000914def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000915def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000916 "MMX_CVTPI2PDirr",
917 "MMX_CVTPS2PIirr",
918 "MMX_CVTTPD2PIirr",
919 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000920 "(V?)CVTDQ2PDrr",
921 "(V?)CVTPD2DQrr",
922 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000923 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000924 "(V?)CVTSD2SSrr",
925 "(V?)CVTSI642SDrr",
926 "(V?)CVTSI2SDrr",
927 "(V?)CVTSI2SSrr",
928 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000929
930def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
931 let Latency = 4;
932 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000933 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000934}
Craig Topper5a69a002018-03-21 06:28:42 +0000935def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000936
937def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
938 let Latency = 4;
939 let NumMicroOps = 3;
940 let ResourceCycles = [1,1,1];
941}
942def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
943
944def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
945 let Latency = 4;
946 let NumMicroOps = 3;
947 let ResourceCycles = [1,1,1];
948}
Craig Topper5a69a002018-03-21 06:28:42 +0000949def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
950 "ISTT_FP32m",
951 "ISTT_FP64m",
952 "IST_F16m",
953 "IST_F32m",
954 "IST_FP16m",
955 "IST_FP32m",
956 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000957 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000958
959def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
960 let Latency = 4;
961 let NumMicroOps = 4;
962 let ResourceCycles = [4];
963}
964def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
965
966def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
967 let Latency = 4;
968 let NumMicroOps = 4;
969 let ResourceCycles = [1,3];
970}
971def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
972
973def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
974 let Latency = 5;
975 let NumMicroOps = 1;
976 let ResourceCycles = [1];
977}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000978def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000979 "(V?)PHMINPOSUWrr",
980 "(V?)PMADDUBSW(Y?)rr",
981 "(V?)PMADDWD(Y?)rr",
982 "(V?)PMULDQ(Y?)rr",
983 "(V?)PMULHRSW(Y?)rr",
984 "(V?)PMULHUW(Y?)rr",
985 "(V?)PMULHW(Y?)rr",
986 "(V?)PMULLW(Y?)rr",
987 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000988 "(V?)RCPPSr",
989 "(V?)RCPSSr",
990 "(V?)RSQRTPSr",
991 "(V?)RSQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000992
Gadi Haber323f2e12017-10-24 20:19:47 +0000993def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
994 let Latency = 5;
995 let NumMicroOps = 1;
996 let ResourceCycles = [1];
997}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000998def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000999 "MOVSX(16|32|64)rm32",
1000 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +00001001 "MOVZX(16|32|64)rm16",
1002 "MOVZX(16|32|64)rm8",
1003 "PREFETCHNTA",
1004 "PREFETCHT0",
1005 "PREFETCHT1",
1006 "PREFETCHT2",
1007 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001008 "(V?)LDDQUrm",
1009 "(V?)MOV64toPQIrm",
1010 "(V?)MOVAPDrm",
1011 "(V?)MOVAPSrm",
1012 "(V?)MOVDDUPrm",
1013 "(V?)MOVDI2PDIrm",
1014 "(V?)MOVDQArm",
1015 "(V?)MOVDQUrm",
1016 "(V?)MOVNTDQArm",
1017 "(V?)MOVQI2PQIrm",
1018 "(V?)MOVSDrm",
1019 "(V?)MOVSHDUPrm",
1020 "(V?)MOVSLDUPrm",
1021 "(V?)MOVSSrm",
1022 "(V?)MOVUPDrm",
1023 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001024 "VPBROADCASTDrm",
1025 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001026
1027def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
1028 let Latency = 5;
1029 let NumMicroOps = 3;
1030 let ResourceCycles = [1,2];
1031}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001032def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
1033 "(V?)HADDPD(Y?)rr",
1034 "(V?)HADDPS(Y?)rr",
1035 "(V?)HSUBPD(Y?)rr",
1036 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001037
1038def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
1039 let Latency = 5;
1040 let NumMicroOps = 3;
1041 let ResourceCycles = [1,1,1];
1042}
1043def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
1044
1045def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001046 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +00001047 let NumMicroOps = 3;
1048 let ResourceCycles = [1,1,1];
1049}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001050def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001051
1052def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
1053 let Latency = 5;
1054 let NumMicroOps = 4;
1055 let ResourceCycles = [1,1,1,1];
1056}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001057def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
1058 "VMASKMOVPS(Y?)mr",
1059 "VPMASKMOVD(Y?)mr",
1060 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001061
1062def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
1063 let Latency = 5;
1064 let NumMicroOps = 5;
1065 let ResourceCycles = [1,4];
1066}
1067def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
1068
1069def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
1070 let Latency = 5;
1071 let NumMicroOps = 5;
1072 let ResourceCycles = [1,4];
1073}
1074def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
1075
1076def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
1077 let Latency = 5;
1078 let NumMicroOps = 5;
1079 let ResourceCycles = [2,3];
1080}
Craig Topper5a69a002018-03-21 06:28:42 +00001081def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001082
1083def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
1084 let Latency = 5;
1085 let NumMicroOps = 6;
1086 let ResourceCycles = [1,1,4];
1087}
Craig Topper5a69a002018-03-21 06:28:42 +00001088def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001089
1090def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
1091 let Latency = 6;
1092 let NumMicroOps = 1;
1093 let ResourceCycles = [1];
1094}
Craig Topper5a69a002018-03-21 06:28:42 +00001095def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
1096 "LD_F64m",
1097 "LD_F80m",
1098 "VBROADCASTF128",
1099 "VBROADCASTI128",
1100 "VBROADCASTSDYrm",
1101 "VBROADCASTSSYrm",
1102 "VLDDQUYrm",
1103 "VMOVAPDYrm",
1104 "VMOVAPSYrm",
1105 "VMOVDDUPYrm",
1106 "VMOVDQAYrm",
1107 "VMOVDQUYrm",
1108 "VMOVNTDQAYrm",
1109 "VMOVSHDUPYrm",
1110 "VMOVSLDUPYrm",
1111 "VMOVUPDYrm",
1112 "VMOVUPSYrm",
1113 "VPBROADCASTDYrm",
1114 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001115 "(V?)ROUNDPD(Y?)r",
1116 "(V?)ROUNDPS(Y?)r",
1117 "(V?)ROUNDSDr",
1118 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001119
1120def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1121 let Latency = 6;
1122 let NumMicroOps = 2;
1123 let ResourceCycles = [1,1];
1124}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001125def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001126 "MMX_PSLLQrm",
1127 "MMX_PSLLWrm",
1128 "MMX_PSRADrm",
1129 "MMX_PSRAWrm",
1130 "MMX_PSRLDrm",
1131 "MMX_PSRLQrm",
1132 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001133 "VCVTPH2PS(Y?)rm",
1134 "(V?)CVTPS2PDrm",
1135 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001136 "VPSLLVQrm",
1137 "VPSRLVQrm",
1138 "VTESTPDrm",
1139 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001140
1141def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1142 let Latency = 6;
1143 let NumMicroOps = 2;
1144 let ResourceCycles = [1,1];
1145}
Craig Topper5a69a002018-03-21 06:28:42 +00001146def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1147 "VCVTPD2DQYrr",
1148 "VCVTPD2PSYrr",
1149 "VCVTPS2PHYrr",
1150 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001151
1152def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1153 let Latency = 6;
1154 let NumMicroOps = 2;
1155 let ResourceCycles = [1,1];
1156}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001157def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001158 "MMX_PINSRWrm",
1159 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001160 "MMX_PUNPCKHBWirm",
1161 "MMX_PUNPCKHDQirm",
1162 "MMX_PUNPCKHWDirm",
1163 "MMX_PUNPCKLBWirm",
1164 "MMX_PUNPCKLDQirm",
1165 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001166 "(V?)INSERTPSrm",
1167 "(V?)MOVHPDrm",
1168 "(V?)MOVHPSrm",
1169 "(V?)MOVLPDrm",
1170 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001171 "(V?)PACKSSDWrm",
1172 "(V?)PACKSSWBrm",
1173 "(V?)PACKUSDWrm",
1174 "(V?)PACKUSWBrm",
1175 "(V?)PALIGNRrmi",
1176 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001177 "VPERMILPDmi",
1178 "VPERMILPDrm",
1179 "VPERMILPSmi",
1180 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001181 "(V?)PINSRBrm",
1182 "(V?)PINSRDrm",
1183 "(V?)PINSRQrm",
1184 "(V?)PINSRWrm",
1185 "(V?)PMOVSXBDrm",
1186 "(V?)PMOVSXBQrm",
1187 "(V?)PMOVSXBWrm",
1188 "(V?)PMOVSXDQrm",
1189 "(V?)PMOVSXWDrm",
1190 "(V?)PMOVSXWQrm",
1191 "(V?)PMOVZXBDrm",
1192 "(V?)PMOVZXBQrm",
1193 "(V?)PMOVZXBWrm",
1194 "(V?)PMOVZXDQrm",
1195 "(V?)PMOVZXWDrm",
1196 "(V?)PMOVZXWQrm",
1197 "(V?)PSHUFBrm",
1198 "(V?)PSHUFDmi",
1199 "(V?)PSHUFHWmi",
1200 "(V?)PSHUFLWmi",
1201 "(V?)PUNPCKHBWrm",
1202 "(V?)PUNPCKHDQrm",
1203 "(V?)PUNPCKHQDQrm",
1204 "(V?)PUNPCKHWDrm",
1205 "(V?)PUNPCKLBWrm",
1206 "(V?)PUNPCKLDQrm",
1207 "(V?)PUNPCKLQDQrm",
1208 "(V?)PUNPCKLWDrm",
1209 "(V?)SHUFPDrmi",
1210 "(V?)SHUFPSrmi",
1211 "(V?)UNPCKHPDrm",
1212 "(V?)UNPCKHPSrm",
1213 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001214 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001215
1216def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1217 let Latency = 6;
1218 let NumMicroOps = 2;
1219 let ResourceCycles = [1,1];
1220}
Craig Topper5a69a002018-03-21 06:28:42 +00001221def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1222 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001223
1224def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1225 let Latency = 6;
1226 let NumMicroOps = 2;
1227 let ResourceCycles = [1,1];
1228}
Craig Topperdfccafe2018-04-18 06:41:25 +00001229def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001230def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1231 ADCX32rm, ADCX64rm,
1232 ADOX32rm, ADOX64rm,
1233 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001234
1235def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1236 let Latency = 6;
1237 let NumMicroOps = 2;
1238 let ResourceCycles = [1,1];
1239}
Craig Topper5a69a002018-03-21 06:28:42 +00001240def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1241 "BLSI(32|64)rm",
1242 "BLSMSK(32|64)rm",
1243 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001244 "MMX_PADD(B|D|Q|W)irm",
1245 "MMX_PADDS(B|W)irm",
1246 "MMX_PADDUS(B|W)irm",
1247 "MMX_PAVG(B|W)irm",
1248 "MMX_PCMPEQ(B|D|W)irm",
1249 "MMX_PCMPGT(B|D|W)irm",
1250 "MMX_P(MAX|MIN)SWirm",
1251 "MMX_P(MAX|MIN)UBirm",
1252 "MMX_PSIGN(B|D|W)rm",
1253 "MMX_PSUB(B|D|Q|W)irm",
1254 "MMX_PSUBS(B|W)irm",
1255 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001256 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001257 "(V?)PABSBrm",
1258 "(V?)PABSDrm",
1259 "(V?)PABSWrm",
1260 "(V?)PADDBrm",
1261 "(V?)PADDDrm",
1262 "(V?)PADDQrm",
1263 "(V?)PADDSBrm",
1264 "(V?)PADDSWrm",
1265 "(V?)PADDUSBrm",
1266 "(V?)PADDUSWrm",
1267 "(V?)PADDWrm",
1268 "(V?)PAVGBrm",
1269 "(V?)PAVGWrm",
1270 "(V?)PCMPEQBrm",
1271 "(V?)PCMPEQDrm",
1272 "(V?)PCMPEQQrm",
1273 "(V?)PCMPEQWrm",
1274 "(V?)PCMPGTBrm",
1275 "(V?)PCMPGTDrm",
1276 "(V?)PCMPGTWrm",
1277 "(V?)PMAXSBrm",
1278 "(V?)PMAXSDrm",
1279 "(V?)PMAXSWrm",
1280 "(V?)PMAXUBrm",
1281 "(V?)PMAXUDrm",
1282 "(V?)PMAXUWrm",
1283 "(V?)PMINSBrm",
1284 "(V?)PMINSDrm",
1285 "(V?)PMINSWrm",
1286 "(V?)PMINUBrm",
1287 "(V?)PMINUDrm",
1288 "(V?)PMINUWrm",
1289 "(V?)PSIGNBrm",
1290 "(V?)PSIGNDrm",
1291 "(V?)PSIGNWrm",
1292 "(V?)PSUBBrm",
1293 "(V?)PSUBDrm",
1294 "(V?)PSUBQrm",
1295 "(V?)PSUBSBrm",
1296 "(V?)PSUBSWrm",
1297 "(V?)PSUBUSBrm",
1298 "(V?)PSUBUSWrm",
1299 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001300
1301def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1302 let Latency = 6;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001306def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001307 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001308 "VINSERTF128rm",
1309 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001310 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001311
1312def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1313 let Latency = 6;
1314 let NumMicroOps = 2;
1315 let ResourceCycles = [1,1];
1316}
Craig Topper2d451e72018-03-18 08:38:06 +00001317def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001318def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001319
1320def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1321 let Latency = 6;
1322 let NumMicroOps = 4;
1323 let ResourceCycles = [1,1,2];
1324}
Craig Topper5a69a002018-03-21 06:28:42 +00001325def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1326 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001327
1328def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1329 let Latency = 6;
1330 let NumMicroOps = 4;
1331 let ResourceCycles = [1,1,1,1];
1332}
1333def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1334
1335def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1336 let Latency = 6;
1337 let NumMicroOps = 4;
1338 let ResourceCycles = [1,1,1,1];
1339}
Craig Topper5a69a002018-03-21 06:28:42 +00001340def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1341 "BTR(16|32|64)mi8",
1342 "BTS(16|32|64)mi8",
1343 "SAR(8|16|32|64)m1",
1344 "SAR(8|16|32|64)mi",
1345 "SHL(8|16|32|64)m1",
1346 "SHL(8|16|32|64)mi",
1347 "SHR(8|16|32|64)m1",
1348 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001349
1350def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1351 let Latency = 6;
1352 let NumMicroOps = 4;
1353 let ResourceCycles = [1,1,1,1];
1354}
Craig Topperf0d04262018-04-06 16:16:48 +00001355def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1356 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001357
1358def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1359 let Latency = 6;
1360 let NumMicroOps = 6;
1361 let ResourceCycles = [1,5];
1362}
1363def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1364
Gadi Haber323f2e12017-10-24 20:19:47 +00001365def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1366 let Latency = 7;
1367 let NumMicroOps = 2;
1368 let ResourceCycles = [1,1];
1369}
Craig Topper5a69a002018-03-21 06:28:42 +00001370def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1371 "VPSLLQYrm",
1372 "VPSLLVQYrm",
1373 "VPSLLWYrm",
1374 "VPSRADYrm",
1375 "VPSRAWYrm",
1376 "VPSRLDYrm",
1377 "VPSRLQYrm",
1378 "VPSRLVQYrm",
1379 "VPSRLWYrm",
1380 "VTESTPDYrm",
1381 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001382
1383def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1384 let Latency = 7;
1385 let NumMicroOps = 2;
1386 let ResourceCycles = [1,1];
1387}
Craig Topper5a69a002018-03-21 06:28:42 +00001388def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1389 "FCOM64m",
1390 "FCOMP32m",
1391 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001392
1393def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1394 let Latency = 7;
1395 let NumMicroOps = 2;
1396 let ResourceCycles = [1,1];
1397}
Craig Topper5a69a002018-03-21 06:28:42 +00001398def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1399 "VANDNPSYrm",
1400 "VANDPDYrm",
1401 "VANDPSYrm",
1402 "VORPDYrm",
1403 "VORPSYrm",
1404 "VPACKSSDWYrm",
1405 "VPACKSSWBYrm",
1406 "VPACKUSDWYrm",
1407 "VPACKUSWBYrm",
1408 "VPALIGNRYrmi",
1409 "VPBLENDWYrmi",
1410 "VPERMILPDYmi",
1411 "VPERMILPDYrm",
1412 "VPERMILPSYmi",
1413 "VPERMILPSYrm",
1414 "VPSHUFBYrm",
1415 "VPSHUFDYmi",
1416 "VPSHUFHWYmi",
1417 "VPSHUFLWYmi",
1418 "VPUNPCKHBWYrm",
1419 "VPUNPCKHDQYrm",
1420 "VPUNPCKHQDQYrm",
1421 "VPUNPCKHWDYrm",
1422 "VPUNPCKLBWYrm",
1423 "VPUNPCKLDQYrm",
1424 "VPUNPCKLQDQYrm",
1425 "VPUNPCKLWDYrm",
1426 "VSHUFPDYrmi",
1427 "VSHUFPSYrmi",
1428 "VUNPCKHPDYrm",
1429 "VUNPCKHPSYrm",
1430 "VUNPCKLPDYrm",
1431 "VUNPCKLPSYrm",
1432 "VXORPDYrm",
1433 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001434
1435def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1436 let Latency = 7;
1437 let NumMicroOps = 2;
1438 let ResourceCycles = [1,1];
1439}
Craig Topper5a69a002018-03-21 06:28:42 +00001440def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1441 "VPABSDYrm",
1442 "VPABSWYrm",
1443 "VPADDBYrm",
1444 "VPADDDYrm",
1445 "VPADDQYrm",
1446 "VPADDSBYrm",
1447 "VPADDSWYrm",
1448 "VPADDUSBYrm",
1449 "VPADDUSWYrm",
1450 "VPADDWYrm",
1451 "VPAVGBYrm",
1452 "VPAVGWYrm",
1453 "VPCMPEQBYrm",
1454 "VPCMPEQDYrm",
1455 "VPCMPEQQYrm",
1456 "VPCMPEQWYrm",
1457 "VPCMPGTBYrm",
1458 "VPCMPGTDYrm",
1459 "VPCMPGTWYrm",
1460 "VPMAXSBYrm",
1461 "VPMAXSDYrm",
1462 "VPMAXSWYrm",
1463 "VPMAXUBYrm",
1464 "VPMAXUDYrm",
1465 "VPMAXUWYrm",
1466 "VPMINSBYrm",
1467 "VPMINSDYrm",
1468 "VPMINSWYrm",
1469 "VPMINUBYrm",
1470 "VPMINUDYrm",
1471 "VPMINUWYrm",
1472 "VPSIGNBYrm",
1473 "VPSIGNDYrm",
1474 "VPSIGNWYrm",
1475 "VPSUBBYrm",
1476 "VPSUBDYrm",
1477 "VPSUBQYrm",
1478 "VPSUBSBYrm",
1479 "VPSUBSWYrm",
1480 "VPSUBUSBYrm",
1481 "VPSUBUSWYrm",
1482 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001483
1484def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1485 let Latency = 7;
1486 let NumMicroOps = 2;
1487 let ResourceCycles = [1,1];
1488}
Craig Topper5a69a002018-03-21 06:28:42 +00001489def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1490 "VBLENDPSYrmi",
1491 "VPANDNYrm",
1492 "VPANDYrm",
1493 "VPBLENDDYrmi",
1494 "VPORYrm",
1495 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001496
1497def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1498 let Latency = 7;
1499 let NumMicroOps = 3;
1500 let ResourceCycles = [1,2];
1501}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001502def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001503
1504def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1505 let Latency = 7;
1506 let NumMicroOps = 3;
1507 let ResourceCycles = [2,1];
1508}
Craig Topper5a69a002018-03-21 06:28:42 +00001509def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1510 "BLENDVPSrm0",
1511 "MMX_PACKSSDWirm",
1512 "MMX_PACKSSWBirm",
1513 "MMX_PACKUSWBirm",
1514 "PBLENDVBrm0",
1515 "VBLENDVPDrm",
1516 "VBLENDVPSrm",
1517 "VMASKMOVPDrm",
1518 "VMASKMOVPSrm",
1519 "VPBLENDVBrm",
1520 "VPMASKMOVDrm",
1521 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001522
1523def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1524 let Latency = 7;
1525 let NumMicroOps = 3;
1526 let ResourceCycles = [1,2];
1527}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001528def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1529 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001530
1531def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1532 let Latency = 7;
1533 let NumMicroOps = 3;
1534 let ResourceCycles = [1,1,1];
1535}
Craig Topper5a69a002018-03-21 06:28:42 +00001536def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1537 "PSLLQrm",
1538 "PSLLWrm",
1539 "PSRADrm",
1540 "PSRAWrm",
1541 "PSRLDrm",
1542 "PSRLQrm",
1543 "PSRLWrm",
1544 "PTESTrm",
1545 "VPSLLDrm",
1546 "VPSLLQrm",
1547 "VPSLLWrm",
1548 "VPSRADrm",
1549 "VPSRAWrm",
1550 "VPSRLDrm",
1551 "VPSRLQrm",
1552 "VPSRLWrm",
1553 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001554
1555def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1556 let Latency = 7;
1557 let NumMicroOps = 3;
1558 let ResourceCycles = [1,1,1];
1559}
1560def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1561
1562def BWWriteResGroup83 : SchedWriteRes<[BWPort0,BWPort23,BWPort0156]> {
1563 let Latency = 7;
1564 let NumMicroOps = 3;
1565 let ResourceCycles = [1,1,1];
1566}
Craig Topper5a69a002018-03-21 06:28:42 +00001567def: InstRW<[BWWriteResGroup83], (instregex "(V?)LDMXCSR")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001568
1569def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1570 let Latency = 7;
1571 let NumMicroOps = 3;
1572 let ResourceCycles = [1,1,1];
1573}
Craig Topper5a69a002018-03-21 06:28:42 +00001574def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1575 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001576
Gadi Haber323f2e12017-10-24 20:19:47 +00001577def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1578 let Latency = 7;
1579 let NumMicroOps = 3;
1580 let ResourceCycles = [1,1,1];
1581}
Craig Topperf4cd9082018-01-19 05:47:32 +00001582def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001583
1584def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1585 let Latency = 7;
1586 let NumMicroOps = 5;
1587 let ResourceCycles = [1,1,1,2];
1588}
Craig Topper5a69a002018-03-21 06:28:42 +00001589def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1590 "ROL(8|16|32|64)mi",
1591 "ROR(8|16|32|64)m1",
1592 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001593
1594def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1595 let Latency = 7;
1596 let NumMicroOps = 5;
1597 let ResourceCycles = [1,1,1,2];
1598}
Craig Topper5a69a002018-03-21 06:28:42 +00001599def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001600
1601def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1602 let Latency = 7;
1603 let NumMicroOps = 5;
1604 let ResourceCycles = [1,1,1,1,1];
1605}
Craig Topper5a69a002018-03-21 06:28:42 +00001606def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1607 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001608
1609def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1610 let Latency = 7;
1611 let NumMicroOps = 7;
1612 let ResourceCycles = [2,2,1,2];
1613}
Craig Topper2d451e72018-03-18 08:38:06 +00001614def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001615
1616def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1617 let Latency = 8;
1618 let NumMicroOps = 2;
1619 let ResourceCycles = [1,1];
1620}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001621def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001622 "PDEP(32|64)rm",
1623 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001624 "(V?)ADDPDrm",
1625 "(V?)ADDPSrm",
1626 "(V?)ADDSDrm",
1627 "(V?)ADDSSrm",
1628 "(V?)ADDSUBPDrm",
1629 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001630 "(V?)CVTDQ2PSrm",
1631 "(V?)CVTPS2DQrm",
1632 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001633 "(V?)SUBPDrm",
1634 "(V?)SUBPSrm",
1635 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001636 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001637
1638def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001639 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001640 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001641 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001642}
Craig Topperf846e2d2018-04-19 05:34:05 +00001643def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001644
Craig Topperf846e2d2018-04-19 05:34:05 +00001645def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1646 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001647 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001648 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001649}
Craig Topper5a69a002018-03-21 06:28:42 +00001650def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001651
Gadi Haber323f2e12017-10-24 20:19:47 +00001652def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1653 let Latency = 8;
1654 let NumMicroOps = 2;
1655 let ResourceCycles = [1,1];
1656}
Craig Topper5a69a002018-03-21 06:28:42 +00001657def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1658 "VPMOVSXBQYrm",
1659 "VPMOVSXBWYrm",
1660 "VPMOVSXDQYrm",
1661 "VPMOVSXWDYrm",
1662 "VPMOVSXWQYrm",
1663 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001664
1665def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1666 let Latency = 8;
1667 let NumMicroOps = 2;
1668 let ResourceCycles = [1,1];
1669}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001670def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1671 "(V?)MULPSrm",
1672 "(V?)MULSDrm",
1673 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001674
1675def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1676 let Latency = 8;
1677 let NumMicroOps = 3;
1678 let ResourceCycles = [2,1];
1679}
Craig Topper5a69a002018-03-21 06:28:42 +00001680def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1681 "VBLENDVPSYrm",
1682 "VMASKMOVPDYrm",
1683 "VMASKMOVPSYrm",
1684 "VPBLENDVBYrm",
1685 "VPMASKMOVDYrm",
1686 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001687
1688def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1689 let Latency = 8;
1690 let NumMicroOps = 4;
1691 let ResourceCycles = [2,1,1];
1692}
Craig Topper5a69a002018-03-21 06:28:42 +00001693def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1694 "VPSRAVDrm",
1695 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001696
1697def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1698 let Latency = 8;
1699 let NumMicroOps = 4;
1700 let ResourceCycles = [2,1,1];
1701}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001702def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001703 "(V?)PHADDDrm",
1704 "(V?)PHADDSWrm",
1705 "(V?)PHADDWrm",
1706 "(V?)PHSUBDrm",
1707 "(V?)PHSUBSWrm",
1708 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001709
1710def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1711 let Latency = 8;
1712 let NumMicroOps = 5;
1713 let ResourceCycles = [1,1,1,2];
1714}
Craig Topper5a69a002018-03-21 06:28:42 +00001715def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1716 "RCL(8|16|32|64)mi",
1717 "RCR(8|16|32|64)m1",
1718 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001719
1720def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1721 let Latency = 8;
1722 let NumMicroOps = 5;
1723 let ResourceCycles = [1,1,2,1];
1724}
Craig Topper13a16502018-03-19 00:56:09 +00001725def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001726
1727def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1728 let Latency = 8;
1729 let NumMicroOps = 6;
1730 let ResourceCycles = [1,1,1,3];
1731}
Craig Topper9f834812018-04-01 21:54:24 +00001732def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001733
1734def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1735 let Latency = 8;
1736 let NumMicroOps = 6;
1737 let ResourceCycles = [1,1,1,2,1];
1738}
Craig Topper9f834812018-04-01 21:54:24 +00001739def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001740 "CMPXCHG(8|16|32|64)rm",
1741 "ROL(8|16|32|64)mCL",
1742 "SAR(8|16|32|64)mCL",
1743 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001744 "SHL(8|16|32|64)mCL",
1745 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001746def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1747 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001748
1749def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1750 let Latency = 9;
1751 let NumMicroOps = 2;
1752 let ResourceCycles = [1,1];
1753}
Craig Topper5a69a002018-03-21 06:28:42 +00001754def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1755 "ADD_F64m",
1756 "ILD_F16m",
1757 "ILD_F32m",
1758 "ILD_F64m",
1759 "SUBR_F32m",
1760 "SUBR_F64m",
1761 "SUB_F32m",
1762 "SUB_F64m",
1763 "VADDPDYrm",
1764 "VADDPSYrm",
1765 "VADDSUBPDYrm",
1766 "VADDSUBPSYrm",
1767 "VCMPPDYrmi",
1768 "VCMPPSYrmi",
1769 "VCVTDQ2PSYrm",
1770 "VCVTPS2DQYrm",
1771 "VCVTTPS2DQYrm",
1772 "VMAX(C?)PDYrm",
1773 "VMAX(C?)PSYrm",
1774 "VMIN(C?)PDYrm",
1775 "VMIN(C?)PSYrm",
1776 "VSUBPDYrm",
1777 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001778
1779def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1780 let Latency = 9;
1781 let NumMicroOps = 2;
1782 let ResourceCycles = [1,1];
1783}
Craig Topper5a69a002018-03-21 06:28:42 +00001784def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1785 "VPERM2I128rm",
1786 "VPERMDYrm",
1787 "VPERMPDYmi",
1788 "VPERMPSYrm",
1789 "VPERMQYmi",
1790 "VPMOVZXBDYrm",
1791 "VPMOVZXBQYrm",
1792 "VPMOVZXBWYrm",
1793 "VPMOVZXDQYrm",
1794 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001795
1796def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1797 let Latency = 9;
1798 let NumMicroOps = 2;
1799 let ResourceCycles = [1,1];
1800}
Craig Topper5a69a002018-03-21 06:28:42 +00001801def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1802 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001803
1804def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1805 let Latency = 9;
1806 let NumMicroOps = 3;
1807 let ResourceCycles = [1,1,1];
1808}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001809def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001810
1811def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1812 let Latency = 9;
1813 let NumMicroOps = 3;
1814 let ResourceCycles = [1,1,1];
1815}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001816def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1817 "(V?)CVTSD2SIrm",
1818 "(V?)CVTSS2SI64rm",
1819 "(V?)CVTSS2SIrm",
1820 "(V?)CVTTSD2SI64rm",
1821 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001822 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001823 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001824
1825def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1826 let Latency = 9;
1827 let NumMicroOps = 3;
1828 let ResourceCycles = [1,1,1];
1829}
1830def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1831
1832def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1833 let Latency = 9;
1834 let NumMicroOps = 3;
1835 let ResourceCycles = [1,1,1];
1836}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001837def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001838def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001839 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001840 "CVTTPD2DQrm",
1841 "MMX_CVTPD2PIirm",
1842 "MMX_CVTPI2PDirm",
1843 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001844 "(V?)CVTDQ2PDrm",
1845 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
1847def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1848 let Latency = 9;
1849 let NumMicroOps = 3;
1850 let ResourceCycles = [1,1,1];
1851}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001852def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1853 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001854
1855def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1856 let Latency = 9;
1857 let NumMicroOps = 4;
1858 let ResourceCycles = [2,1,1];
1859}
Craig Topper5a69a002018-03-21 06:28:42 +00001860def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1861 "VPSRAVDYrm",
1862 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001863
1864def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1865 let Latency = 9;
1866 let NumMicroOps = 4;
1867 let ResourceCycles = [2,1,1];
1868}
Craig Topper5a69a002018-03-21 06:28:42 +00001869def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1870 "VPHADDSWYrm",
1871 "VPHADDWYrm",
1872 "VPHSUBDYrm",
1873 "VPHSUBSWYrm",
1874 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001875
1876def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1877 let Latency = 9;
1878 let NumMicroOps = 4;
1879 let ResourceCycles = [1,1,1,1];
1880}
Craig Topper5a69a002018-03-21 06:28:42 +00001881def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1882 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001883
1884def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1885 let Latency = 9;
1886 let NumMicroOps = 5;
1887 let ResourceCycles = [1,1,3];
1888}
1889def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1890
1891def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1892 let Latency = 9;
1893 let NumMicroOps = 5;
1894 let ResourceCycles = [1,2,1,1];
1895}
Craig Topper5a69a002018-03-21 06:28:42 +00001896def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1897 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001898
Gadi Haber323f2e12017-10-24 20:19:47 +00001899def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1900 let Latency = 10;
1901 let NumMicroOps = 2;
1902 let ResourceCycles = [1,1];
1903}
Craig Topper5a69a002018-03-21 06:28:42 +00001904def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1905 "MMX_PMADDWDirm",
1906 "MMX_PMULHRSWrm",
1907 "MMX_PMULHUWirm",
1908 "MMX_PMULHWirm",
1909 "MMX_PMULLWirm",
1910 "MMX_PMULUDQirm",
1911 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001912 "(V?)PCMPGTQrm",
1913 "(V?)PHMINPOSUWrm",
1914 "(V?)PMADDUBSWrm",
1915 "(V?)PMADDWDrm",
1916 "(V?)PMULDQrm",
1917 "(V?)PMULHRSWrm",
1918 "(V?)PMULHUWrm",
1919 "(V?)PMULHWrm",
1920 "(V?)PMULLWrm",
1921 "(V?)PMULUDQrm",
1922 "(V?)PSADBWrm",
1923 "(V?)RCPPSm",
1924 "(V?)RCPSSm",
1925 "(V?)RSQRTPSm",
1926 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001927
1928def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1929 let Latency = 10;
1930 let NumMicroOps = 2;
1931 let ResourceCycles = [1,1];
1932}
Craig Topperf82867c2017-12-13 23:11:30 +00001933def: InstRW<[BWWriteResGroup116],
1934 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1935 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001936
1937def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1938 let Latency = 10;
1939 let NumMicroOps = 3;
1940 let ResourceCycles = [2,1];
1941}
Craig Topper5a69a002018-03-21 06:28:42 +00001942def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1943 "FICOM32m",
1944 "FICOMP16m",
1945 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001946
1947def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1948 let Latency = 10;
1949 let NumMicroOps = 3;
1950 let ResourceCycles = [1,1,1];
1951}
1952def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1953
1954def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1955 let Latency = 10;
1956 let NumMicroOps = 4;
1957 let ResourceCycles = [1,2,1];
1958}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001959def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
1960 "(V?)HADDPSrm",
1961 "(V?)HSUBPDrm",
1962 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001963
1964def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1965 let Latency = 10;
1966 let NumMicroOps = 4;
1967 let ResourceCycles = [1,1,1,1];
1968}
1969def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1970
1971def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001972 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001973 let NumMicroOps = 4;
1974 let ResourceCycles = [1,1,1,1];
1975}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001976def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001977
Craig Topper8104f262018-04-02 05:33:28 +00001978def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001979 let Latency = 11;
1980 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001981 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001982}
Craig Topper8104f262018-04-02 05:33:28 +00001983def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1984
1985def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1986 let Latency = 11;
1987 let NumMicroOps = 1;
1988 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1989}
1990def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001991
1992def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1993 let Latency = 11;
1994 let NumMicroOps = 2;
1995 let ResourceCycles = [1,1];
1996}
Craig Topper5a69a002018-03-21 06:28:42 +00001997def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1998 "MUL_F64m",
1999 "VPCMPGTQYrm",
2000 "VPMADDUBSWYrm",
2001 "VPMADDWDYrm",
2002 "VPMULDQYrm",
2003 "VPMULHRSWYrm",
2004 "VPMULHUWYrm",
2005 "VPMULHWYrm",
2006 "VPMULLWYrm",
2007 "VPMULUDQYrm",
2008 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
2010def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
2011 let Latency = 11;
2012 let NumMicroOps = 2;
2013 let ResourceCycles = [1,1];
2014}
Craig Topperf82867c2017-12-13 23:11:30 +00002015def: InstRW<[BWWriteResGroup124],
2016 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002017
Gadi Haber323f2e12017-10-24 20:19:47 +00002018def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
2019 let Latency = 11;
2020 let NumMicroOps = 3;
2021 let ResourceCycles = [2,1];
2022}
Craig Topper5a69a002018-03-21 06:28:42 +00002023def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
2024 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002025
2026def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
2027 let Latency = 11;
2028 let NumMicroOps = 3;
2029 let ResourceCycles = [2,1];
2030}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002031def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
2032 "(V?)ROUNDPSm",
2033 "(V?)ROUNDSDm",
2034 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
2036def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2037 let Latency = 11;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [1,1,1];
2040}
2041def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
2042
2043def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
2044 let Latency = 11;
2045 let NumMicroOps = 4;
2046 let ResourceCycles = [1,2,1];
2047}
Craig Topper5a69a002018-03-21 06:28:42 +00002048def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
2049 "VHADDPSYrm",
2050 "VHSUBPDYrm",
2051 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002052
2053def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2054 let Latency = 11;
2055 let NumMicroOps = 6;
2056 let ResourceCycles = [1,1,1,1,2];
2057}
Craig Topper5a69a002018-03-21 06:28:42 +00002058def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
2059 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002060
2061def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
2062 let Latency = 11;
2063 let NumMicroOps = 7;
2064 let ResourceCycles = [2,2,3];
2065}
Craig Topper5a69a002018-03-21 06:28:42 +00002066def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
2067 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002068
2069def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2070 let Latency = 11;
2071 let NumMicroOps = 9;
2072 let ResourceCycles = [1,4,1,3];
2073}
2074def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
2075
2076def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
2077 let Latency = 11;
2078 let NumMicroOps = 11;
2079 let ResourceCycles = [2,9];
2080}
Craig Topper2d451e72018-03-18 08:38:06 +00002081def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
2082def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002083
Gadi Haber323f2e12017-10-24 20:19:47 +00002084def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
2085 let Latency = 12;
2086 let NumMicroOps = 3;
2087 let ResourceCycles = [2,1];
2088}
Craig Topper5a69a002018-03-21 06:28:42 +00002089def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
2090 "ADD_FI32m",
2091 "SUBR_FI16m",
2092 "SUBR_FI32m",
2093 "SUB_FI16m",
2094 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002095 "VROUNDPDYm",
2096 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002097
2098def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2099 let Latency = 12;
2100 let NumMicroOps = 4;
2101 let ResourceCycles = [1,2,1];
2102}
Craig Topper5a69a002018-03-21 06:28:42 +00002103def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002104
Craig Topper8104f262018-04-02 05:33:28 +00002105def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002106 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00002107 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002108 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002109}
Craig Topper8104f262018-04-02 05:33:28 +00002110def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
2111
2112def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2113 let Latency = 11;
2114 let NumMicroOps = 1;
2115 let ResourceCycles = [1,4];
2116}
2117def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002118
2119def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
2120 let Latency = 13;
2121 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002122 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002123}
2124def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
2125
Craig Topper8104f262018-04-02 05:33:28 +00002126def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002127 let Latency = 14;
2128 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002129 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002130}
Craig Topper8104f262018-04-02 05:33:28 +00002131def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2132
2133def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2134 let Latency = 14;
2135 let NumMicroOps = 1;
2136 let ResourceCycles = [1,4];
2137}
2138def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002139
Gadi Haber323f2e12017-10-24 20:19:47 +00002140def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2141 let Latency = 14;
2142 let NumMicroOps = 3;
2143 let ResourceCycles = [1,1,1];
2144}
Craig Topper5a69a002018-03-21 06:28:42 +00002145def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2146 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002147
2148def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2149 let Latency = 14;
2150 let NumMicroOps = 4;
2151 let ResourceCycles = [2,1,1];
2152}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002153def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002154
2155def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2156 let Latency = 14;
2157 let NumMicroOps = 4;
2158 let ResourceCycles = [1,1,1,1];
2159}
Craig Topper5a69a002018-03-21 06:28:42 +00002160def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002161
2162def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2163 let Latency = 14;
2164 let NumMicroOps = 8;
2165 let ResourceCycles = [2,2,1,3];
2166}
2167def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2168
2169def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2170 let Latency = 14;
2171 let NumMicroOps = 10;
2172 let ResourceCycles = [2,3,1,4];
2173}
2174def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2175
2176def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2177 let Latency = 14;
2178 let NumMicroOps = 12;
2179 let ResourceCycles = [2,1,4,5];
2180}
2181def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2182
2183def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2184 let Latency = 15;
2185 let NumMicroOps = 1;
2186 let ResourceCycles = [1];
2187}
Craig Topper5a69a002018-03-21 06:28:42 +00002188def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2189 "DIVR_FST0r",
2190 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002191
Gadi Haber323f2e12017-10-24 20:19:47 +00002192def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2193 let Latency = 15;
2194 let NumMicroOps = 10;
2195 let ResourceCycles = [1,1,1,4,1,2];
2196}
Craig Topper13a16502018-03-19 00:56:09 +00002197def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198
Craig Topper8104f262018-04-02 05:33:28 +00002199def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002200 let Latency = 16;
2201 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002202 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002203}
Craig Topper5a69a002018-03-21 06:28:42 +00002204def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2205 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002206
2207def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2208 let Latency = 16;
2209 let NumMicroOps = 3;
2210 let ResourceCycles = [2,1];
2211}
2212def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2213
Gadi Haber323f2e12017-10-24 20:19:47 +00002214def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2215 let Latency = 16;
2216 let NumMicroOps = 14;
2217 let ResourceCycles = [1,1,1,4,2,5];
2218}
2219def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2220
2221def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2222 let Latency = 16;
2223 let NumMicroOps = 16;
2224 let ResourceCycles = [16];
2225}
Craig Topper5a69a002018-03-21 06:28:42 +00002226def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002227
Craig Topper8104f262018-04-02 05:33:28 +00002228def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002229 let Latency = 17;
2230 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002231 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002232}
2233def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2234
2235def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2236 let Latency = 17;
2237 let NumMicroOps = 4;
2238 let ResourceCycles = [2,1,1];
2239}
Craig Topper5a69a002018-03-21 06:28:42 +00002240def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2241 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002242
Craig Topper8104f262018-04-02 05:33:28 +00002243def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002244 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002245 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002246 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002247}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002248def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2249 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002250
Gadi Haber323f2e12017-10-24 20:19:47 +00002251def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2252 let Latency = 18;
2253 let NumMicroOps = 8;
2254 let ResourceCycles = [1,1,1,5];
2255}
Craig Topper5a69a002018-03-21 06:28:42 +00002256def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002257def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002258
2259def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2260 let Latency = 18;
2261 let NumMicroOps = 11;
2262 let ResourceCycles = [2,1,1,3,1,3];
2263}
Craig Topper13a16502018-03-19 00:56:09 +00002264def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002265
Craig Topper8104f262018-04-02 05:33:28 +00002266def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002267 let Latency = 19;
2268 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002269 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002270}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002271def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002272 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002273
Gadi Haber323f2e12017-10-24 20:19:47 +00002274def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2275 let Latency = 19;
2276 let NumMicroOps = 5;
2277 let ResourceCycles = [2,1,1,1];
2278}
Craig Topper5a69a002018-03-21 06:28:42 +00002279def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002280
Gadi Haber323f2e12017-10-24 20:19:47 +00002281def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2282 let Latency = 20;
2283 let NumMicroOps = 1;
2284 let ResourceCycles = [1];
2285}
Craig Topper5a69a002018-03-21 06:28:42 +00002286def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2287 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002288 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002289
2290def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2291 let Latency = 20;
2292 let NumMicroOps = 5;
2293 let ResourceCycles = [2,1,1,1];
2294}
2295def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2296
2297def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2298 let Latency = 20;
2299 let NumMicroOps = 8;
2300 let ResourceCycles = [1,1,1,1,1,1,2];
2301}
Craig Topper5a69a002018-03-21 06:28:42 +00002302def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2303 "INSL",
2304 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002305
Craig Topper8104f262018-04-02 05:33:28 +00002306def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002307 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002308 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002309 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002310}
Craig Topper8104f262018-04-02 05:33:28 +00002311def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2312
2313def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2314 let Latency = 16;
2315 let NumMicroOps = 1;
2316 let ResourceCycles = [1,8];
2317}
2318def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002319
2320def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2321 let Latency = 21;
2322 let NumMicroOps = 2;
2323 let ResourceCycles = [1,1];
2324}
Craig Topper5a69a002018-03-21 06:28:42 +00002325def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2326 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002327
Craig Topper8104f262018-04-02 05:33:28 +00002328def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002329 let Latency = 21;
2330 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002331 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002332}
2333def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2334
2335def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2336 let Latency = 21;
2337 let NumMicroOps = 19;
2338 let ResourceCycles = [2,1,4,1,1,4,6];
2339}
2340def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2341
2342def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2343 let Latency = 22;
2344 let NumMicroOps = 18;
2345 let ResourceCycles = [1,1,16];
2346}
2347def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2348
Craig Topper8104f262018-04-02 05:33:28 +00002349def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002350 let Latency = 23;
2351 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002352 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002353}
2354def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2355
Craig Topper8104f262018-04-02 05:33:28 +00002356def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002357 let Latency = 23;
2358 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002359 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002360}
2361def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2362
Gadi Haber323f2e12017-10-24 20:19:47 +00002363def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2364 let Latency = 23;
2365 let NumMicroOps = 19;
2366 let ResourceCycles = [3,1,15];
2367}
Craig Topper391c6f92017-12-10 01:24:08 +00002368def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002369
2370def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2371 let Latency = 24;
2372 let NumMicroOps = 3;
2373 let ResourceCycles = [1,1,1];
2374}
Craig Topper5a69a002018-03-21 06:28:42 +00002375def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2376 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002377
Craig Topper8104f262018-04-02 05:33:28 +00002378def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002379 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002380 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002381 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002382}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002383def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2384 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002385
2386def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2387 let Latency = 26;
2388 let NumMicroOps = 2;
2389 let ResourceCycles = [1,1];
2390}
Craig Topper5a69a002018-03-21 06:28:42 +00002391def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002392 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002393
Craig Topper8104f262018-04-02 05:33:28 +00002394def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002395 let Latency = 27;
2396 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002397 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002398}
2399def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2400
2401def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2402 let Latency = 29;
2403 let NumMicroOps = 3;
2404 let ResourceCycles = [1,1,1];
2405}
Craig Topper5a69a002018-03-21 06:28:42 +00002406def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2407 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002408
Craig Topper8104f262018-04-02 05:33:28 +00002409def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002410 let Latency = 29;
2411 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002412 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002413}
2414def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2415
2416def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2417 let Latency = 22;
2418 let NumMicroOps = 7;
2419 let ResourceCycles = [1,3,2,1];
2420}
Craig Topper17a31182017-12-16 18:35:29 +00002421def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002422
2423def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2424 let Latency = 23;
2425 let NumMicroOps = 9;
2426 let ResourceCycles = [1,3,4,1];
2427}
Craig Topper17a31182017-12-16 18:35:29 +00002428def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002429
2430def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2431 let Latency = 24;
2432 let NumMicroOps = 9;
2433 let ResourceCycles = [1,5,2,1];
2434}
Craig Topper17a31182017-12-16 18:35:29 +00002435def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002436
2437def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2438 let Latency = 25;
2439 let NumMicroOps = 7;
2440 let ResourceCycles = [1,3,2,1];
2441}
Craig Topper17a31182017-12-16 18:35:29 +00002442def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2443 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002444
2445def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2446 let Latency = 26;
2447 let NumMicroOps = 9;
2448 let ResourceCycles = [1,5,2,1];
2449}
Craig Topper17a31182017-12-16 18:35:29 +00002450def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002451
2452def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2453 let Latency = 26;
2454 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002455 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002456}
Craig Topper17a31182017-12-16 18:35:29 +00002457def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002458
2459def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2460 let Latency = 27;
2461 let NumMicroOps = 9;
2462 let ResourceCycles = [1,5,2,1];
2463}
Craig Topper17a31182017-12-16 18:35:29 +00002464def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002465
Gadi Haber323f2e12017-10-24 20:19:47 +00002466def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2467 let Latency = 29;
2468 let NumMicroOps = 27;
2469 let ResourceCycles = [1,5,1,1,19];
2470}
2471def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2472
2473def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2474 let Latency = 30;
2475 let NumMicroOps = 28;
2476 let ResourceCycles = [1,6,1,1,19];
2477}
Craig Topper2d451e72018-03-18 08:38:06 +00002478def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002479
2480def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2481 let Latency = 31;
2482 let NumMicroOps = 31;
2483 let ResourceCycles = [8,1,21,1];
2484}
2485def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2486
Craig Topper8104f262018-04-02 05:33:28 +00002487def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2488 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002489 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002490 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002491}
2492def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2493
2494def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2495 let Latency = 34;
2496 let NumMicroOps = 8;
2497 let ResourceCycles = [2,2,2,1,1];
2498}
Craig Topper13a16502018-03-19 00:56:09 +00002499def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002500
2501def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2502 let Latency = 34;
2503 let NumMicroOps = 23;
2504 let ResourceCycles = [1,5,3,4,10];
2505}
Craig Topper5a69a002018-03-21 06:28:42 +00002506def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2507 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002508
2509def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2510 let Latency = 35;
2511 let NumMicroOps = 8;
2512 let ResourceCycles = [2,2,2,1,1];
2513}
Craig Topper13a16502018-03-19 00:56:09 +00002514def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002515
2516def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2517 let Latency = 35;
2518 let NumMicroOps = 23;
2519 let ResourceCycles = [1,5,2,1,4,10];
2520}
Craig Topper5a69a002018-03-21 06:28:42 +00002521def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2522 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002523
Craig Topper8104f262018-04-02 05:33:28 +00002524def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2525 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002526 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002527 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002528}
2529def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2530
2531def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2532 let Latency = 42;
2533 let NumMicroOps = 22;
2534 let ResourceCycles = [2,20];
2535}
Craig Topper2d451e72018-03-18 08:38:06 +00002536def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002537
2538def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2539 let Latency = 60;
2540 let NumMicroOps = 64;
2541 let ResourceCycles = [2,2,8,1,10,2,39];
2542}
2543def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002544
2545def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2546 let Latency = 63;
2547 let NumMicroOps = 88;
2548 let ResourceCycles = [4,4,31,1,2,1,45];
2549}
Craig Topper2d451e72018-03-18 08:38:06 +00002550def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002551
2552def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2553 let Latency = 63;
2554 let NumMicroOps = 90;
2555 let ResourceCycles = [4,2,33,1,2,1,47];
2556}
Craig Topper2d451e72018-03-18 08:38:06 +00002557def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002558
2559def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2560 let Latency = 75;
2561 let NumMicroOps = 15;
2562 let ResourceCycles = [6,3,6];
2563}
2564def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2565
2566def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2567 let Latency = 80;
2568 let NumMicroOps = 32;
2569 let ResourceCycles = [7,7,3,3,1,11];
2570}
2571def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2572
2573def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2574 let Latency = 115;
2575 let NumMicroOps = 100;
2576 let ResourceCycles = [9,9,11,8,1,11,21,30];
2577}
2578def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002579
2580} // SchedModel
2581