blob: 9c681098a82b1ee4b724ec7d1da345848ef3c22a [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000166defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
167defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000172
173// FMA Scheduling helper class.
174// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
175
176// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000177def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
178def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
179def : WriteRes<WriteVecMove, [BWPort015]>;
180
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000181defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000182defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
184defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000185defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000187defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
189defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
190defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000191defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000192
Gadi Haber323f2e12017-10-24 20:19:47 +0000193// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
195defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
196defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000197
198// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199
Gadi Haber323f2e12017-10-24 20:19:47 +0000200// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000201def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 11;
203 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000204 let ResourceCycles = [3];
205}
206def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207 let Latency = 16;
208 let NumMicroOps = 4;
209 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000210}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000211
212// Packed Compare Explicit Length Strings, Return Mask
213def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
214 let Latency = 19;
215 let NumMicroOps = 9;
216 let ResourceCycles = [4,3,1,1];
217}
218def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
219 let Latency = 24;
220 let NumMicroOps = 10;
221 let ResourceCycles = [4,3,1,1,1];
222}
223
224// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000225def : WriteRes<WritePCmpIStrI, [BWPort0]> {
226 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000227 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000228 let ResourceCycles = [3];
229}
230def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 16;
232 let NumMicroOps = 4;
233 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000234}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000235
236// Packed Compare Explicit Length Strings, Return Index
237def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
238 let Latency = 18;
239 let NumMicroOps = 8;
240 let ResourceCycles = [4,3,1];
241}
242def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
243 let Latency = 23;
244 let NumMicroOps = 9;
245 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000246}
247
Simon Pilgrima2f26782018-03-27 20:38:54 +0000248// MOVMSK Instructions.
249def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
250def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
252
Gadi Haber323f2e12017-10-24 20:19:47 +0000253// AES instructions.
254def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
255 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [1];
258}
259def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 12;
261 let NumMicroOps = 2;
262 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000264
Gadi Haber323f2e12017-10-24 20:19:47 +0000265def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
266 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000268 let ResourceCycles = [2];
269}
270def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000271 let Latency = 19;
272 let NumMicroOps = 3;
273 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275
276def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
277 let Latency = 29;
278 let NumMicroOps = 11;
279 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000280}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000281def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
282 let Latency = 33;
283 let NumMicroOps = 11;
284 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000285}
286
287// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000289
290// Catch-all for expensive system instructions.
291def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
292
293// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000295defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000296defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000297defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000298defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000299
300// Old microcoded instructions that nobody use.
301def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
302
303// Fence instructions.
304def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
305
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 Pilgrim30c38c32018-03-19 14:46:07 +0000317defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
318defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
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",
355 "(V?)MOVAPD(Y?)rr",
356 "(V?)MOVAPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000357 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358 "(V?)MOVUPD(Y?)rr",
359 "(V?)MOVUPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000360 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000361 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000362 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000363
364def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
365 let Latency = 1;
366 let NumMicroOps = 1;
367 let ResourceCycles = [1];
368}
369def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
370
371def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
372 let Latency = 1;
373 let NumMicroOps = 1;
374 let ResourceCycles = [1];
375}
Craig Topper5a69a002018-03-21 06:28:42 +0000376def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
377 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000378
379def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
380 let Latency = 1;
381 let NumMicroOps = 1;
382 let ResourceCycles = [1];
383}
Craig Topperfbe31322018-04-05 21:56:19 +0000384def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000385def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
386 "ADC(16|32|64)i",
387 "ADC(8|16|32|64)rr",
388 "ADCX(32|64)rr",
389 "ADOX(32|64)rr",
390 "BT(16|32|64)ri8",
391 "BT(16|32|64)rr",
392 "BTC(16|32|64)ri8",
393 "BTC(16|32|64)rr",
394 "BTR(16|32|64)ri8",
395 "BTR(16|32|64)rr",
396 "BTS(16|32|64)ri8",
397 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000398 "SBB(16|32|64)ri",
399 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000400 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000401
402def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Craig Topper5a69a002018-03-21 06:28:42 +0000407def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
408 "BLSI(32|64)rr",
409 "BLSMSK(32|64)rr",
410 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000411 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000412
413def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
414 let Latency = 1;
415 let NumMicroOps = 1;
416 let ResourceCycles = [1];
417}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000418def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000419 "(V?)MOVDQA(Y?)rr",
420 "(V?)MOVDQU(Y?)rr",
421 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000422 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000423 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000424
425def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
426 let Latency = 1;
427 let NumMicroOps = 1;
428 let ResourceCycles = [1];
429}
Craig Topperdfccafe2018-04-18 06:41:25 +0000430def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000431 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000432 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000433 "SGDT64m",
434 "SIDT64m",
435 "SLDT64m",
436 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000437 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000438 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000439
440def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
441 let Latency = 1;
442 let NumMicroOps = 2;
443 let ResourceCycles = [1,1];
444}
Craig Topper5a69a002018-03-21 06:28:42 +0000445def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
446 "MMX_MOVD64from64rm",
447 "MMX_MOVD64mr",
448 "MMX_MOVNTQmr",
449 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000450 "MOVNTI_64mr",
451 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000452 "ST_FP32m",
453 "ST_FP64m",
454 "ST_FP80m",
455 "VEXTRACTF128mr",
456 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000457 "(V?)MOVAPD(Y?)mr",
458 "(V?)MOVAPS(Y?)mr",
459 "(V?)MOVDQA(Y?)mr",
460 "(V?)MOVDQU(Y?)mr",
461 "(V?)MOVHPDmr",
462 "(V?)MOVHPSmr",
463 "(V?)MOVLPDmr",
464 "(V?)MOVLPSmr",
465 "(V?)MOVNTDQ(V?)mr",
466 "(V?)MOVNTPD(V?)mr",
467 "(V?)MOVNTPS(V?)mr",
468 "(V?)MOVPDI2DImr",
469 "(V?)MOVPQI2QImr",
470 "(V?)MOVPQIto64mr",
471 "(V?)MOVSDmr",
472 "(V?)MOVSSmr",
473 "(V?)MOVUPD(Y?)mr",
474 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000475
476def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
477 let Latency = 2;
478 let NumMicroOps = 2;
479 let ResourceCycles = [2];
480}
Craig Topper5a69a002018-03-21 06:28:42 +0000481def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
482 "BLENDVPSrr0",
483 "MMX_PINSRWrr",
484 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000485 "VBLENDVPD(Y?)rr",
486 "VBLENDVPS(Y?)rr",
487 "VPBLENDVB(Y?)rr",
488 "(V?)PINSRBrr",
489 "(V?)PINSRDrr",
490 "(V?)PINSRQrr",
491 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000492
493def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
494 let Latency = 2;
495 let NumMicroOps = 2;
496 let ResourceCycles = [2];
497}
498def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
499
500def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
501 let Latency = 2;
502 let NumMicroOps = 2;
503 let ResourceCycles = [2];
504}
Craig Topper5a69a002018-03-21 06:28:42 +0000505def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
506 "ROL(8|16|32|64)ri",
507 "ROR(8|16|32|64)r1",
508 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000509
510def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
511 let Latency = 2;
512 let NumMicroOps = 2;
513 let ResourceCycles = [2];
514}
Craig Topper5a69a002018-03-21 06:28:42 +0000515def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
516 "MFENCE",
517 "WAIT",
518 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000519
520def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
521 let Latency = 2;
522 let NumMicroOps = 2;
523 let ResourceCycles = [1,1];
524}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000525def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
526 "VCVTPH2PS(Y?)rr",
527 "(V?)CVTPS2PDrr",
528 "(V?)CVTSS2SDrr",
529 "(V?)EXTRACTPSrr",
530 "(V?)PEXTRBrr",
531 "(V?)PEXTRDrr",
532 "(V?)PEXTRQrr",
533 "(V?)PEXTRWrr",
534 "(V?)PSLLDrr",
535 "(V?)PSLLQrr",
536 "(V?)PSLLWrr",
537 "(V?)PSRADrr",
538 "(V?)PSRAWrr",
539 "(V?)PSRLDrr",
540 "(V?)PSRLQrr",
541 "(V?)PSRLWrr",
542 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000543
544def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
545 let Latency = 2;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
549def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
550
551def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
552 let Latency = 2;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
556def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
557
558def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
559 let Latency = 2;
560 let NumMicroOps = 2;
561 let ResourceCycles = [1,1];
562}
563def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
564
565def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
566 let Latency = 2;
567 let NumMicroOps = 2;
568 let ResourceCycles = [1,1];
569}
Craig Topper498875f2018-04-04 17:54:19 +0000570def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
571
572def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
573 let Latency = 1;
574 let NumMicroOps = 1;
575 let ResourceCycles = [1];
576}
577def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000578
579def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
580 let Latency = 2;
581 let NumMicroOps = 2;
582 let ResourceCycles = [1,1];
583}
Craig Topper2d451e72018-03-18 08:38:06 +0000584def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000585def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000586def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
587 "ADC8ri",
588 "CMOV(A|BE)(16|32|64)rr",
589 "SBB8i8",
590 "SBB8ri",
591 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000592
593def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
594 let Latency = 2;
595 let NumMicroOps = 3;
596 let ResourceCycles = [1,1,1];
597}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000598def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
599 "(V?)PEXTRBmr",
600 "(V?)PEXTRDmr",
601 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000602 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000603
604def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
605 let Latency = 2;
606 let NumMicroOps = 3;
607 let ResourceCycles = [1,1,1];
608}
609def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
610
Gadi Haber323f2e12017-10-24 20:19:47 +0000611def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
612 let Latency = 2;
613 let NumMicroOps = 3;
614 let ResourceCycles = [1,1,1];
615}
616def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
617
618def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
619 let Latency = 2;
620 let NumMicroOps = 3;
621 let ResourceCycles = [1,1,1];
622}
Craig Topper2d451e72018-03-18 08:38:06 +0000623def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000624def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
625 "PUSH64i8",
626 "STOSB",
627 "STOSL",
628 "STOSQ",
629 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000630
Gadi Haber323f2e12017-10-24 20:19:47 +0000631def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
632 let Latency = 3;
633 let NumMicroOps = 1;
634 let ResourceCycles = [1];
635}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000636def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000637 "PDEP(32|64)rr",
638 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "SHLD(16|32|64)rri8",
640 "SHRD(16|32|64)rri8",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000641 "(V?)CVTDQ2PS(Y?)rr",
642 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000643 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000644
645def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000646 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000647 let NumMicroOps = 2;
648 let ResourceCycles = [1,1];
649}
Clement Courbet327fac42018-03-07 08:14:02 +0000650def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000651
652def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
653 let Latency = 3;
654 let NumMicroOps = 1;
655 let ResourceCycles = [1];
656}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000657def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
658 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000659 "VPMOVSXBDYrr",
660 "VPMOVSXBQYrr",
661 "VPMOVSXBWYrr",
662 "VPMOVSXDQYrr",
663 "VPMOVSXWDYrr",
664 "VPMOVSXWQYrr",
665 "VPMOVZXBDYrr",
666 "VPMOVZXBQYrr",
667 "VPMOVZXBWYrr",
668 "VPMOVZXDQYrr",
669 "VPMOVZXWDYrr",
670 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000671
672def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
673 let Latency = 3;
674 let NumMicroOps = 1;
675 let ResourceCycles = [1];
676}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000677def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
678 "(V?)MULPS(Y?)rr",
679 "(V?)MULSDrr",
680 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000681
682def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000683 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000684 let NumMicroOps = 3;
685 let ResourceCycles = [3];
686}
Craig Topperb5f26592018-04-19 18:00:17 +0000687def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
688 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
689 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000690
691def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
692 let Latency = 3;
693 let NumMicroOps = 3;
694 let ResourceCycles = [2,1];
695}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000696def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
697 "VPSRAVD(Y?)rr",
698 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000699
700def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
701 let Latency = 3;
702 let NumMicroOps = 3;
703 let ResourceCycles = [2,1];
704}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000705def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000706 "(V?)PHADDD(Y?)rr",
707 "(V?)PHADDSW(Y?)rr",
708 "(V?)PHADDW(Y?)rr",
709 "(V?)PHSUBD(Y?)rr",
710 "(V?)PHSUBSW(Y?)rr",
711 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000712
713def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
714 let Latency = 3;
715 let NumMicroOps = 3;
716 let ResourceCycles = [2,1];
717}
Craig Topper5a69a002018-03-21 06:28:42 +0000718def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
719 "MMX_PACKSSWBirr",
720 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000721
722def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
723 let Latency = 3;
724 let NumMicroOps = 3;
725 let ResourceCycles = [1,2];
726}
727def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
728
729def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
730 let Latency = 3;
731 let NumMicroOps = 3;
732 let ResourceCycles = [1,2];
733}
Craig Topper5a69a002018-03-21 06:28:42 +0000734def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
735 "RCL(8|16|32|64)ri",
736 "RCR(8|16|32|64)r1",
737 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000738
739def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
740 let Latency = 3;
741 let NumMicroOps = 3;
742 let ResourceCycles = [2,1];
743}
Craig Topper5a69a002018-03-21 06:28:42 +0000744def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
745 "ROR(8|16|32|64)rCL",
746 "SAR(8|16|32|64)rCL",
747 "SHL(8|16|32|64)rCL",
748 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000749
750def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
751 let Latency = 3;
752 let NumMicroOps = 4;
753 let ResourceCycles = [1,1,1,1];
754}
755def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
756
757def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
758 let Latency = 3;
759 let NumMicroOps = 4;
760 let ResourceCycles = [1,1,1,1];
761}
Craig Topper5a69a002018-03-21 06:28:42 +0000762def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
763 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000764
765def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
766 let Latency = 4;
767 let NumMicroOps = 2;
768 let ResourceCycles = [1,1];
769}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000770def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
771 "(V?)CVTSD2SIrr",
772 "(V?)CVTSS2SI64rr",
773 "(V?)CVTSS2SIrr",
774 "(V?)CVTTSD2SI64rr",
775 "(V?)CVTTSD2SIrr",
776 "(V?)CVTTSS2SI64rr",
777 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000778
779def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
780 let Latency = 4;
781 let NumMicroOps = 2;
782 let ResourceCycles = [1,1];
783}
Craig Topper5a69a002018-03-21 06:28:42 +0000784def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
785 "VPSLLDYrr",
786 "VPSLLQYrr",
787 "VPSLLWYrr",
788 "VPSRADYrr",
789 "VPSRAWYrr",
790 "VPSRLDYrr",
791 "VPSRLQYrr",
792 "VPSRLWYrr",
793 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000794
795def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
796 let Latency = 4;
797 let NumMicroOps = 2;
798 let ResourceCycles = [1,1];
799}
800def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
801
802def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
803 let Latency = 4;
804 let NumMicroOps = 2;
805 let ResourceCycles = [1,1];
806}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000807def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000808def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000809 "MMX_CVTPI2PDirr",
810 "MMX_CVTPS2PIirr",
811 "MMX_CVTTPD2PIirr",
812 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000813 "(V?)CVTDQ2PDrr",
814 "(V?)CVTPD2DQrr",
815 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000816 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000817 "(V?)CVTSD2SSrr",
818 "(V?)CVTSI642SDrr",
819 "(V?)CVTSI2SDrr",
820 "(V?)CVTSI2SSrr",
821 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000822
823def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
824 let Latency = 4;
825 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000826 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000827}
Craig Topper5a69a002018-03-21 06:28:42 +0000828def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000829
830def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
831 let Latency = 4;
832 let NumMicroOps = 3;
833 let ResourceCycles = [1,1,1];
834}
835def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
836
837def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
838 let Latency = 4;
839 let NumMicroOps = 3;
840 let ResourceCycles = [1,1,1];
841}
Craig Topper5a69a002018-03-21 06:28:42 +0000842def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
843 "ISTT_FP32m",
844 "ISTT_FP64m",
845 "IST_F16m",
846 "IST_F32m",
847 "IST_FP16m",
848 "IST_FP32m",
849 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000850 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000851
852def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
853 let Latency = 4;
854 let NumMicroOps = 4;
855 let ResourceCycles = [4];
856}
857def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
858
859def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
860 let Latency = 4;
861 let NumMicroOps = 4;
862 let ResourceCycles = [1,3];
863}
864def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
865
866def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
867 let Latency = 5;
868 let NumMicroOps = 1;
869 let ResourceCycles = [1];
870}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000871def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000872
Gadi Haber323f2e12017-10-24 20:19:47 +0000873def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
874 let Latency = 5;
875 let NumMicroOps = 1;
876 let ResourceCycles = [1];
877}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000878def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000879 "MOVSX(16|32|64)rm32",
880 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000881 "MOVZX(16|32|64)rm16",
882 "MOVZX(16|32|64)rm8",
883 "PREFETCHNTA",
884 "PREFETCHT0",
885 "PREFETCHT1",
886 "PREFETCHT2",
887 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000888 "(V?)LDDQUrm",
889 "(V?)MOV64toPQIrm",
890 "(V?)MOVAPDrm",
891 "(V?)MOVAPSrm",
892 "(V?)MOVDDUPrm",
893 "(V?)MOVDI2PDIrm",
894 "(V?)MOVDQArm",
895 "(V?)MOVDQUrm",
896 "(V?)MOVNTDQArm",
897 "(V?)MOVQI2PQIrm",
898 "(V?)MOVSDrm",
899 "(V?)MOVSHDUPrm",
900 "(V?)MOVSLDUPrm",
901 "(V?)MOVSSrm",
902 "(V?)MOVUPDrm",
903 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000904 "VPBROADCASTDrm",
905 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000906
907def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
908 let Latency = 5;
909 let NumMicroOps = 3;
910 let ResourceCycles = [1,2];
911}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000912def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
913 "(V?)HADDPD(Y?)rr",
914 "(V?)HADDPS(Y?)rr",
915 "(V?)HSUBPD(Y?)rr",
916 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000917
918def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
919 let Latency = 5;
920 let NumMicroOps = 3;
921 let ResourceCycles = [1,1,1];
922}
923def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
924
925def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000926 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000927 let NumMicroOps = 3;
928 let ResourceCycles = [1,1,1];
929}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000930def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000931
932def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
933 let Latency = 5;
934 let NumMicroOps = 4;
935 let ResourceCycles = [1,1,1,1];
936}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000937def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
938 "VMASKMOVPS(Y?)mr",
939 "VPMASKMOVD(Y?)mr",
940 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000941
942def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
943 let Latency = 5;
944 let NumMicroOps = 5;
945 let ResourceCycles = [1,4];
946}
947def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
948
949def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
950 let Latency = 5;
951 let NumMicroOps = 5;
952 let ResourceCycles = [1,4];
953}
954def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
955
956def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
957 let Latency = 5;
958 let NumMicroOps = 5;
959 let ResourceCycles = [2,3];
960}
Craig Topper5a69a002018-03-21 06:28:42 +0000961def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000962
963def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
964 let Latency = 5;
965 let NumMicroOps = 6;
966 let ResourceCycles = [1,1,4];
967}
Craig Topper5a69a002018-03-21 06:28:42 +0000968def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000969
970def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
971 let Latency = 6;
972 let NumMicroOps = 1;
973 let ResourceCycles = [1];
974}
Craig Topper5a69a002018-03-21 06:28:42 +0000975def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
976 "LD_F64m",
977 "LD_F80m",
978 "VBROADCASTF128",
979 "VBROADCASTI128",
980 "VBROADCASTSDYrm",
981 "VBROADCASTSSYrm",
982 "VLDDQUYrm",
983 "VMOVAPDYrm",
984 "VMOVAPSYrm",
985 "VMOVDDUPYrm",
986 "VMOVDQAYrm",
987 "VMOVDQUYrm",
988 "VMOVNTDQAYrm",
989 "VMOVSHDUPYrm",
990 "VMOVSLDUPYrm",
991 "VMOVUPDYrm",
992 "VMOVUPSYrm",
993 "VPBROADCASTDYrm",
994 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000995 "(V?)ROUNDPD(Y?)r",
996 "(V?)ROUNDPS(Y?)r",
997 "(V?)ROUNDSDr",
998 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000999
1000def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1001 let Latency = 6;
1002 let NumMicroOps = 2;
1003 let ResourceCycles = [1,1];
1004}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001005def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001006 "MMX_PSLLQrm",
1007 "MMX_PSLLWrm",
1008 "MMX_PSRADrm",
1009 "MMX_PSRAWrm",
1010 "MMX_PSRLDrm",
1011 "MMX_PSRLQrm",
1012 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001013 "VCVTPH2PS(Y?)rm",
1014 "(V?)CVTPS2PDrm",
1015 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001016 "VPSLLVQrm",
1017 "VPSRLVQrm",
1018 "VTESTPDrm",
1019 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001020
1021def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1022 let Latency = 6;
1023 let NumMicroOps = 2;
1024 let ResourceCycles = [1,1];
1025}
Craig Topper5a69a002018-03-21 06:28:42 +00001026def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1027 "VCVTPD2DQYrr",
1028 "VCVTPD2PSYrr",
1029 "VCVTPS2PHYrr",
1030 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001031
1032def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1033 let Latency = 6;
1034 let NumMicroOps = 2;
1035 let ResourceCycles = [1,1];
1036}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001037def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001038 "MMX_PINSRWrm",
1039 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001040 "MMX_PUNPCKHBWirm",
1041 "MMX_PUNPCKHDQirm",
1042 "MMX_PUNPCKHWDirm",
1043 "MMX_PUNPCKLBWirm",
1044 "MMX_PUNPCKLDQirm",
1045 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001046 "(V?)INSERTPSrm",
1047 "(V?)MOVHPDrm",
1048 "(V?)MOVHPSrm",
1049 "(V?)MOVLPDrm",
1050 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001051 "(V?)PACKSSDWrm",
1052 "(V?)PACKSSWBrm",
1053 "(V?)PACKUSDWrm",
1054 "(V?)PACKUSWBrm",
1055 "(V?)PALIGNRrmi",
1056 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001057 "VPERMILPDmi",
1058 "VPERMILPDrm",
1059 "VPERMILPSmi",
1060 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001061 "(V?)PINSRBrm",
1062 "(V?)PINSRDrm",
1063 "(V?)PINSRQrm",
1064 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001065 "(V?)PSHUFBrm",
1066 "(V?)PSHUFDmi",
1067 "(V?)PSHUFHWmi",
1068 "(V?)PSHUFLWmi",
1069 "(V?)PUNPCKHBWrm",
1070 "(V?)PUNPCKHDQrm",
1071 "(V?)PUNPCKHQDQrm",
1072 "(V?)PUNPCKHWDrm",
1073 "(V?)PUNPCKLBWrm",
1074 "(V?)PUNPCKLDQrm",
1075 "(V?)PUNPCKLQDQrm",
1076 "(V?)PUNPCKLWDrm",
1077 "(V?)SHUFPDrmi",
1078 "(V?)SHUFPSrmi",
1079 "(V?)UNPCKHPDrm",
1080 "(V?)UNPCKHPSrm",
1081 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001082 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001083
1084def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1085 let Latency = 6;
1086 let NumMicroOps = 2;
1087 let ResourceCycles = [1,1];
1088}
Craig Topper5a69a002018-03-21 06:28:42 +00001089def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1090 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001091
1092def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1093 let Latency = 6;
1094 let NumMicroOps = 2;
1095 let ResourceCycles = [1,1];
1096}
Craig Topperdfccafe2018-04-18 06:41:25 +00001097def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001098def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1099 ADCX32rm, ADCX64rm,
1100 ADOX32rm, ADOX64rm,
1101 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001102
1103def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1104 let Latency = 6;
1105 let NumMicroOps = 2;
1106 let ResourceCycles = [1,1];
1107}
Craig Topper5a69a002018-03-21 06:28:42 +00001108def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1109 "BLSI(32|64)rm",
1110 "BLSMSK(32|64)rm",
1111 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001112 "MMX_PADD(B|D|Q|W)irm",
1113 "MMX_PADDS(B|W)irm",
1114 "MMX_PADDUS(B|W)irm",
1115 "MMX_PAVG(B|W)irm",
1116 "MMX_PCMPEQ(B|D|W)irm",
1117 "MMX_PCMPGT(B|D|W)irm",
1118 "MMX_P(MAX|MIN)SWirm",
1119 "MMX_P(MAX|MIN)UBirm",
1120 "MMX_PSIGN(B|D|W)rm",
1121 "MMX_PSUB(B|D|Q|W)irm",
1122 "MMX_PSUBS(B|W)irm",
1123 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001124 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001125 "(V?)PABSBrm",
1126 "(V?)PABSDrm",
1127 "(V?)PABSWrm",
1128 "(V?)PADDBrm",
1129 "(V?)PADDDrm",
1130 "(V?)PADDQrm",
1131 "(V?)PADDSBrm",
1132 "(V?)PADDSWrm",
1133 "(V?)PADDUSBrm",
1134 "(V?)PADDUSWrm",
1135 "(V?)PADDWrm",
1136 "(V?)PAVGBrm",
1137 "(V?)PAVGWrm",
1138 "(V?)PCMPEQBrm",
1139 "(V?)PCMPEQDrm",
1140 "(V?)PCMPEQQrm",
1141 "(V?)PCMPEQWrm",
1142 "(V?)PCMPGTBrm",
1143 "(V?)PCMPGTDrm",
1144 "(V?)PCMPGTWrm",
1145 "(V?)PMAXSBrm",
1146 "(V?)PMAXSDrm",
1147 "(V?)PMAXSWrm",
1148 "(V?)PMAXUBrm",
1149 "(V?)PMAXUDrm",
1150 "(V?)PMAXUWrm",
1151 "(V?)PMINSBrm",
1152 "(V?)PMINSDrm",
1153 "(V?)PMINSWrm",
1154 "(V?)PMINUBrm",
1155 "(V?)PMINUDrm",
1156 "(V?)PMINUWrm",
1157 "(V?)PSIGNBrm",
1158 "(V?)PSIGNDrm",
1159 "(V?)PSIGNWrm",
1160 "(V?)PSUBBrm",
1161 "(V?)PSUBDrm",
1162 "(V?)PSUBQrm",
1163 "(V?)PSUBSBrm",
1164 "(V?)PSUBSWrm",
1165 "(V?)PSUBUSBrm",
1166 "(V?)PSUBUSWrm",
1167 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001168
1169def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1170 let Latency = 6;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001174def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001175 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001176 "VINSERTF128rm",
1177 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001178 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001179
1180def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1181 let Latency = 6;
1182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Craig Topper2d451e72018-03-18 08:38:06 +00001185def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001186def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001187
1188def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1189 let Latency = 6;
1190 let NumMicroOps = 4;
1191 let ResourceCycles = [1,1,2];
1192}
Craig Topper5a69a002018-03-21 06:28:42 +00001193def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1194 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001195
1196def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1197 let Latency = 6;
1198 let NumMicroOps = 4;
1199 let ResourceCycles = [1,1,1,1];
1200}
1201def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1202
1203def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1204 let Latency = 6;
1205 let NumMicroOps = 4;
1206 let ResourceCycles = [1,1,1,1];
1207}
Craig Topper5a69a002018-03-21 06:28:42 +00001208def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1209 "BTR(16|32|64)mi8",
1210 "BTS(16|32|64)mi8",
1211 "SAR(8|16|32|64)m1",
1212 "SAR(8|16|32|64)mi",
1213 "SHL(8|16|32|64)m1",
1214 "SHL(8|16|32|64)mi",
1215 "SHR(8|16|32|64)m1",
1216 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001217
1218def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1219 let Latency = 6;
1220 let NumMicroOps = 4;
1221 let ResourceCycles = [1,1,1,1];
1222}
Craig Topperf0d04262018-04-06 16:16:48 +00001223def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1224 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001225
1226def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1227 let Latency = 6;
1228 let NumMicroOps = 6;
1229 let ResourceCycles = [1,5];
1230}
1231def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1232
Gadi Haber323f2e12017-10-24 20:19:47 +00001233def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1234 let Latency = 7;
1235 let NumMicroOps = 2;
1236 let ResourceCycles = [1,1];
1237}
Craig Topper5a69a002018-03-21 06:28:42 +00001238def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1239 "VPSLLQYrm",
1240 "VPSLLVQYrm",
1241 "VPSLLWYrm",
1242 "VPSRADYrm",
1243 "VPSRAWYrm",
1244 "VPSRLDYrm",
1245 "VPSRLQYrm",
1246 "VPSRLVQYrm",
1247 "VPSRLWYrm",
1248 "VTESTPDYrm",
1249 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001250
1251def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1252 let Latency = 7;
1253 let NumMicroOps = 2;
1254 let ResourceCycles = [1,1];
1255}
Craig Topper5a69a002018-03-21 06:28:42 +00001256def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1257 "FCOM64m",
1258 "FCOMP32m",
1259 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001260
1261def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1262 let Latency = 7;
1263 let NumMicroOps = 2;
1264 let ResourceCycles = [1,1];
1265}
Craig Topper5a69a002018-03-21 06:28:42 +00001266def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1267 "VANDNPSYrm",
1268 "VANDPDYrm",
1269 "VANDPSYrm",
1270 "VORPDYrm",
1271 "VORPSYrm",
1272 "VPACKSSDWYrm",
1273 "VPACKSSWBYrm",
1274 "VPACKUSDWYrm",
1275 "VPACKUSWBYrm",
1276 "VPALIGNRYrmi",
1277 "VPBLENDWYrmi",
1278 "VPERMILPDYmi",
1279 "VPERMILPDYrm",
1280 "VPERMILPSYmi",
1281 "VPERMILPSYrm",
1282 "VPSHUFBYrm",
1283 "VPSHUFDYmi",
1284 "VPSHUFHWYmi",
1285 "VPSHUFLWYmi",
1286 "VPUNPCKHBWYrm",
1287 "VPUNPCKHDQYrm",
1288 "VPUNPCKHQDQYrm",
1289 "VPUNPCKHWDYrm",
1290 "VPUNPCKLBWYrm",
1291 "VPUNPCKLDQYrm",
1292 "VPUNPCKLQDQYrm",
1293 "VPUNPCKLWDYrm",
1294 "VSHUFPDYrmi",
1295 "VSHUFPSYrmi",
1296 "VUNPCKHPDYrm",
1297 "VUNPCKHPSYrm",
1298 "VUNPCKLPDYrm",
1299 "VUNPCKLPSYrm",
1300 "VXORPDYrm",
1301 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001302
1303def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1304 let Latency = 7;
1305 let NumMicroOps = 2;
1306 let ResourceCycles = [1,1];
1307}
Craig Topper5a69a002018-03-21 06:28:42 +00001308def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1309 "VPABSDYrm",
1310 "VPABSWYrm",
1311 "VPADDBYrm",
1312 "VPADDDYrm",
1313 "VPADDQYrm",
1314 "VPADDSBYrm",
1315 "VPADDSWYrm",
1316 "VPADDUSBYrm",
1317 "VPADDUSWYrm",
1318 "VPADDWYrm",
1319 "VPAVGBYrm",
1320 "VPAVGWYrm",
1321 "VPCMPEQBYrm",
1322 "VPCMPEQDYrm",
1323 "VPCMPEQQYrm",
1324 "VPCMPEQWYrm",
1325 "VPCMPGTBYrm",
1326 "VPCMPGTDYrm",
1327 "VPCMPGTWYrm",
1328 "VPMAXSBYrm",
1329 "VPMAXSDYrm",
1330 "VPMAXSWYrm",
1331 "VPMAXUBYrm",
1332 "VPMAXUDYrm",
1333 "VPMAXUWYrm",
1334 "VPMINSBYrm",
1335 "VPMINSDYrm",
1336 "VPMINSWYrm",
1337 "VPMINUBYrm",
1338 "VPMINUDYrm",
1339 "VPMINUWYrm",
1340 "VPSIGNBYrm",
1341 "VPSIGNDYrm",
1342 "VPSIGNWYrm",
1343 "VPSUBBYrm",
1344 "VPSUBDYrm",
1345 "VPSUBQYrm",
1346 "VPSUBSBYrm",
1347 "VPSUBSWYrm",
1348 "VPSUBUSBYrm",
1349 "VPSUBUSWYrm",
1350 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001351
1352def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1353 let Latency = 7;
1354 let NumMicroOps = 2;
1355 let ResourceCycles = [1,1];
1356}
Craig Topper5a69a002018-03-21 06:28:42 +00001357def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1358 "VBLENDPSYrmi",
1359 "VPANDNYrm",
1360 "VPANDYrm",
1361 "VPBLENDDYrmi",
1362 "VPORYrm",
1363 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001364
1365def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1366 let Latency = 7;
1367 let NumMicroOps = 3;
1368 let ResourceCycles = [1,2];
1369}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001370def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001371
1372def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1373 let Latency = 7;
1374 let NumMicroOps = 3;
1375 let ResourceCycles = [2,1];
1376}
Craig Topper5a69a002018-03-21 06:28:42 +00001377def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1378 "BLENDVPSrm0",
1379 "MMX_PACKSSDWirm",
1380 "MMX_PACKSSWBirm",
1381 "MMX_PACKUSWBirm",
1382 "PBLENDVBrm0",
1383 "VBLENDVPDrm",
1384 "VBLENDVPSrm",
1385 "VMASKMOVPDrm",
1386 "VMASKMOVPSrm",
1387 "VPBLENDVBrm",
1388 "VPMASKMOVDrm",
1389 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001390
1391def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1392 let Latency = 7;
1393 let NumMicroOps = 3;
1394 let ResourceCycles = [1,2];
1395}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001396def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1397 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001398
1399def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1400 let Latency = 7;
1401 let NumMicroOps = 3;
1402 let ResourceCycles = [1,1,1];
1403}
Craig Topper5a69a002018-03-21 06:28:42 +00001404def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1405 "PSLLQrm",
1406 "PSLLWrm",
1407 "PSRADrm",
1408 "PSRAWrm",
1409 "PSRLDrm",
1410 "PSRLQrm",
1411 "PSRLWrm",
1412 "PTESTrm",
1413 "VPSLLDrm",
1414 "VPSLLQrm",
1415 "VPSLLWrm",
1416 "VPSRADrm",
1417 "VPSRAWrm",
1418 "VPSRLDrm",
1419 "VPSRLQrm",
1420 "VPSRLWrm",
1421 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001422
1423def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1424 let Latency = 7;
1425 let NumMicroOps = 3;
1426 let ResourceCycles = [1,1,1];
1427}
1428def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1429
Gadi Haber323f2e12017-10-24 20:19:47 +00001430def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1431 let Latency = 7;
1432 let NumMicroOps = 3;
1433 let ResourceCycles = [1,1,1];
1434}
Craig Topper5a69a002018-03-21 06:28:42 +00001435def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1436 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001437
Gadi Haber323f2e12017-10-24 20:19:47 +00001438def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1439 let Latency = 7;
1440 let NumMicroOps = 3;
1441 let ResourceCycles = [1,1,1];
1442}
Craig Topperf4cd9082018-01-19 05:47:32 +00001443def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001444
1445def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1446 let Latency = 7;
1447 let NumMicroOps = 5;
1448 let ResourceCycles = [1,1,1,2];
1449}
Craig Topper5a69a002018-03-21 06:28:42 +00001450def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1451 "ROL(8|16|32|64)mi",
1452 "ROR(8|16|32|64)m1",
1453 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001454
1455def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1456 let Latency = 7;
1457 let NumMicroOps = 5;
1458 let ResourceCycles = [1,1,1,2];
1459}
Craig Topper5a69a002018-03-21 06:28:42 +00001460def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001461
1462def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1463 let Latency = 7;
1464 let NumMicroOps = 5;
1465 let ResourceCycles = [1,1,1,1,1];
1466}
Craig Topper5a69a002018-03-21 06:28:42 +00001467def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1468 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001469
1470def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1471 let Latency = 7;
1472 let NumMicroOps = 7;
1473 let ResourceCycles = [2,2,1,2];
1474}
Craig Topper2d451e72018-03-18 08:38:06 +00001475def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001476
1477def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1478 let Latency = 8;
1479 let NumMicroOps = 2;
1480 let ResourceCycles = [1,1];
1481}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001482def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001483 "PDEP(32|64)rm",
1484 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001485 "(V?)ADDPDrm",
1486 "(V?)ADDPSrm",
1487 "(V?)ADDSDrm",
1488 "(V?)ADDSSrm",
1489 "(V?)ADDSUBPDrm",
1490 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001491 "(V?)CVTDQ2PSrm",
1492 "(V?)CVTPS2DQrm",
1493 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001494 "(V?)SUBPDrm",
1495 "(V?)SUBPSrm",
1496 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001497 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001498
1499def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001500 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001501 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001502 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001503}
Craig Topperf846e2d2018-04-19 05:34:05 +00001504def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001505
Craig Topperf846e2d2018-04-19 05:34:05 +00001506def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1507 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001508 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001509 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001510}
Craig Topper5a69a002018-03-21 06:28:42 +00001511def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001512
Gadi Haber323f2e12017-10-24 20:19:47 +00001513def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1514 let Latency = 8;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Craig Topper5a69a002018-03-21 06:28:42 +00001518def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1519 "VPMOVSXBQYrm",
1520 "VPMOVSXBWYrm",
1521 "VPMOVSXDQYrm",
1522 "VPMOVSXWDYrm",
1523 "VPMOVSXWQYrm",
1524 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001525
1526def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1527 let Latency = 8;
1528 let NumMicroOps = 2;
1529 let ResourceCycles = [1,1];
1530}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001531def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1532 "(V?)MULPSrm",
1533 "(V?)MULSDrm",
1534 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001535
1536def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1537 let Latency = 8;
1538 let NumMicroOps = 3;
1539 let ResourceCycles = [2,1];
1540}
Craig Topper5a69a002018-03-21 06:28:42 +00001541def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1542 "VBLENDVPSYrm",
1543 "VMASKMOVPDYrm",
1544 "VMASKMOVPSYrm",
1545 "VPBLENDVBYrm",
1546 "VPMASKMOVDYrm",
1547 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001548
1549def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1550 let Latency = 8;
1551 let NumMicroOps = 4;
1552 let ResourceCycles = [2,1,1];
1553}
Craig Topper5a69a002018-03-21 06:28:42 +00001554def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1555 "VPSRAVDrm",
1556 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001557
1558def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1559 let Latency = 8;
1560 let NumMicroOps = 4;
1561 let ResourceCycles = [2,1,1];
1562}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001563def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001564 "(V?)PHADDDrm",
1565 "(V?)PHADDSWrm",
1566 "(V?)PHADDWrm",
1567 "(V?)PHSUBDrm",
1568 "(V?)PHSUBSWrm",
1569 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001570
1571def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1572 let Latency = 8;
1573 let NumMicroOps = 5;
1574 let ResourceCycles = [1,1,1,2];
1575}
Craig Topper5a69a002018-03-21 06:28:42 +00001576def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1577 "RCL(8|16|32|64)mi",
1578 "RCR(8|16|32|64)m1",
1579 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001580
1581def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1582 let Latency = 8;
1583 let NumMicroOps = 5;
1584 let ResourceCycles = [1,1,2,1];
1585}
Craig Topper13a16502018-03-19 00:56:09 +00001586def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001587
1588def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1589 let Latency = 8;
1590 let NumMicroOps = 6;
1591 let ResourceCycles = [1,1,1,3];
1592}
Craig Topper9f834812018-04-01 21:54:24 +00001593def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001594
1595def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1596 let Latency = 8;
1597 let NumMicroOps = 6;
1598 let ResourceCycles = [1,1,1,2,1];
1599}
Craig Topper9f834812018-04-01 21:54:24 +00001600def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001601 "CMPXCHG(8|16|32|64)rm",
1602 "ROL(8|16|32|64)mCL",
1603 "SAR(8|16|32|64)mCL",
1604 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001605 "SHL(8|16|32|64)mCL",
1606 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001607def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1608 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001609
1610def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1611 let Latency = 9;
1612 let NumMicroOps = 2;
1613 let ResourceCycles = [1,1];
1614}
Craig Topper5a69a002018-03-21 06:28:42 +00001615def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1616 "ADD_F64m",
1617 "ILD_F16m",
1618 "ILD_F32m",
1619 "ILD_F64m",
1620 "SUBR_F32m",
1621 "SUBR_F64m",
1622 "SUB_F32m",
1623 "SUB_F64m",
1624 "VADDPDYrm",
1625 "VADDPSYrm",
1626 "VADDSUBPDYrm",
1627 "VADDSUBPSYrm",
1628 "VCMPPDYrmi",
1629 "VCMPPSYrmi",
1630 "VCVTDQ2PSYrm",
1631 "VCVTPS2DQYrm",
1632 "VCVTTPS2DQYrm",
1633 "VMAX(C?)PDYrm",
1634 "VMAX(C?)PSYrm",
1635 "VMIN(C?)PDYrm",
1636 "VMIN(C?)PSYrm",
1637 "VSUBPDYrm",
1638 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001639
1640def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1641 let Latency = 9;
1642 let NumMicroOps = 2;
1643 let ResourceCycles = [1,1];
1644}
Craig Topper5a69a002018-03-21 06:28:42 +00001645def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1646 "VPERM2I128rm",
1647 "VPERMDYrm",
1648 "VPERMPDYmi",
1649 "VPERMPSYrm",
1650 "VPERMQYmi",
1651 "VPMOVZXBDYrm",
1652 "VPMOVZXBQYrm",
1653 "VPMOVZXBWYrm",
1654 "VPMOVZXDQYrm",
1655 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001656
1657def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1658 let Latency = 9;
1659 let NumMicroOps = 2;
1660 let ResourceCycles = [1,1];
1661}
Craig Topper5a69a002018-03-21 06:28:42 +00001662def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1663 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001664
1665def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1666 let Latency = 9;
1667 let NumMicroOps = 3;
1668 let ResourceCycles = [1,1,1];
1669}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001670def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001671
1672def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1673 let Latency = 9;
1674 let NumMicroOps = 3;
1675 let ResourceCycles = [1,1,1];
1676}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001677def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1678 "(V?)CVTSD2SIrm",
1679 "(V?)CVTSS2SI64rm",
1680 "(V?)CVTSS2SIrm",
1681 "(V?)CVTTSD2SI64rm",
1682 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001683 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001684 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001685
1686def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1687 let Latency = 9;
1688 let NumMicroOps = 3;
1689 let ResourceCycles = [1,1,1];
1690}
1691def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1692
1693def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1694 let Latency = 9;
1695 let NumMicroOps = 3;
1696 let ResourceCycles = [1,1,1];
1697}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001698def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001699def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001700 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001701 "CVTTPD2DQrm",
1702 "MMX_CVTPD2PIirm",
1703 "MMX_CVTPI2PDirm",
1704 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001705 "(V?)CVTDQ2PDrm",
1706 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001707
1708def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1709 let Latency = 9;
1710 let NumMicroOps = 3;
1711 let ResourceCycles = [1,1,1];
1712}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001713def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1714 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001715
1716def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1717 let Latency = 9;
1718 let NumMicroOps = 4;
1719 let ResourceCycles = [2,1,1];
1720}
Craig Topper5a69a002018-03-21 06:28:42 +00001721def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1722 "VPSRAVDYrm",
1723 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001724
1725def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1726 let Latency = 9;
1727 let NumMicroOps = 4;
1728 let ResourceCycles = [2,1,1];
1729}
Craig Topper5a69a002018-03-21 06:28:42 +00001730def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1731 "VPHADDSWYrm",
1732 "VPHADDWYrm",
1733 "VPHSUBDYrm",
1734 "VPHSUBSWYrm",
1735 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001736
1737def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1738 let Latency = 9;
1739 let NumMicroOps = 4;
1740 let ResourceCycles = [1,1,1,1];
1741}
Craig Topper5a69a002018-03-21 06:28:42 +00001742def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1743 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001744
1745def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1746 let Latency = 9;
1747 let NumMicroOps = 5;
1748 let ResourceCycles = [1,1,3];
1749}
1750def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1751
1752def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1753 let Latency = 9;
1754 let NumMicroOps = 5;
1755 let ResourceCycles = [1,2,1,1];
1756}
Craig Topper5a69a002018-03-21 06:28:42 +00001757def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1758 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001759
Gadi Haber323f2e12017-10-24 20:19:47 +00001760def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1761 let Latency = 10;
1762 let NumMicroOps = 2;
1763 let ResourceCycles = [1,1];
1764}
Craig Topper5a69a002018-03-21 06:28:42 +00001765def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1766 "MMX_PMADDWDirm",
1767 "MMX_PMULHRSWrm",
1768 "MMX_PMULHUWirm",
1769 "MMX_PMULHWirm",
1770 "MMX_PMULLWirm",
1771 "MMX_PMULUDQirm",
1772 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001773 "(V?)PCMPGTQrm",
1774 "(V?)PHMINPOSUWrm",
1775 "(V?)PMADDUBSWrm",
1776 "(V?)PMADDWDrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001777 "(V?)PSADBWrm",
1778 "(V?)RCPPSm",
1779 "(V?)RCPSSm",
1780 "(V?)RSQRTPSm",
1781 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001782
1783def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1784 let Latency = 10;
1785 let NumMicroOps = 2;
1786 let ResourceCycles = [1,1];
1787}
Craig Topperf82867c2017-12-13 23:11:30 +00001788def: InstRW<[BWWriteResGroup116],
1789 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1790 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001791
1792def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1793 let Latency = 10;
1794 let NumMicroOps = 3;
1795 let ResourceCycles = [2,1];
1796}
Craig Topper5a69a002018-03-21 06:28:42 +00001797def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1798 "FICOM32m",
1799 "FICOMP16m",
1800 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001801
1802def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1803 let Latency = 10;
1804 let NumMicroOps = 3;
1805 let ResourceCycles = [1,1,1];
1806}
1807def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1808
1809def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1810 let Latency = 10;
1811 let NumMicroOps = 4;
1812 let ResourceCycles = [1,2,1];
1813}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001814def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
1815 "(V?)HADDPSrm",
1816 "(V?)HSUBPDrm",
1817 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001818
1819def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1820 let Latency = 10;
1821 let NumMicroOps = 4;
1822 let ResourceCycles = [1,1,1,1];
1823}
1824def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1825
1826def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001827 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001828 let NumMicroOps = 4;
1829 let ResourceCycles = [1,1,1,1];
1830}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001831def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001832
Craig Topper8104f262018-04-02 05:33:28 +00001833def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001834 let Latency = 11;
1835 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001836 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001837}
Craig Topper8104f262018-04-02 05:33:28 +00001838def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1839
1840def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1841 let Latency = 11;
1842 let NumMicroOps = 1;
1843 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1844}
1845def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
1847def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1848 let Latency = 11;
1849 let NumMicroOps = 2;
1850 let ResourceCycles = [1,1];
1851}
Craig Topper5a69a002018-03-21 06:28:42 +00001852def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1853 "MUL_F64m",
1854 "VPCMPGTQYrm",
1855 "VPMADDUBSWYrm",
1856 "VPMADDWDYrm",
1857 "VPMULDQYrm",
1858 "VPMULHRSWYrm",
1859 "VPMULHUWYrm",
1860 "VPMULHWYrm",
1861 "VPMULLWYrm",
1862 "VPMULUDQYrm",
1863 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001864
1865def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1866 let Latency = 11;
1867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Craig Topperf82867c2017-12-13 23:11:30 +00001870def: InstRW<[BWWriteResGroup124],
1871 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001872
Gadi Haber323f2e12017-10-24 20:19:47 +00001873def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1874 let Latency = 11;
1875 let NumMicroOps = 3;
1876 let ResourceCycles = [2,1];
1877}
Craig Topper5a69a002018-03-21 06:28:42 +00001878def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1879 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001880
1881def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1882 let Latency = 11;
1883 let NumMicroOps = 3;
1884 let ResourceCycles = [2,1];
1885}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001886def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1887 "(V?)ROUNDPSm",
1888 "(V?)ROUNDSDm",
1889 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001890
1891def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1892 let Latency = 11;
1893 let NumMicroOps = 3;
1894 let ResourceCycles = [1,1,1];
1895}
1896def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1897
1898def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1899 let Latency = 11;
1900 let NumMicroOps = 4;
1901 let ResourceCycles = [1,2,1];
1902}
Craig Topper5a69a002018-03-21 06:28:42 +00001903def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1904 "VHADDPSYrm",
1905 "VHSUBPDYrm",
1906 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001907
1908def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1909 let Latency = 11;
1910 let NumMicroOps = 6;
1911 let ResourceCycles = [1,1,1,1,2];
1912}
Craig Topper5a69a002018-03-21 06:28:42 +00001913def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1914 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001915
1916def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1917 let Latency = 11;
1918 let NumMicroOps = 7;
1919 let ResourceCycles = [2,2,3];
1920}
Craig Topper5a69a002018-03-21 06:28:42 +00001921def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1922 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001923
1924def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1925 let Latency = 11;
1926 let NumMicroOps = 9;
1927 let ResourceCycles = [1,4,1,3];
1928}
1929def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1930
1931def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1932 let Latency = 11;
1933 let NumMicroOps = 11;
1934 let ResourceCycles = [2,9];
1935}
Craig Topper2d451e72018-03-18 08:38:06 +00001936def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1937def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001938
Gadi Haber323f2e12017-10-24 20:19:47 +00001939def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1940 let Latency = 12;
1941 let NumMicroOps = 3;
1942 let ResourceCycles = [2,1];
1943}
Craig Topper5a69a002018-03-21 06:28:42 +00001944def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1945 "ADD_FI32m",
1946 "SUBR_FI16m",
1947 "SUBR_FI32m",
1948 "SUB_FI16m",
1949 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001950 "VROUNDPDYm",
1951 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001952
1953def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1954 let Latency = 12;
1955 let NumMicroOps = 4;
1956 let ResourceCycles = [1,2,1];
1957}
Craig Topper5a69a002018-03-21 06:28:42 +00001958def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001959
Craig Topper8104f262018-04-02 05:33:28 +00001960def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001961 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001962 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001963 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001964}
Craig Topper8104f262018-04-02 05:33:28 +00001965def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1966
1967def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1968 let Latency = 11;
1969 let NumMicroOps = 1;
1970 let ResourceCycles = [1,4];
1971}
1972def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001973
1974def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1975 let Latency = 13;
1976 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001977 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001978}
1979def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1980
Craig Topper8104f262018-04-02 05:33:28 +00001981def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001982 let Latency = 14;
1983 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001984 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001985}
Craig Topper8104f262018-04-02 05:33:28 +00001986def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1987
1988def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1989 let Latency = 14;
1990 let NumMicroOps = 1;
1991 let ResourceCycles = [1,4];
1992}
1993def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001994
Gadi Haber323f2e12017-10-24 20:19:47 +00001995def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1996 let Latency = 14;
1997 let NumMicroOps = 3;
1998 let ResourceCycles = [1,1,1];
1999}
Craig Topper5a69a002018-03-21 06:28:42 +00002000def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2001 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002002
2003def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2004 let Latency = 14;
2005 let NumMicroOps = 4;
2006 let ResourceCycles = [2,1,1];
2007}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002008def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
2010def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2011 let Latency = 14;
2012 let NumMicroOps = 4;
2013 let ResourceCycles = [1,1,1,1];
2014}
Craig Topper5a69a002018-03-21 06:28:42 +00002015def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002016
2017def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2018 let Latency = 14;
2019 let NumMicroOps = 8;
2020 let ResourceCycles = [2,2,1,3];
2021}
2022def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2023
2024def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2025 let Latency = 14;
2026 let NumMicroOps = 10;
2027 let ResourceCycles = [2,3,1,4];
2028}
2029def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2030
2031def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2032 let Latency = 14;
2033 let NumMicroOps = 12;
2034 let ResourceCycles = [2,1,4,5];
2035}
2036def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2037
2038def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2039 let Latency = 15;
2040 let NumMicroOps = 1;
2041 let ResourceCycles = [1];
2042}
Craig Topper5a69a002018-03-21 06:28:42 +00002043def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2044 "DIVR_FST0r",
2045 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002046
Gadi Haber323f2e12017-10-24 20:19:47 +00002047def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2048 let Latency = 15;
2049 let NumMicroOps = 10;
2050 let ResourceCycles = [1,1,1,4,1,2];
2051}
Craig Topper13a16502018-03-19 00:56:09 +00002052def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002053
Craig Topper8104f262018-04-02 05:33:28 +00002054def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002055 let Latency = 16;
2056 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002057 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002058}
Craig Topper5a69a002018-03-21 06:28:42 +00002059def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2060 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002061
2062def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2063 let Latency = 16;
2064 let NumMicroOps = 3;
2065 let ResourceCycles = [2,1];
2066}
2067def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2068
Gadi Haber323f2e12017-10-24 20:19:47 +00002069def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2070 let Latency = 16;
2071 let NumMicroOps = 14;
2072 let ResourceCycles = [1,1,1,4,2,5];
2073}
2074def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2075
2076def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2077 let Latency = 16;
2078 let NumMicroOps = 16;
2079 let ResourceCycles = [16];
2080}
Craig Topper5a69a002018-03-21 06:28:42 +00002081def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002082
Craig Topper8104f262018-04-02 05:33:28 +00002083def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002084 let Latency = 17;
2085 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002086 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002087}
2088def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2089
2090def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2091 let Latency = 17;
2092 let NumMicroOps = 4;
2093 let ResourceCycles = [2,1,1];
2094}
Craig Topper5a69a002018-03-21 06:28:42 +00002095def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2096 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002097
Craig Topper8104f262018-04-02 05:33:28 +00002098def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002099 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002100 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002101 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002102}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002103def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2104 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002105
Gadi Haber323f2e12017-10-24 20:19:47 +00002106def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2107 let Latency = 18;
2108 let NumMicroOps = 8;
2109 let ResourceCycles = [1,1,1,5];
2110}
Craig Topper5a69a002018-03-21 06:28:42 +00002111def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002112def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002113
2114def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2115 let Latency = 18;
2116 let NumMicroOps = 11;
2117 let ResourceCycles = [2,1,1,3,1,3];
2118}
Craig Topper13a16502018-03-19 00:56:09 +00002119def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002120
Craig Topper8104f262018-04-02 05:33:28 +00002121def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002122 let Latency = 19;
2123 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002124 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002125}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002126def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002127 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128
Gadi Haber323f2e12017-10-24 20:19:47 +00002129def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2130 let Latency = 19;
2131 let NumMicroOps = 5;
2132 let ResourceCycles = [2,1,1,1];
2133}
Craig Topper5a69a002018-03-21 06:28:42 +00002134def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002135
Gadi Haber323f2e12017-10-24 20:19:47 +00002136def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2137 let Latency = 20;
2138 let NumMicroOps = 1;
2139 let ResourceCycles = [1];
2140}
Craig Topper5a69a002018-03-21 06:28:42 +00002141def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2142 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002143 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002144
2145def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2146 let Latency = 20;
2147 let NumMicroOps = 5;
2148 let ResourceCycles = [2,1,1,1];
2149}
2150def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2151
2152def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2153 let Latency = 20;
2154 let NumMicroOps = 8;
2155 let ResourceCycles = [1,1,1,1,1,1,2];
2156}
Craig Topper5a69a002018-03-21 06:28:42 +00002157def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2158 "INSL",
2159 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002160
Craig Topper8104f262018-04-02 05:33:28 +00002161def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002162 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002163 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002164 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002165}
Craig Topper8104f262018-04-02 05:33:28 +00002166def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2167
2168def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2169 let Latency = 16;
2170 let NumMicroOps = 1;
2171 let ResourceCycles = [1,8];
2172}
2173def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002174
2175def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2176 let Latency = 21;
2177 let NumMicroOps = 2;
2178 let ResourceCycles = [1,1];
2179}
Craig Topper5a69a002018-03-21 06:28:42 +00002180def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2181 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002182
Craig Topper8104f262018-04-02 05:33:28 +00002183def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002184 let Latency = 21;
2185 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002186 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002187}
2188def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2189
2190def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2191 let Latency = 21;
2192 let NumMicroOps = 19;
2193 let ResourceCycles = [2,1,4,1,1,4,6];
2194}
2195def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2196
2197def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2198 let Latency = 22;
2199 let NumMicroOps = 18;
2200 let ResourceCycles = [1,1,16];
2201}
2202def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2203
Craig Topper8104f262018-04-02 05:33:28 +00002204def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002205 let Latency = 23;
2206 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002207 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002208}
2209def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2210
Craig Topper8104f262018-04-02 05:33:28 +00002211def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002212 let Latency = 23;
2213 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002214 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002215}
2216def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2217
Gadi Haber323f2e12017-10-24 20:19:47 +00002218def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2219 let Latency = 23;
2220 let NumMicroOps = 19;
2221 let ResourceCycles = [3,1,15];
2222}
Craig Topper391c6f92017-12-10 01:24:08 +00002223def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002224
2225def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2226 let Latency = 24;
2227 let NumMicroOps = 3;
2228 let ResourceCycles = [1,1,1];
2229}
Craig Topper5a69a002018-03-21 06:28:42 +00002230def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2231 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002232
Craig Topper8104f262018-04-02 05:33:28 +00002233def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002234 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002235 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002236 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002237}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002238def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2239 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002240
2241def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2242 let Latency = 26;
2243 let NumMicroOps = 2;
2244 let ResourceCycles = [1,1];
2245}
Craig Topper5a69a002018-03-21 06:28:42 +00002246def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002247 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002248
Craig Topper8104f262018-04-02 05:33:28 +00002249def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002250 let Latency = 27;
2251 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002252 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002253}
2254def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2255
2256def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2257 let Latency = 29;
2258 let NumMicroOps = 3;
2259 let ResourceCycles = [1,1,1];
2260}
Craig Topper5a69a002018-03-21 06:28:42 +00002261def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2262 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002263
Craig Topper8104f262018-04-02 05:33:28 +00002264def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002265 let Latency = 29;
2266 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002267 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002268}
2269def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2270
2271def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2272 let Latency = 22;
2273 let NumMicroOps = 7;
2274 let ResourceCycles = [1,3,2,1];
2275}
Craig Topper17a31182017-12-16 18:35:29 +00002276def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002277
2278def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2279 let Latency = 23;
2280 let NumMicroOps = 9;
2281 let ResourceCycles = [1,3,4,1];
2282}
Craig Topper17a31182017-12-16 18:35:29 +00002283def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002284
2285def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2286 let Latency = 24;
2287 let NumMicroOps = 9;
2288 let ResourceCycles = [1,5,2,1];
2289}
Craig Topper17a31182017-12-16 18:35:29 +00002290def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002291
2292def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2293 let Latency = 25;
2294 let NumMicroOps = 7;
2295 let ResourceCycles = [1,3,2,1];
2296}
Craig Topper17a31182017-12-16 18:35:29 +00002297def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2298 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002299
2300def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2301 let Latency = 26;
2302 let NumMicroOps = 9;
2303 let ResourceCycles = [1,5,2,1];
2304}
Craig Topper17a31182017-12-16 18:35:29 +00002305def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002306
2307def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2308 let Latency = 26;
2309 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002310 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002311}
Craig Topper17a31182017-12-16 18:35:29 +00002312def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002313
2314def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2315 let Latency = 27;
2316 let NumMicroOps = 9;
2317 let ResourceCycles = [1,5,2,1];
2318}
Craig Topper17a31182017-12-16 18:35:29 +00002319def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002320
Gadi Haber323f2e12017-10-24 20:19:47 +00002321def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2322 let Latency = 29;
2323 let NumMicroOps = 27;
2324 let ResourceCycles = [1,5,1,1,19];
2325}
2326def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2327
2328def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2329 let Latency = 30;
2330 let NumMicroOps = 28;
2331 let ResourceCycles = [1,6,1,1,19];
2332}
Craig Topper2d451e72018-03-18 08:38:06 +00002333def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002334
2335def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2336 let Latency = 31;
2337 let NumMicroOps = 31;
2338 let ResourceCycles = [8,1,21,1];
2339}
2340def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2341
Craig Topper8104f262018-04-02 05:33:28 +00002342def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2343 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002344 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002345 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002346}
2347def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2348
2349def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2350 let Latency = 34;
2351 let NumMicroOps = 8;
2352 let ResourceCycles = [2,2,2,1,1];
2353}
Craig Topper13a16502018-03-19 00:56:09 +00002354def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002355
2356def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2357 let Latency = 34;
2358 let NumMicroOps = 23;
2359 let ResourceCycles = [1,5,3,4,10];
2360}
Craig Topper5a69a002018-03-21 06:28:42 +00002361def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2362 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002363
2364def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2365 let Latency = 35;
2366 let NumMicroOps = 8;
2367 let ResourceCycles = [2,2,2,1,1];
2368}
Craig Topper13a16502018-03-19 00:56:09 +00002369def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002370
2371def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2372 let Latency = 35;
2373 let NumMicroOps = 23;
2374 let ResourceCycles = [1,5,2,1,4,10];
2375}
Craig Topper5a69a002018-03-21 06:28:42 +00002376def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2377 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002378
Craig Topper8104f262018-04-02 05:33:28 +00002379def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2380 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002381 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002382 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002383}
2384def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2385
2386def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2387 let Latency = 42;
2388 let NumMicroOps = 22;
2389 let ResourceCycles = [2,20];
2390}
Craig Topper2d451e72018-03-18 08:38:06 +00002391def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002392
2393def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2394 let Latency = 60;
2395 let NumMicroOps = 64;
2396 let ResourceCycles = [2,2,8,1,10,2,39];
2397}
2398def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002399
2400def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2401 let Latency = 63;
2402 let NumMicroOps = 88;
2403 let ResourceCycles = [4,4,31,1,2,1,45];
2404}
Craig Topper2d451e72018-03-18 08:38:06 +00002405def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002406
2407def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2408 let Latency = 63;
2409 let NumMicroOps = 90;
2410 let ResourceCycles = [4,2,33,1,2,1,47];
2411}
Craig Topper2d451e72018-03-18 08:38:06 +00002412def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002413
2414def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2415 let Latency = 75;
2416 let NumMicroOps = 15;
2417 let ResourceCycles = [6,3,6];
2418}
2419def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2420
2421def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2422 let Latency = 80;
2423 let NumMicroOps = 32;
2424 let ResourceCycles = [7,7,3,3,1,11];
2425}
2426def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2427
2428def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2429 let Latency = 115;
2430 let NumMicroOps = 100;
2431 let ResourceCycles = [9,9,11,8,1,11,21,30];
2432}
2433def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002434
2435} // SchedModel
2436