blob: 2308ba502977b32514a1a0d8e938457392f4c39a [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.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // 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.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000189defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000190defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // 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
Craig Topper05242bf2018-04-21 18:07:36 +0000306// Load/store MXCSR.
307def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
308def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
309
Gadi Haber323f2e12017-10-24 20:19:47 +0000310// Nop, not very useful expect it provides a model for nops!
311def : WriteRes<WriteNop, []>;
312
313////////////////////////////////////////////////////////////////////////////////
314// Horizontal add/sub instructions.
315////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000317defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
318defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Remaining instrs.
321
322def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
323 let Latency = 1;
324 let NumMicroOps = 1;
325 let ResourceCycles = [1];
326}
Craig Topper5a69a002018-03-21 06:28:42 +0000327def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
328 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000329 "(V?)MOVPDI2DIrr",
330 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000331 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000332 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000333 "VTESTPD(Y?)rr",
334 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000335
336def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
337 let Latency = 1;
338 let NumMicroOps = 1;
339 let ResourceCycles = [1];
340}
Craig Topper5a69a002018-03-21 06:28:42 +0000341def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
342 "COM_FST0r",
343 "UCOM_FPr",
344 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000345
346def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
347 let Latency = 1;
348 let NumMicroOps = 1;
349 let ResourceCycles = [1];
350}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000351def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000352 "MMX_MOVD64to64rr",
353 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000354 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000355 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000356 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000357 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000358 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000359
360def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
361 let Latency = 1;
362 let NumMicroOps = 1;
363 let ResourceCycles = [1];
364}
365def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
366
367def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Craig Topper5a69a002018-03-21 06:28:42 +0000372def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
373 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000374
375def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
376 let Latency = 1;
377 let NumMicroOps = 1;
378 let ResourceCycles = [1];
379}
Craig Topperfbe31322018-04-05 21:56:19 +0000380def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000381def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
382 "ADC(16|32|64)i",
383 "ADC(8|16|32|64)rr",
384 "ADCX(32|64)rr",
385 "ADOX(32|64)rr",
386 "BT(16|32|64)ri8",
387 "BT(16|32|64)rr",
388 "BTC(16|32|64)ri8",
389 "BTC(16|32|64)rr",
390 "BTR(16|32|64)ri8",
391 "BTR(16|32|64)rr",
392 "BTS(16|32|64)ri8",
393 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000394 "SBB(16|32|64)ri",
395 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000396 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000397
398def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
399 let Latency = 1;
400 let NumMicroOps = 1;
401 let ResourceCycles = [1];
402}
Craig Topper5a69a002018-03-21 06:28:42 +0000403def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
404 "BLSI(32|64)rr",
405 "BLSMSK(32|64)rr",
406 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000407 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000408
409def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
410 let Latency = 1;
411 let NumMicroOps = 1;
412 let ResourceCycles = [1];
413}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000414def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000415 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000416
417def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
418 let Latency = 1;
419 let NumMicroOps = 1;
420 let ResourceCycles = [1];
421}
Craig Topperdfccafe2018-04-18 06:41:25 +0000422def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000423 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000424 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000425 "SGDT64m",
426 "SIDT64m",
427 "SLDT64m",
428 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000429 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000430 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000431
432def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
433 let Latency = 1;
434 let NumMicroOps = 2;
435 let ResourceCycles = [1,1];
436}
Craig Topper5a69a002018-03-21 06:28:42 +0000437def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
438 "MMX_MOVD64from64rm",
439 "MMX_MOVD64mr",
440 "MMX_MOVNTQmr",
441 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000442 "MOVNTI_64mr",
443 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000444 "ST_FP32m",
445 "ST_FP64m",
446 "ST_FP80m",
447 "VEXTRACTF128mr",
448 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000449 "(V?)MOVAPD(Y?)mr",
450 "(V?)MOVAPS(Y?)mr",
451 "(V?)MOVDQA(Y?)mr",
452 "(V?)MOVDQU(Y?)mr",
453 "(V?)MOVHPDmr",
454 "(V?)MOVHPSmr",
455 "(V?)MOVLPDmr",
456 "(V?)MOVLPSmr",
457 "(V?)MOVNTDQ(V?)mr",
458 "(V?)MOVNTPD(V?)mr",
459 "(V?)MOVNTPS(V?)mr",
460 "(V?)MOVPDI2DImr",
461 "(V?)MOVPQI2QImr",
462 "(V?)MOVPQIto64mr",
463 "(V?)MOVSDmr",
464 "(V?)MOVSSmr",
465 "(V?)MOVUPD(Y?)mr",
466 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000467
468def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
469 let Latency = 2;
470 let NumMicroOps = 2;
471 let ResourceCycles = [2];
472}
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000473def: InstRW<[BWWriteResGroup11], (instregex "MMX_PINSRWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000474 "(V?)PINSRBrr",
475 "(V?)PINSRDrr",
476 "(V?)PINSRQrr",
477 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000478
479def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
480 let Latency = 2;
481 let NumMicroOps = 2;
482 let ResourceCycles = [2];
483}
484def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
485
486def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
487 let Latency = 2;
488 let NumMicroOps = 2;
489 let ResourceCycles = [2];
490}
Craig Topper5a69a002018-03-21 06:28:42 +0000491def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
492 "ROL(8|16|32|64)ri",
493 "ROR(8|16|32|64)r1",
494 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000495
496def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
497 let Latency = 2;
498 let NumMicroOps = 2;
499 let ResourceCycles = [2];
500}
Craig Topper5a69a002018-03-21 06:28:42 +0000501def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
502 "MFENCE",
503 "WAIT",
504 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000505
506def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
507 let Latency = 2;
508 let NumMicroOps = 2;
509 let ResourceCycles = [1,1];
510}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000511def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
512 "VCVTPH2PS(Y?)rr",
513 "(V?)CVTPS2PDrr",
514 "(V?)CVTSS2SDrr",
515 "(V?)EXTRACTPSrr",
516 "(V?)PEXTRBrr",
517 "(V?)PEXTRDrr",
518 "(V?)PEXTRQrr",
519 "(V?)PEXTRWrr",
520 "(V?)PSLLDrr",
521 "(V?)PSLLQrr",
522 "(V?)PSLLWrr",
523 "(V?)PSRADrr",
524 "(V?)PSRAWrr",
525 "(V?)PSRLDrr",
526 "(V?)PSRLQrr",
527 "(V?)PSRLWrr",
528 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000529
530def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
531 let Latency = 2;
532 let NumMicroOps = 2;
533 let ResourceCycles = [1,1];
534}
535def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
536
537def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
538 let Latency = 2;
539 let NumMicroOps = 2;
540 let ResourceCycles = [1,1];
541}
542def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
543
544def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
545 let Latency = 2;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
549def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
550
551def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
552 let Latency = 2;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
Craig Topper498875f2018-04-04 17:54:19 +0000556def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
557
558def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
559 let Latency = 1;
560 let NumMicroOps = 1;
561 let ResourceCycles = [1];
562}
563def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000564
565def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
566 let Latency = 2;
567 let NumMicroOps = 2;
568 let ResourceCycles = [1,1];
569}
Craig Topper2d451e72018-03-18 08:38:06 +0000570def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000571def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000572def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
573 "ADC8ri",
574 "CMOV(A|BE)(16|32|64)rr",
575 "SBB8i8",
576 "SBB8ri",
577 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000578
579def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
580 let Latency = 2;
581 let NumMicroOps = 3;
582 let ResourceCycles = [1,1,1];
583}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000584def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
585 "(V?)PEXTRBmr",
586 "(V?)PEXTRDmr",
587 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000588 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000589
590def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
591 let Latency = 2;
592 let NumMicroOps = 3;
593 let ResourceCycles = [1,1,1];
594}
595def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
596
Gadi Haber323f2e12017-10-24 20:19:47 +0000597def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
598 let Latency = 2;
599 let NumMicroOps = 3;
600 let ResourceCycles = [1,1,1];
601}
602def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
603
604def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
605 let Latency = 2;
606 let NumMicroOps = 3;
607 let ResourceCycles = [1,1,1];
608}
Craig Topper2d451e72018-03-18 08:38:06 +0000609def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000610def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
611 "PUSH64i8",
612 "STOSB",
613 "STOSL",
614 "STOSQ",
615 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000616
Gadi Haber323f2e12017-10-24 20:19:47 +0000617def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
618 let Latency = 3;
619 let NumMicroOps = 1;
620 let ResourceCycles = [1];
621}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000622def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000623 "PDEP(32|64)rr",
624 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000625 "SHLD(16|32|64)rri8",
626 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000627 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000628
629def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000630 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Clement Courbet327fac42018-03-07 08:14:02 +0000634def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000635
636def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
637 let Latency = 3;
638 let NumMicroOps = 1;
639 let ResourceCycles = [1];
640}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000641def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
642 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000643 "VPMOVSXBDYrr",
644 "VPMOVSXBQYrr",
645 "VPMOVSXBWYrr",
646 "VPMOVSXDQYrr",
647 "VPMOVSXWDYrr",
648 "VPMOVSXWQYrr",
649 "VPMOVZXBDYrr",
650 "VPMOVZXBQYrr",
651 "VPMOVZXBWYrr",
652 "VPMOVZXDQYrr",
653 "VPMOVZXWDYrr",
654 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000655
656def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
657 let Latency = 3;
658 let NumMicroOps = 1;
659 let ResourceCycles = [1];
660}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000661def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
662 "(V?)MULPS(Y?)rr",
663 "(V?)MULSDrr",
664 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000665
666def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000667 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000668 let NumMicroOps = 3;
669 let ResourceCycles = [3];
670}
Craig Topperb5f26592018-04-19 18:00:17 +0000671def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
672 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
673 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000674
675def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
676 let Latency = 3;
677 let NumMicroOps = 3;
678 let ResourceCycles = [2,1];
679}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000680def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
681 "VPSRAVD(Y?)rr",
682 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000683
Gadi Haber323f2e12017-10-24 20:19:47 +0000684def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
685 let Latency = 3;
686 let NumMicroOps = 3;
687 let ResourceCycles = [2,1];
688}
Craig Topper5a69a002018-03-21 06:28:42 +0000689def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
690 "MMX_PACKSSWBirr",
691 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000692
693def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
694 let Latency = 3;
695 let NumMicroOps = 3;
696 let ResourceCycles = [1,2];
697}
698def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
699
700def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
701 let Latency = 3;
702 let NumMicroOps = 3;
703 let ResourceCycles = [1,2];
704}
Craig Topper5a69a002018-03-21 06:28:42 +0000705def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
706 "RCL(8|16|32|64)ri",
707 "RCR(8|16|32|64)r1",
708 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000709
710def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
711 let Latency = 3;
712 let NumMicroOps = 3;
713 let ResourceCycles = [2,1];
714}
Craig Topper5a69a002018-03-21 06:28:42 +0000715def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
716 "ROR(8|16|32|64)rCL",
717 "SAR(8|16|32|64)rCL",
718 "SHL(8|16|32|64)rCL",
719 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000720
721def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
722 let Latency = 3;
723 let NumMicroOps = 4;
724 let ResourceCycles = [1,1,1,1];
725}
726def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
727
728def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
729 let Latency = 3;
730 let NumMicroOps = 4;
731 let ResourceCycles = [1,1,1,1];
732}
Craig Topper5a69a002018-03-21 06:28:42 +0000733def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
734 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000735
736def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
737 let Latency = 4;
738 let NumMicroOps = 2;
739 let ResourceCycles = [1,1];
740}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000741def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
742 "(V?)CVTSD2SIrr",
743 "(V?)CVTSS2SI64rr",
744 "(V?)CVTSS2SIrr",
745 "(V?)CVTTSD2SI64rr",
746 "(V?)CVTTSD2SIrr",
747 "(V?)CVTTSS2SI64rr",
748 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000749
750def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
751 let Latency = 4;
752 let NumMicroOps = 2;
753 let ResourceCycles = [1,1];
754}
Craig Topper5a69a002018-03-21 06:28:42 +0000755def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
756 "VPSLLDYrr",
757 "VPSLLQYrr",
758 "VPSLLWYrr",
759 "VPSRADYrr",
760 "VPSRAWYrr",
761 "VPSRLDYrr",
762 "VPSRLQYrr",
763 "VPSRLWYrr",
764 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000765
766def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
767 let Latency = 4;
768 let NumMicroOps = 2;
769 let ResourceCycles = [1,1];
770}
771def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
772
773def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
774 let Latency = 4;
775 let NumMicroOps = 2;
776 let ResourceCycles = [1,1];
777}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000778def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000779def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000780 "MMX_CVTPI2PDirr",
781 "MMX_CVTPS2PIirr",
782 "MMX_CVTTPD2PIirr",
783 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000784 "(V?)CVTDQ2PDrr",
785 "(V?)CVTPD2DQrr",
786 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000787 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000788 "(V?)CVTSD2SSrr",
789 "(V?)CVTSI642SDrr",
790 "(V?)CVTSI2SDrr",
791 "(V?)CVTSI2SSrr",
792 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000793
794def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
795 let Latency = 4;
796 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000797 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000798}
Craig Topper5a69a002018-03-21 06:28:42 +0000799def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000800
801def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
802 let Latency = 4;
803 let NumMicroOps = 3;
804 let ResourceCycles = [1,1,1];
805}
806def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
807
808def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
809 let Latency = 4;
810 let NumMicroOps = 3;
811 let ResourceCycles = [1,1,1];
812}
Craig Topper5a69a002018-03-21 06:28:42 +0000813def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
814 "ISTT_FP32m",
815 "ISTT_FP64m",
816 "IST_F16m",
817 "IST_F32m",
818 "IST_FP16m",
819 "IST_FP32m",
820 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000821 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000822
823def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
824 let Latency = 4;
825 let NumMicroOps = 4;
826 let ResourceCycles = [4];
827}
828def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
829
830def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
831 let Latency = 4;
832 let NumMicroOps = 4;
833 let ResourceCycles = [1,3];
834}
835def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
836
837def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
838 let Latency = 5;
839 let NumMicroOps = 1;
840 let ResourceCycles = [1];
841}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000842def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000843
Gadi Haber323f2e12017-10-24 20:19:47 +0000844def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
845 let Latency = 5;
846 let NumMicroOps = 1;
847 let ResourceCycles = [1];
848}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000849def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000850 "MOVSX(16|32|64)rm32",
851 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000852 "MOVZX(16|32|64)rm16",
853 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000854 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000855 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000856 "(V?)MOVSHDUPrm",
857 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000858 "VPBROADCASTDrm",
859 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000860
861def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
862 let Latency = 5;
863 let NumMicroOps = 3;
864 let ResourceCycles = [1,2];
865}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000866def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000867
868def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
869 let Latency = 5;
870 let NumMicroOps = 3;
871 let ResourceCycles = [1,1,1];
872}
873def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
874
875def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000876 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000877 let NumMicroOps = 3;
878 let ResourceCycles = [1,1,1];
879}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000880def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000881
882def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
883 let Latency = 5;
884 let NumMicroOps = 4;
885 let ResourceCycles = [1,1,1,1];
886}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000887def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
888 "VMASKMOVPS(Y?)mr",
889 "VPMASKMOVD(Y?)mr",
890 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000891
892def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
893 let Latency = 5;
894 let NumMicroOps = 5;
895 let ResourceCycles = [1,4];
896}
897def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
898
899def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
900 let Latency = 5;
901 let NumMicroOps = 5;
902 let ResourceCycles = [1,4];
903}
904def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
905
906def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
907 let Latency = 5;
908 let NumMicroOps = 5;
909 let ResourceCycles = [2,3];
910}
Craig Topper5a69a002018-03-21 06:28:42 +0000911def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000912
913def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
914 let Latency = 5;
915 let NumMicroOps = 6;
916 let ResourceCycles = [1,1,4];
917}
Craig Topper5a69a002018-03-21 06:28:42 +0000918def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000919
920def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
921 let Latency = 6;
922 let NumMicroOps = 1;
923 let ResourceCycles = [1];
924}
Craig Topper5a69a002018-03-21 06:28:42 +0000925def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
926 "LD_F64m",
927 "LD_F80m",
928 "VBROADCASTF128",
929 "VBROADCASTI128",
930 "VBROADCASTSDYrm",
931 "VBROADCASTSSYrm",
932 "VLDDQUYrm",
933 "VMOVAPDYrm",
934 "VMOVAPSYrm",
935 "VMOVDDUPYrm",
936 "VMOVDQAYrm",
937 "VMOVDQUYrm",
938 "VMOVNTDQAYrm",
939 "VMOVSHDUPYrm",
940 "VMOVSLDUPYrm",
941 "VMOVUPDYrm",
942 "VMOVUPSYrm",
943 "VPBROADCASTDYrm",
944 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000945 "(V?)ROUNDPD(Y?)r",
946 "(V?)ROUNDPS(Y?)r",
947 "(V?)ROUNDSDr",
948 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000949
950def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
951 let Latency = 6;
952 let NumMicroOps = 2;
953 let ResourceCycles = [1,1];
954}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000955def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000956 "MMX_PSLLQrm",
957 "MMX_PSLLWrm",
958 "MMX_PSRADrm",
959 "MMX_PSRAWrm",
960 "MMX_PSRLDrm",
961 "MMX_PSRLQrm",
962 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000963 "VCVTPH2PS(Y?)rm",
964 "(V?)CVTPS2PDrm",
965 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000966 "VPSLLVQrm",
967 "VPSRLVQrm",
968 "VTESTPDrm",
969 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000970
971def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
972 let Latency = 6;
973 let NumMicroOps = 2;
974 let ResourceCycles = [1,1];
975}
Craig Topper5a69a002018-03-21 06:28:42 +0000976def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
977 "VCVTPD2DQYrr",
978 "VCVTPD2PSYrr",
979 "VCVTPS2PHYrr",
980 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000981
982def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
983 let Latency = 6;
984 let NumMicroOps = 2;
985 let ResourceCycles = [1,1];
986}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000987def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +0000988 "MMX_PINSRWrm",
989 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000990 "MMX_PUNPCKHBWirm",
991 "MMX_PUNPCKHDQirm",
992 "MMX_PUNPCKHWDirm",
993 "MMX_PUNPCKLBWirm",
994 "MMX_PUNPCKLDQirm",
995 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000996 "(V?)INSERTPSrm",
997 "(V?)MOVHPDrm",
998 "(V?)MOVHPSrm",
999 "(V?)MOVLPDrm",
1000 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001001 "(V?)PACKSSDWrm",
1002 "(V?)PACKSSWBrm",
1003 "(V?)PACKUSDWrm",
1004 "(V?)PACKUSWBrm",
1005 "(V?)PALIGNRrmi",
1006 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001007 "VPERMILPDmi",
1008 "VPERMILPDrm",
1009 "VPERMILPSmi",
1010 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001011 "(V?)PINSRBrm",
1012 "(V?)PINSRDrm",
1013 "(V?)PINSRQrm",
1014 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001015 "(V?)PSHUFBrm",
1016 "(V?)PSHUFDmi",
1017 "(V?)PSHUFHWmi",
1018 "(V?)PSHUFLWmi",
1019 "(V?)PUNPCKHBWrm",
1020 "(V?)PUNPCKHDQrm",
1021 "(V?)PUNPCKHQDQrm",
1022 "(V?)PUNPCKHWDrm",
1023 "(V?)PUNPCKLBWrm",
1024 "(V?)PUNPCKLDQrm",
1025 "(V?)PUNPCKLQDQrm",
1026 "(V?)PUNPCKLWDrm",
1027 "(V?)SHUFPDrmi",
1028 "(V?)SHUFPSrmi",
1029 "(V?)UNPCKHPDrm",
1030 "(V?)UNPCKHPSrm",
1031 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001032 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001033
1034def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1035 let Latency = 6;
1036 let NumMicroOps = 2;
1037 let ResourceCycles = [1,1];
1038}
Craig Topper5a69a002018-03-21 06:28:42 +00001039def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1040 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001041
1042def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1043 let Latency = 6;
1044 let NumMicroOps = 2;
1045 let ResourceCycles = [1,1];
1046}
Craig Topperdfccafe2018-04-18 06:41:25 +00001047def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001048def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1049 ADCX32rm, ADCX64rm,
1050 ADOX32rm, ADOX64rm,
1051 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001052
1053def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1054 let Latency = 6;
1055 let NumMicroOps = 2;
1056 let ResourceCycles = [1,1];
1057}
Craig Topper5a69a002018-03-21 06:28:42 +00001058def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1059 "BLSI(32|64)rm",
1060 "BLSMSK(32|64)rm",
1061 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001062 "MMX_PADD(B|D|Q|W)irm",
1063 "MMX_PADDS(B|W)irm",
1064 "MMX_PADDUS(B|W)irm",
1065 "MMX_PAVG(B|W)irm",
1066 "MMX_PCMPEQ(B|D|W)irm",
1067 "MMX_PCMPGT(B|D|W)irm",
1068 "MMX_P(MAX|MIN)SWirm",
1069 "MMX_P(MAX|MIN)UBirm",
1070 "MMX_PSIGN(B|D|W)rm",
1071 "MMX_PSUB(B|D|Q|W)irm",
1072 "MMX_PSUBS(B|W)irm",
1073 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001074 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001075 "(V?)PABSBrm",
1076 "(V?)PABSDrm",
1077 "(V?)PABSWrm",
1078 "(V?)PADDBrm",
1079 "(V?)PADDDrm",
1080 "(V?)PADDQrm",
1081 "(V?)PADDSBrm",
1082 "(V?)PADDSWrm",
1083 "(V?)PADDUSBrm",
1084 "(V?)PADDUSWrm",
1085 "(V?)PADDWrm",
1086 "(V?)PAVGBrm",
1087 "(V?)PAVGWrm",
1088 "(V?)PCMPEQBrm",
1089 "(V?)PCMPEQDrm",
1090 "(V?)PCMPEQQrm",
1091 "(V?)PCMPEQWrm",
1092 "(V?)PCMPGTBrm",
1093 "(V?)PCMPGTDrm",
1094 "(V?)PCMPGTWrm",
1095 "(V?)PMAXSBrm",
1096 "(V?)PMAXSDrm",
1097 "(V?)PMAXSWrm",
1098 "(V?)PMAXUBrm",
1099 "(V?)PMAXUDrm",
1100 "(V?)PMAXUWrm",
1101 "(V?)PMINSBrm",
1102 "(V?)PMINSDrm",
1103 "(V?)PMINSWrm",
1104 "(V?)PMINUBrm",
1105 "(V?)PMINUDrm",
1106 "(V?)PMINUWrm",
1107 "(V?)PSIGNBrm",
1108 "(V?)PSIGNDrm",
1109 "(V?)PSIGNWrm",
1110 "(V?)PSUBBrm",
1111 "(V?)PSUBDrm",
1112 "(V?)PSUBQrm",
1113 "(V?)PSUBSBrm",
1114 "(V?)PSUBSWrm",
1115 "(V?)PSUBUSBrm",
1116 "(V?)PSUBUSWrm",
1117 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001118
1119def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1120 let Latency = 6;
1121 let NumMicroOps = 2;
1122 let ResourceCycles = [1,1];
1123}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001124def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001125 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001126 "VINSERTF128rm",
1127 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001128 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001129
1130def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1131 let Latency = 6;
1132 let NumMicroOps = 2;
1133 let ResourceCycles = [1,1];
1134}
Craig Topper2d451e72018-03-18 08:38:06 +00001135def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001136def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001137
1138def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1139 let Latency = 6;
1140 let NumMicroOps = 4;
1141 let ResourceCycles = [1,1,2];
1142}
Craig Topper5a69a002018-03-21 06:28:42 +00001143def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1144 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001145
1146def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1147 let Latency = 6;
1148 let NumMicroOps = 4;
1149 let ResourceCycles = [1,1,1,1];
1150}
1151def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1152
1153def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1154 let Latency = 6;
1155 let NumMicroOps = 4;
1156 let ResourceCycles = [1,1,1,1];
1157}
Craig Topper5a69a002018-03-21 06:28:42 +00001158def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1159 "BTR(16|32|64)mi8",
1160 "BTS(16|32|64)mi8",
1161 "SAR(8|16|32|64)m1",
1162 "SAR(8|16|32|64)mi",
1163 "SHL(8|16|32|64)m1",
1164 "SHL(8|16|32|64)mi",
1165 "SHR(8|16|32|64)m1",
1166 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001167
1168def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1169 let Latency = 6;
1170 let NumMicroOps = 4;
1171 let ResourceCycles = [1,1,1,1];
1172}
Craig Topperf0d04262018-04-06 16:16:48 +00001173def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1174 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001175
1176def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1177 let Latency = 6;
1178 let NumMicroOps = 6;
1179 let ResourceCycles = [1,5];
1180}
1181def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1182
Gadi Haber323f2e12017-10-24 20:19:47 +00001183def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1184 let Latency = 7;
1185 let NumMicroOps = 2;
1186 let ResourceCycles = [1,1];
1187}
Craig Topper5a69a002018-03-21 06:28:42 +00001188def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1189 "VPSLLQYrm",
1190 "VPSLLVQYrm",
1191 "VPSLLWYrm",
1192 "VPSRADYrm",
1193 "VPSRAWYrm",
1194 "VPSRLDYrm",
1195 "VPSRLQYrm",
1196 "VPSRLVQYrm",
1197 "VPSRLWYrm",
1198 "VTESTPDYrm",
1199 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001200
1201def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1202 let Latency = 7;
1203 let NumMicroOps = 2;
1204 let ResourceCycles = [1,1];
1205}
Craig Topper5a69a002018-03-21 06:28:42 +00001206def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1207 "FCOM64m",
1208 "FCOMP32m",
1209 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001210
1211def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1212 let Latency = 7;
1213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
Craig Topper5a69a002018-03-21 06:28:42 +00001216def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1217 "VANDNPSYrm",
1218 "VANDPDYrm",
1219 "VANDPSYrm",
1220 "VORPDYrm",
1221 "VORPSYrm",
1222 "VPACKSSDWYrm",
1223 "VPACKSSWBYrm",
1224 "VPACKUSDWYrm",
1225 "VPACKUSWBYrm",
1226 "VPALIGNRYrmi",
1227 "VPBLENDWYrmi",
1228 "VPERMILPDYmi",
1229 "VPERMILPDYrm",
1230 "VPERMILPSYmi",
1231 "VPERMILPSYrm",
1232 "VPSHUFBYrm",
1233 "VPSHUFDYmi",
1234 "VPSHUFHWYmi",
1235 "VPSHUFLWYmi",
1236 "VPUNPCKHBWYrm",
1237 "VPUNPCKHDQYrm",
1238 "VPUNPCKHQDQYrm",
1239 "VPUNPCKHWDYrm",
1240 "VPUNPCKLBWYrm",
1241 "VPUNPCKLDQYrm",
1242 "VPUNPCKLQDQYrm",
1243 "VPUNPCKLWDYrm",
1244 "VSHUFPDYrmi",
1245 "VSHUFPSYrmi",
1246 "VUNPCKHPDYrm",
1247 "VUNPCKHPSYrm",
1248 "VUNPCKLPDYrm",
1249 "VUNPCKLPSYrm",
1250 "VXORPDYrm",
1251 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001252
1253def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1254 let Latency = 7;
1255 let NumMicroOps = 2;
1256 let ResourceCycles = [1,1];
1257}
Craig Topper5a69a002018-03-21 06:28:42 +00001258def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1259 "VPABSDYrm",
1260 "VPABSWYrm",
1261 "VPADDBYrm",
1262 "VPADDDYrm",
1263 "VPADDQYrm",
1264 "VPADDSBYrm",
1265 "VPADDSWYrm",
1266 "VPADDUSBYrm",
1267 "VPADDUSWYrm",
1268 "VPADDWYrm",
1269 "VPAVGBYrm",
1270 "VPAVGWYrm",
1271 "VPCMPEQBYrm",
1272 "VPCMPEQDYrm",
1273 "VPCMPEQQYrm",
1274 "VPCMPEQWYrm",
1275 "VPCMPGTBYrm",
1276 "VPCMPGTDYrm",
1277 "VPCMPGTWYrm",
1278 "VPMAXSBYrm",
1279 "VPMAXSDYrm",
1280 "VPMAXSWYrm",
1281 "VPMAXUBYrm",
1282 "VPMAXUDYrm",
1283 "VPMAXUWYrm",
1284 "VPMINSBYrm",
1285 "VPMINSDYrm",
1286 "VPMINSWYrm",
1287 "VPMINUBYrm",
1288 "VPMINUDYrm",
1289 "VPMINUWYrm",
1290 "VPSIGNBYrm",
1291 "VPSIGNDYrm",
1292 "VPSIGNWYrm",
1293 "VPSUBBYrm",
1294 "VPSUBDYrm",
1295 "VPSUBQYrm",
1296 "VPSUBSBYrm",
1297 "VPSUBSWYrm",
1298 "VPSUBUSBYrm",
1299 "VPSUBUSWYrm",
1300 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001301
1302def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1303 let Latency = 7;
1304 let NumMicroOps = 2;
1305 let ResourceCycles = [1,1];
1306}
Craig Topper5a69a002018-03-21 06:28:42 +00001307def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1308 "VBLENDPSYrmi",
1309 "VPANDNYrm",
1310 "VPANDYrm",
1311 "VPBLENDDYrmi",
1312 "VPORYrm",
1313 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001314
Gadi Haber323f2e12017-10-24 20:19:47 +00001315def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1316 let Latency = 7;
1317 let NumMicroOps = 3;
1318 let ResourceCycles = [2,1];
1319}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001320def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001321 "MMX_PACKSSWBirm",
1322 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001323 "VMASKMOVPDrm",
1324 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001325 "VPMASKMOVDrm",
1326 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001327
1328def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1329 let Latency = 7;
1330 let NumMicroOps = 3;
1331 let ResourceCycles = [1,2];
1332}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001333def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1334 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001335
1336def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1337 let Latency = 7;
1338 let NumMicroOps = 3;
1339 let ResourceCycles = [1,1,1];
1340}
Craig Topper5a69a002018-03-21 06:28:42 +00001341def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1342 "PSLLQrm",
1343 "PSLLWrm",
1344 "PSRADrm",
1345 "PSRAWrm",
1346 "PSRLDrm",
1347 "PSRLQrm",
1348 "PSRLWrm",
1349 "PTESTrm",
1350 "VPSLLDrm",
1351 "VPSLLQrm",
1352 "VPSLLWrm",
1353 "VPSRADrm",
1354 "VPSRAWrm",
1355 "VPSRLDrm",
1356 "VPSRLQrm",
1357 "VPSRLWrm",
1358 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001359
1360def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1361 let Latency = 7;
1362 let NumMicroOps = 3;
1363 let ResourceCycles = [1,1,1];
1364}
1365def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1366
Gadi Haber323f2e12017-10-24 20:19:47 +00001367def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1368 let Latency = 7;
1369 let NumMicroOps = 3;
1370 let ResourceCycles = [1,1,1];
1371}
Craig Topper5a69a002018-03-21 06:28:42 +00001372def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1373 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001374
Gadi Haber323f2e12017-10-24 20:19:47 +00001375def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1376 let Latency = 7;
1377 let NumMicroOps = 3;
1378 let ResourceCycles = [1,1,1];
1379}
Craig Topperf4cd9082018-01-19 05:47:32 +00001380def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001381
1382def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1383 let Latency = 7;
1384 let NumMicroOps = 5;
1385 let ResourceCycles = [1,1,1,2];
1386}
Craig Topper5a69a002018-03-21 06:28:42 +00001387def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1388 "ROL(8|16|32|64)mi",
1389 "ROR(8|16|32|64)m1",
1390 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001391
1392def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1393 let Latency = 7;
1394 let NumMicroOps = 5;
1395 let ResourceCycles = [1,1,1,2];
1396}
Craig Topper5a69a002018-03-21 06:28:42 +00001397def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001398
1399def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1400 let Latency = 7;
1401 let NumMicroOps = 5;
1402 let ResourceCycles = [1,1,1,1,1];
1403}
Craig Topper5a69a002018-03-21 06:28:42 +00001404def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1405 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001406
1407def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1408 let Latency = 7;
1409 let NumMicroOps = 7;
1410 let ResourceCycles = [2,2,1,2];
1411}
Craig Topper2d451e72018-03-18 08:38:06 +00001412def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001413
1414def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1415 let Latency = 8;
1416 let NumMicroOps = 2;
1417 let ResourceCycles = [1,1];
1418}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001419def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001420 "PDEP(32|64)rm",
1421 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001422 "(V?)ADDPDrm",
1423 "(V?)ADDPSrm",
1424 "(V?)ADDSDrm",
1425 "(V?)ADDSSrm",
1426 "(V?)ADDSUBPDrm",
1427 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001428 "(V?)CVTDQ2PSrm",
1429 "(V?)CVTPS2DQrm",
1430 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001431 "(V?)SUBPDrm",
1432 "(V?)SUBPSrm",
1433 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001434 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001435
1436def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001437 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001438 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001439 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001440}
Craig Topperf846e2d2018-04-19 05:34:05 +00001441def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001442
Craig Topperf846e2d2018-04-19 05:34:05 +00001443def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1444 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001445 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001446 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001447}
Craig Topper5a69a002018-03-21 06:28:42 +00001448def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001449
Gadi Haber323f2e12017-10-24 20:19:47 +00001450def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1451 let Latency = 8;
1452 let NumMicroOps = 2;
1453 let ResourceCycles = [1,1];
1454}
Craig Topper5a69a002018-03-21 06:28:42 +00001455def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1456 "VPMOVSXBQYrm",
1457 "VPMOVSXBWYrm",
1458 "VPMOVSXDQYrm",
1459 "VPMOVSXWDYrm",
1460 "VPMOVSXWQYrm",
1461 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001462
1463def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1464 let Latency = 8;
1465 let NumMicroOps = 2;
1466 let ResourceCycles = [1,1];
1467}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001468def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1469 "(V?)MULPSrm",
1470 "(V?)MULSDrm",
1471 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001472
1473def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1474 let Latency = 8;
1475 let NumMicroOps = 3;
1476 let ResourceCycles = [2,1];
1477}
Craig Topper5a69a002018-03-21 06:28:42 +00001478def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1479 "VBLENDVPSYrm",
1480 "VMASKMOVPDYrm",
1481 "VMASKMOVPSYrm",
1482 "VPBLENDVBYrm",
1483 "VPMASKMOVDYrm",
1484 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001485
1486def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1487 let Latency = 8;
1488 let NumMicroOps = 4;
1489 let ResourceCycles = [2,1,1];
1490}
Craig Topper5a69a002018-03-21 06:28:42 +00001491def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1492 "VPSRAVDrm",
1493 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001494
Gadi Haber323f2e12017-10-24 20:19:47 +00001495def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1496 let Latency = 8;
1497 let NumMicroOps = 5;
1498 let ResourceCycles = [1,1,1,2];
1499}
Craig Topper5a69a002018-03-21 06:28:42 +00001500def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1501 "RCL(8|16|32|64)mi",
1502 "RCR(8|16|32|64)m1",
1503 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001504
1505def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1506 let Latency = 8;
1507 let NumMicroOps = 5;
1508 let ResourceCycles = [1,1,2,1];
1509}
Craig Topper13a16502018-03-19 00:56:09 +00001510def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001511
1512def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1513 let Latency = 8;
1514 let NumMicroOps = 6;
1515 let ResourceCycles = [1,1,1,3];
1516}
Craig Topper9f834812018-04-01 21:54:24 +00001517def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001518
1519def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1520 let Latency = 8;
1521 let NumMicroOps = 6;
1522 let ResourceCycles = [1,1,1,2,1];
1523}
Craig Topper9f834812018-04-01 21:54:24 +00001524def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001525 "CMPXCHG(8|16|32|64)rm",
1526 "ROL(8|16|32|64)mCL",
1527 "SAR(8|16|32|64)mCL",
1528 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001529 "SHL(8|16|32|64)mCL",
1530 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001531def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1532 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001533
1534def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1535 let Latency = 9;
1536 let NumMicroOps = 2;
1537 let ResourceCycles = [1,1];
1538}
Craig Topper5a69a002018-03-21 06:28:42 +00001539def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1540 "ADD_F64m",
1541 "ILD_F16m",
1542 "ILD_F32m",
1543 "ILD_F64m",
1544 "SUBR_F32m",
1545 "SUBR_F64m",
1546 "SUB_F32m",
1547 "SUB_F64m",
1548 "VADDPDYrm",
1549 "VADDPSYrm",
1550 "VADDSUBPDYrm",
1551 "VADDSUBPSYrm",
1552 "VCMPPDYrmi",
1553 "VCMPPSYrmi",
1554 "VCVTDQ2PSYrm",
1555 "VCVTPS2DQYrm",
1556 "VCVTTPS2DQYrm",
1557 "VMAX(C?)PDYrm",
1558 "VMAX(C?)PSYrm",
1559 "VMIN(C?)PDYrm",
1560 "VMIN(C?)PSYrm",
1561 "VSUBPDYrm",
1562 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001563
1564def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1565 let Latency = 9;
1566 let NumMicroOps = 2;
1567 let ResourceCycles = [1,1];
1568}
Craig Topper5a69a002018-03-21 06:28:42 +00001569def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1570 "VPERM2I128rm",
1571 "VPERMDYrm",
1572 "VPERMPDYmi",
1573 "VPERMPSYrm",
1574 "VPERMQYmi",
1575 "VPMOVZXBDYrm",
1576 "VPMOVZXBQYrm",
1577 "VPMOVZXBWYrm",
1578 "VPMOVZXDQYrm",
1579 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001580
1581def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1582 let Latency = 9;
1583 let NumMicroOps = 2;
1584 let ResourceCycles = [1,1];
1585}
Craig Topper5a69a002018-03-21 06:28:42 +00001586def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1587 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001588
1589def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1590 let Latency = 9;
1591 let NumMicroOps = 3;
1592 let ResourceCycles = [1,1,1];
1593}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001594def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001595
1596def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1597 let Latency = 9;
1598 let NumMicroOps = 3;
1599 let ResourceCycles = [1,1,1];
1600}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001601def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1602 "(V?)CVTSD2SIrm",
1603 "(V?)CVTSS2SI64rm",
1604 "(V?)CVTSS2SIrm",
1605 "(V?)CVTTSD2SI64rm",
1606 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001607 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001608 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001609
1610def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1611 let Latency = 9;
1612 let NumMicroOps = 3;
1613 let ResourceCycles = [1,1,1];
1614}
1615def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1616
1617def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1618 let Latency = 9;
1619 let NumMicroOps = 3;
1620 let ResourceCycles = [1,1,1];
1621}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001622def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001623def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001624 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001625 "CVTTPD2DQrm",
1626 "MMX_CVTPD2PIirm",
1627 "MMX_CVTPI2PDirm",
1628 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001629 "(V?)CVTDQ2PDrm",
1630 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001631
1632def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1633 let Latency = 9;
1634 let NumMicroOps = 3;
1635 let ResourceCycles = [1,1,1];
1636}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001637def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1638 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001639
1640def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1641 let Latency = 9;
1642 let NumMicroOps = 4;
1643 let ResourceCycles = [2,1,1];
1644}
Craig Topper5a69a002018-03-21 06:28:42 +00001645def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1646 "VPSRAVDYrm",
1647 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001648
1649def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1650 let Latency = 9;
1651 let NumMicroOps = 4;
1652 let ResourceCycles = [2,1,1];
1653}
Craig Topper5a69a002018-03-21 06:28:42 +00001654def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1655 "VPHADDSWYrm",
1656 "VPHADDWYrm",
1657 "VPHSUBDYrm",
1658 "VPHSUBSWYrm",
1659 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001660
1661def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1662 let Latency = 9;
1663 let NumMicroOps = 4;
1664 let ResourceCycles = [1,1,1,1];
1665}
Craig Topper5a69a002018-03-21 06:28:42 +00001666def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1667 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001668
1669def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1670 let Latency = 9;
1671 let NumMicroOps = 5;
1672 let ResourceCycles = [1,1,3];
1673}
1674def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1675
1676def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1677 let Latency = 9;
1678 let NumMicroOps = 5;
1679 let ResourceCycles = [1,2,1,1];
1680}
Craig Topper5a69a002018-03-21 06:28:42 +00001681def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1682 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001683
Gadi Haber323f2e12017-10-24 20:19:47 +00001684def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1685 let Latency = 10;
1686 let NumMicroOps = 2;
1687 let ResourceCycles = [1,1];
1688}
Craig Topper5a69a002018-03-21 06:28:42 +00001689def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1690 "MMX_PMADDWDirm",
1691 "MMX_PMULHRSWrm",
1692 "MMX_PMULHUWirm",
1693 "MMX_PMULHWirm",
1694 "MMX_PMULLWirm",
1695 "MMX_PMULUDQirm",
1696 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001697 "(V?)PCMPGTQrm",
1698 "(V?)PHMINPOSUWrm",
1699 "(V?)PMADDUBSWrm",
1700 "(V?)PMADDWDrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001701 "(V?)PSADBWrm",
1702 "(V?)RCPPSm",
1703 "(V?)RCPSSm",
1704 "(V?)RSQRTPSm",
1705 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001706
1707def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1708 let Latency = 10;
1709 let NumMicroOps = 2;
1710 let ResourceCycles = [1,1];
1711}
Craig Topperf82867c2017-12-13 23:11:30 +00001712def: InstRW<[BWWriteResGroup116],
1713 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1714 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001715
1716def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1717 let Latency = 10;
1718 let NumMicroOps = 3;
1719 let ResourceCycles = [2,1];
1720}
Craig Topper5a69a002018-03-21 06:28:42 +00001721def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1722 "FICOM32m",
1723 "FICOMP16m",
1724 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001725
1726def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1727 let Latency = 10;
1728 let NumMicroOps = 3;
1729 let ResourceCycles = [1,1,1];
1730}
1731def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1732
Gadi Haber323f2e12017-10-24 20:19:47 +00001733def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1734 let Latency = 10;
1735 let NumMicroOps = 4;
1736 let ResourceCycles = [1,1,1,1];
1737}
1738def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1739
1740def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001741 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001742 let NumMicroOps = 4;
1743 let ResourceCycles = [1,1,1,1];
1744}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001745def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001746
Craig Topper8104f262018-04-02 05:33:28 +00001747def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001748 let Latency = 11;
1749 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001750 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001751}
Craig Topper8104f262018-04-02 05:33:28 +00001752def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1753
1754def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1755 let Latency = 11;
1756 let NumMicroOps = 1;
1757 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1758}
1759def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001760
1761def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1762 let Latency = 11;
1763 let NumMicroOps = 2;
1764 let ResourceCycles = [1,1];
1765}
Craig Topper5a69a002018-03-21 06:28:42 +00001766def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1767 "MUL_F64m",
1768 "VPCMPGTQYrm",
1769 "VPMADDUBSWYrm",
1770 "VPMADDWDYrm",
1771 "VPMULDQYrm",
1772 "VPMULHRSWYrm",
1773 "VPMULHUWYrm",
1774 "VPMULHWYrm",
1775 "VPMULLWYrm",
1776 "VPMULUDQYrm",
1777 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001778
1779def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1780 let Latency = 11;
1781 let NumMicroOps = 2;
1782 let ResourceCycles = [1,1];
1783}
Craig Topperf82867c2017-12-13 23:11:30 +00001784def: InstRW<[BWWriteResGroup124],
1785 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001786
Gadi Haber323f2e12017-10-24 20:19:47 +00001787def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1788 let Latency = 11;
1789 let NumMicroOps = 3;
1790 let ResourceCycles = [2,1];
1791}
Craig Topper5a69a002018-03-21 06:28:42 +00001792def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1793 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
1795def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1796 let Latency = 11;
1797 let NumMicroOps = 3;
1798 let ResourceCycles = [2,1];
1799}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001800def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1801 "(V?)ROUNDPSm",
1802 "(V?)ROUNDSDm",
1803 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001804
1805def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1806 let Latency = 11;
1807 let NumMicroOps = 3;
1808 let ResourceCycles = [1,1,1];
1809}
1810def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1811
1812def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1813 let Latency = 11;
1814 let NumMicroOps = 4;
1815 let ResourceCycles = [1,2,1];
1816}
Craig Topper5a69a002018-03-21 06:28:42 +00001817def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1818 "VHADDPSYrm",
1819 "VHSUBPDYrm",
1820 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001821
1822def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1823 let Latency = 11;
1824 let NumMicroOps = 6;
1825 let ResourceCycles = [1,1,1,1,2];
1826}
Craig Topper5a69a002018-03-21 06:28:42 +00001827def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1828 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001829
1830def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1831 let Latency = 11;
1832 let NumMicroOps = 7;
1833 let ResourceCycles = [2,2,3];
1834}
Craig Topper5a69a002018-03-21 06:28:42 +00001835def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1836 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001837
1838def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1839 let Latency = 11;
1840 let NumMicroOps = 9;
1841 let ResourceCycles = [1,4,1,3];
1842}
1843def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1844
1845def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1846 let Latency = 11;
1847 let NumMicroOps = 11;
1848 let ResourceCycles = [2,9];
1849}
Craig Topper2d451e72018-03-18 08:38:06 +00001850def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1851def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001852
Gadi Haber323f2e12017-10-24 20:19:47 +00001853def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1854 let Latency = 12;
1855 let NumMicroOps = 3;
1856 let ResourceCycles = [2,1];
1857}
Craig Topper5a69a002018-03-21 06:28:42 +00001858def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1859 "ADD_FI32m",
1860 "SUBR_FI16m",
1861 "SUBR_FI32m",
1862 "SUB_FI16m",
1863 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001864 "VROUNDPDYm",
1865 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001866
Craig Topper8104f262018-04-02 05:33:28 +00001867def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001868 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001869 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001870 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001871}
Craig Topper8104f262018-04-02 05:33:28 +00001872def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1873
1874def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1875 let Latency = 11;
1876 let NumMicroOps = 1;
1877 let ResourceCycles = [1,4];
1878}
1879def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001880
1881def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1882 let Latency = 13;
1883 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001884 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001885}
1886def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1887
Craig Topper8104f262018-04-02 05:33:28 +00001888def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001889 let Latency = 14;
1890 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001891 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001892}
Craig Topper8104f262018-04-02 05:33:28 +00001893def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1894
1895def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1896 let Latency = 14;
1897 let NumMicroOps = 1;
1898 let ResourceCycles = [1,4];
1899}
1900def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001901
Gadi Haber323f2e12017-10-24 20:19:47 +00001902def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1903 let Latency = 14;
1904 let NumMicroOps = 3;
1905 let ResourceCycles = [1,1,1];
1906}
Craig Topper5a69a002018-03-21 06:28:42 +00001907def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1908 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001909
1910def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1911 let Latency = 14;
1912 let NumMicroOps = 4;
1913 let ResourceCycles = [2,1,1];
1914}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001915def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001916
1917def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1918 let Latency = 14;
1919 let NumMicroOps = 4;
1920 let ResourceCycles = [1,1,1,1];
1921}
Craig Topper5a69a002018-03-21 06:28:42 +00001922def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001923
1924def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1925 let Latency = 14;
1926 let NumMicroOps = 8;
1927 let ResourceCycles = [2,2,1,3];
1928}
1929def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1930
1931def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1932 let Latency = 14;
1933 let NumMicroOps = 10;
1934 let ResourceCycles = [2,3,1,4];
1935}
1936def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1937
1938def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1939 let Latency = 14;
1940 let NumMicroOps = 12;
1941 let ResourceCycles = [2,1,4,5];
1942}
1943def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
1944
1945def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1946 let Latency = 15;
1947 let NumMicroOps = 1;
1948 let ResourceCycles = [1];
1949}
Craig Topper5a69a002018-03-21 06:28:42 +00001950def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1951 "DIVR_FST0r",
1952 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001953
Gadi Haber323f2e12017-10-24 20:19:47 +00001954def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1955 let Latency = 15;
1956 let NumMicroOps = 10;
1957 let ResourceCycles = [1,1,1,4,1,2];
1958}
Craig Topper13a16502018-03-19 00:56:09 +00001959def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001960
Craig Topper8104f262018-04-02 05:33:28 +00001961def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001962 let Latency = 16;
1963 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001964 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001965}
Craig Topper5a69a002018-03-21 06:28:42 +00001966def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1967 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001968
1969def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1970 let Latency = 16;
1971 let NumMicroOps = 3;
1972 let ResourceCycles = [2,1];
1973}
1974def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1975
Gadi Haber323f2e12017-10-24 20:19:47 +00001976def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1977 let Latency = 16;
1978 let NumMicroOps = 14;
1979 let ResourceCycles = [1,1,1,4,2,5];
1980}
1981def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1982
1983def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1984 let Latency = 16;
1985 let NumMicroOps = 16;
1986 let ResourceCycles = [16];
1987}
Craig Topper5a69a002018-03-21 06:28:42 +00001988def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001989
Craig Topper8104f262018-04-02 05:33:28 +00001990def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001991 let Latency = 17;
1992 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001993 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001994}
1995def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1996
1997def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1998 let Latency = 17;
1999 let NumMicroOps = 4;
2000 let ResourceCycles = [2,1,1];
2001}
Craig Topper5a69a002018-03-21 06:28:42 +00002002def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2003 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002004
Craig Topper8104f262018-04-02 05:33:28 +00002005def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002006 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002007 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002008 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002009}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002010def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2011 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002012
Gadi Haber323f2e12017-10-24 20:19:47 +00002013def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2014 let Latency = 18;
2015 let NumMicroOps = 8;
2016 let ResourceCycles = [1,1,1,5];
2017}
Craig Topper5a69a002018-03-21 06:28:42 +00002018def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002019def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002020
2021def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2022 let Latency = 18;
2023 let NumMicroOps = 11;
2024 let ResourceCycles = [2,1,1,3,1,3];
2025}
Craig Topper13a16502018-03-19 00:56:09 +00002026def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002027
Craig Topper8104f262018-04-02 05:33:28 +00002028def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002029 let Latency = 19;
2030 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002031 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002032}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002033def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002034 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002035
Gadi Haber323f2e12017-10-24 20:19:47 +00002036def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2037 let Latency = 19;
2038 let NumMicroOps = 5;
2039 let ResourceCycles = [2,1,1,1];
2040}
Craig Topper5a69a002018-03-21 06:28:42 +00002041def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002042
Gadi Haber323f2e12017-10-24 20:19:47 +00002043def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2044 let Latency = 20;
2045 let NumMicroOps = 1;
2046 let ResourceCycles = [1];
2047}
Craig Topper5a69a002018-03-21 06:28:42 +00002048def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2049 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002050 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002051
2052def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2053 let Latency = 20;
2054 let NumMicroOps = 5;
2055 let ResourceCycles = [2,1,1,1];
2056}
2057def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2058
2059def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2060 let Latency = 20;
2061 let NumMicroOps = 8;
2062 let ResourceCycles = [1,1,1,1,1,1,2];
2063}
Craig Topper5a69a002018-03-21 06:28:42 +00002064def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2065 "INSL",
2066 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002067
Craig Topper8104f262018-04-02 05:33:28 +00002068def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002069 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002070 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002071 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002072}
Craig Topper8104f262018-04-02 05:33:28 +00002073def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2074
2075def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2076 let Latency = 16;
2077 let NumMicroOps = 1;
2078 let ResourceCycles = [1,8];
2079}
2080def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002081
2082def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2083 let Latency = 21;
2084 let NumMicroOps = 2;
2085 let ResourceCycles = [1,1];
2086}
Craig Topper5a69a002018-03-21 06:28:42 +00002087def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2088 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002089
Craig Topper8104f262018-04-02 05:33:28 +00002090def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002091 let Latency = 21;
2092 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002093 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002094}
2095def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2096
2097def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2098 let Latency = 21;
2099 let NumMicroOps = 19;
2100 let ResourceCycles = [2,1,4,1,1,4,6];
2101}
2102def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2103
2104def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2105 let Latency = 22;
2106 let NumMicroOps = 18;
2107 let ResourceCycles = [1,1,16];
2108}
2109def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2110
Craig Topper8104f262018-04-02 05:33:28 +00002111def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002112 let Latency = 23;
2113 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002114 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002115}
2116def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2117
Craig Topper8104f262018-04-02 05:33:28 +00002118def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002119 let Latency = 23;
2120 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002121 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002122}
2123def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2124
Gadi Haber323f2e12017-10-24 20:19:47 +00002125def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2126 let Latency = 23;
2127 let NumMicroOps = 19;
2128 let ResourceCycles = [3,1,15];
2129}
Craig Topper391c6f92017-12-10 01:24:08 +00002130def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002131
2132def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2133 let Latency = 24;
2134 let NumMicroOps = 3;
2135 let ResourceCycles = [1,1,1];
2136}
Craig Topper5a69a002018-03-21 06:28:42 +00002137def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2138 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002139
Craig Topper8104f262018-04-02 05:33:28 +00002140def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002141 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002142 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002143 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002144}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002145def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2146 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002147
2148def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2149 let Latency = 26;
2150 let NumMicroOps = 2;
2151 let ResourceCycles = [1,1];
2152}
Craig Topper5a69a002018-03-21 06:28:42 +00002153def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002154 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002155
Craig Topper8104f262018-04-02 05:33:28 +00002156def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002157 let Latency = 27;
2158 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002159 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002160}
2161def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2162
2163def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2164 let Latency = 29;
2165 let NumMicroOps = 3;
2166 let ResourceCycles = [1,1,1];
2167}
Craig Topper5a69a002018-03-21 06:28:42 +00002168def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2169 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002170
Craig Topper8104f262018-04-02 05:33:28 +00002171def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002172 let Latency = 29;
2173 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002174 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002175}
2176def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2177
2178def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2179 let Latency = 22;
2180 let NumMicroOps = 7;
2181 let ResourceCycles = [1,3,2,1];
2182}
Craig Topper17a31182017-12-16 18:35:29 +00002183def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002184
2185def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2186 let Latency = 23;
2187 let NumMicroOps = 9;
2188 let ResourceCycles = [1,3,4,1];
2189}
Craig Topper17a31182017-12-16 18:35:29 +00002190def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002191
2192def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2193 let Latency = 24;
2194 let NumMicroOps = 9;
2195 let ResourceCycles = [1,5,2,1];
2196}
Craig Topper17a31182017-12-16 18:35:29 +00002197def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002198
2199def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2200 let Latency = 25;
2201 let NumMicroOps = 7;
2202 let ResourceCycles = [1,3,2,1];
2203}
Craig Topper17a31182017-12-16 18:35:29 +00002204def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2205 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002206
2207def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2208 let Latency = 26;
2209 let NumMicroOps = 9;
2210 let ResourceCycles = [1,5,2,1];
2211}
Craig Topper17a31182017-12-16 18:35:29 +00002212def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002213
2214def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2215 let Latency = 26;
2216 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002217 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002218}
Craig Topper17a31182017-12-16 18:35:29 +00002219def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002220
2221def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2222 let Latency = 27;
2223 let NumMicroOps = 9;
2224 let ResourceCycles = [1,5,2,1];
2225}
Craig Topper17a31182017-12-16 18:35:29 +00002226def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002227
Gadi Haber323f2e12017-10-24 20:19:47 +00002228def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2229 let Latency = 29;
2230 let NumMicroOps = 27;
2231 let ResourceCycles = [1,5,1,1,19];
2232}
2233def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2234
2235def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2236 let Latency = 30;
2237 let NumMicroOps = 28;
2238 let ResourceCycles = [1,6,1,1,19];
2239}
Craig Topper2d451e72018-03-18 08:38:06 +00002240def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002241
2242def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2243 let Latency = 31;
2244 let NumMicroOps = 31;
2245 let ResourceCycles = [8,1,21,1];
2246}
2247def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2248
Craig Topper8104f262018-04-02 05:33:28 +00002249def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2250 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002251 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002252 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002253}
2254def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2255
2256def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2257 let Latency = 34;
2258 let NumMicroOps = 8;
2259 let ResourceCycles = [2,2,2,1,1];
2260}
Craig Topper13a16502018-03-19 00:56:09 +00002261def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002262
2263def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2264 let Latency = 34;
2265 let NumMicroOps = 23;
2266 let ResourceCycles = [1,5,3,4,10];
2267}
Craig Topper5a69a002018-03-21 06:28:42 +00002268def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2269 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002270
2271def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2272 let Latency = 35;
2273 let NumMicroOps = 8;
2274 let ResourceCycles = [2,2,2,1,1];
2275}
Craig Topper13a16502018-03-19 00:56:09 +00002276def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002277
2278def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2279 let Latency = 35;
2280 let NumMicroOps = 23;
2281 let ResourceCycles = [1,5,2,1,4,10];
2282}
Craig Topper5a69a002018-03-21 06:28:42 +00002283def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2284 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002285
Craig Topper8104f262018-04-02 05:33:28 +00002286def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2287 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002288 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002289 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002290}
2291def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2292
2293def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2294 let Latency = 42;
2295 let NumMicroOps = 22;
2296 let ResourceCycles = [2,20];
2297}
Craig Topper2d451e72018-03-18 08:38:06 +00002298def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002299
2300def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2301 let Latency = 60;
2302 let NumMicroOps = 64;
2303 let ResourceCycles = [2,2,8,1,10,2,39];
2304}
2305def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002306
2307def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2308 let Latency = 63;
2309 let NumMicroOps = 88;
2310 let ResourceCycles = [4,4,31,1,2,1,45];
2311}
Craig Topper2d451e72018-03-18 08:38:06 +00002312def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002313
2314def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2315 let Latency = 63;
2316 let NumMicroOps = 90;
2317 let ResourceCycles = [4,2,33,1,2,1,47];
2318}
Craig Topper2d451e72018-03-18 08:38:06 +00002319def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002320
2321def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2322 let Latency = 75;
2323 let NumMicroOps = 15;
2324 let ResourceCycles = [6,3,6];
2325}
2326def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2327
2328def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2329 let Latency = 80;
2330 let NumMicroOps = 32;
2331 let ResourceCycles = [7,7,3,3,1,11];
2332}
2333def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2334
2335def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2336 let Latency = 115;
2337 let NumMicroOps = 100;
2338 let ResourceCycles = [9,9,11,8,1,11,21,30];
2339}
2340def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002341
2342} // SchedModel
2343