blob: e7f58c9f471b9e7f01f47a12b781a978bba8a5ba [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",
Craig Topper5a69a002018-03-21 06:28:42 +0000354 "VBROADCASTSSrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000355 "(V?)MOV64toPQIrr",
356 "(V?)MOVAPD(Y?)rr",
357 "(V?)MOVAPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000359 "(V?)MOVUPD(Y?)rr",
360 "(V?)MOVUPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000361 "(V?)PBLENDW(Y?)rri",
Craig Topper5a69a002018-03-21 06:28:42 +0000362 "VPBROADCASTDrr",
363 "VPBROADCASTQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000364 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000365 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000366
367def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
372def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
373
374def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
375 let Latency = 1;
376 let NumMicroOps = 1;
377 let ResourceCycles = [1];
378}
Craig Topper5a69a002018-03-21 06:28:42 +0000379def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
380 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000381
382def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
383 let Latency = 1;
384 let NumMicroOps = 1;
385 let ResourceCycles = [1];
386}
Craig Topperfbe31322018-04-05 21:56:19 +0000387def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000388def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
389 "ADC(16|32|64)i",
390 "ADC(8|16|32|64)rr",
391 "ADCX(32|64)rr",
392 "ADOX(32|64)rr",
393 "BT(16|32|64)ri8",
394 "BT(16|32|64)rr",
395 "BTC(16|32|64)ri8",
396 "BTC(16|32|64)rr",
397 "BTR(16|32|64)ri8",
398 "BTR(16|32|64)rr",
399 "BTS(16|32|64)ri8",
400 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000401 "SBB(16|32|64)ri",
402 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000403 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000404
405def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
406 let Latency = 1;
407 let NumMicroOps = 1;
408 let ResourceCycles = [1];
409}
Craig Topper5a69a002018-03-21 06:28:42 +0000410def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
411 "BLSI(32|64)rr",
412 "BLSMSK(32|64)rr",
413 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000414 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000415
416def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
417 let Latency = 1;
418 let NumMicroOps = 1;
419 let ResourceCycles = [1];
420}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000421def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000422 "(V?)MOVDQA(Y?)rr",
423 "(V?)MOVDQU(Y?)rr",
424 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000425 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000426 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000427
428def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
429 let Latency = 1;
430 let NumMicroOps = 1;
431 let ResourceCycles = [1];
432}
Craig Topperdfccafe2018-04-18 06:41:25 +0000433def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000434 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000435 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000436 "SGDT64m",
437 "SIDT64m",
438 "SLDT64m",
439 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000440 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000441 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000442
443def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
444 let Latency = 1;
445 let NumMicroOps = 2;
446 let ResourceCycles = [1,1];
447}
Craig Topper5a69a002018-03-21 06:28:42 +0000448def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
449 "MMX_MOVD64from64rm",
450 "MMX_MOVD64mr",
451 "MMX_MOVNTQmr",
452 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000453 "MOVNTI_64mr",
454 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000455 "ST_FP32m",
456 "ST_FP64m",
457 "ST_FP80m",
458 "VEXTRACTF128mr",
459 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000460 "(V?)MOVAPD(Y?)mr",
461 "(V?)MOVAPS(Y?)mr",
462 "(V?)MOVDQA(Y?)mr",
463 "(V?)MOVDQU(Y?)mr",
464 "(V?)MOVHPDmr",
465 "(V?)MOVHPSmr",
466 "(V?)MOVLPDmr",
467 "(V?)MOVLPSmr",
468 "(V?)MOVNTDQ(V?)mr",
469 "(V?)MOVNTPD(V?)mr",
470 "(V?)MOVNTPS(V?)mr",
471 "(V?)MOVPDI2DImr",
472 "(V?)MOVPQI2QImr",
473 "(V?)MOVPQIto64mr",
474 "(V?)MOVSDmr",
475 "(V?)MOVSSmr",
476 "(V?)MOVUPD(Y?)mr",
477 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000478
479def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
480 let Latency = 2;
481 let NumMicroOps = 2;
482 let ResourceCycles = [2];
483}
Craig Topper5a69a002018-03-21 06:28:42 +0000484def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
485 "BLENDVPSrr0",
486 "MMX_PINSRWrr",
487 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000488 "VBLENDVPD(Y?)rr",
489 "VBLENDVPS(Y?)rr",
490 "VPBLENDVB(Y?)rr",
491 "(V?)PINSRBrr",
492 "(V?)PINSRDrr",
493 "(V?)PINSRQrr",
494 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000495
496def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
497 let Latency = 2;
498 let NumMicroOps = 2;
499 let ResourceCycles = [2];
500}
501def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
502
503def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
504 let Latency = 2;
505 let NumMicroOps = 2;
506 let ResourceCycles = [2];
507}
Craig Topper5a69a002018-03-21 06:28:42 +0000508def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
509 "ROL(8|16|32|64)ri",
510 "ROR(8|16|32|64)r1",
511 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000512
513def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
514 let Latency = 2;
515 let NumMicroOps = 2;
516 let ResourceCycles = [2];
517}
Craig Topper5a69a002018-03-21 06:28:42 +0000518def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
519 "MFENCE",
520 "WAIT",
521 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000522
523def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
524 let Latency = 2;
525 let NumMicroOps = 2;
526 let ResourceCycles = [1,1];
527}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000528def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
529 "VCVTPH2PS(Y?)rr",
530 "(V?)CVTPS2PDrr",
531 "(V?)CVTSS2SDrr",
532 "(V?)EXTRACTPSrr",
533 "(V?)PEXTRBrr",
534 "(V?)PEXTRDrr",
535 "(V?)PEXTRQrr",
536 "(V?)PEXTRWrr",
537 "(V?)PSLLDrr",
538 "(V?)PSLLQrr",
539 "(V?)PSLLWrr",
540 "(V?)PSRADrr",
541 "(V?)PSRAWrr",
542 "(V?)PSRLDrr",
543 "(V?)PSRLQrr",
544 "(V?)PSRLWrr",
545 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000546
547def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
548 let Latency = 2;
549 let NumMicroOps = 2;
550 let ResourceCycles = [1,1];
551}
552def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
553
554def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
555 let Latency = 2;
556 let NumMicroOps = 2;
557 let ResourceCycles = [1,1];
558}
559def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
560
561def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
562 let Latency = 2;
563 let NumMicroOps = 2;
564 let ResourceCycles = [1,1];
565}
566def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
567
568def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
569 let Latency = 2;
570 let NumMicroOps = 2;
571 let ResourceCycles = [1,1];
572}
Craig Topper498875f2018-04-04 17:54:19 +0000573def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
574
575def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
576 let Latency = 1;
577 let NumMicroOps = 1;
578 let ResourceCycles = [1];
579}
580def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000581
582def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
583 let Latency = 2;
584 let NumMicroOps = 2;
585 let ResourceCycles = [1,1];
586}
Craig Topper2d451e72018-03-18 08:38:06 +0000587def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000588def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000589def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
590 "ADC8ri",
591 "CMOV(A|BE)(16|32|64)rr",
592 "SBB8i8",
593 "SBB8ri",
594 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000595
596def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
597 let Latency = 2;
598 let NumMicroOps = 3;
599 let ResourceCycles = [1,1,1];
600}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000601def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
602 "(V?)PEXTRBmr",
603 "(V?)PEXTRDmr",
604 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000605 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000606
607def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
608 let Latency = 2;
609 let NumMicroOps = 3;
610 let ResourceCycles = [1,1,1];
611}
612def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
613
Gadi Haber323f2e12017-10-24 20:19:47 +0000614def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
615 let Latency = 2;
616 let NumMicroOps = 3;
617 let ResourceCycles = [1,1,1];
618}
619def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
620
621def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
622 let Latency = 2;
623 let NumMicroOps = 3;
624 let ResourceCycles = [1,1,1];
625}
Craig Topper2d451e72018-03-18 08:38:06 +0000626def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000627def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
628 "PUSH64i8",
629 "STOSB",
630 "STOSL",
631 "STOSQ",
632 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000633
Gadi Haber323f2e12017-10-24 20:19:47 +0000634def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
635 let Latency = 3;
636 let NumMicroOps = 1;
637 let ResourceCycles = [1];
638}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000639def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000640 "PDEP(32|64)rr",
641 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000642 "SHLD(16|32|64)rri8",
643 "SHRD(16|32|64)rri8",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000644 "(V?)CVTDQ2PS(Y?)rr",
645 "(V?)CVTPS2DQ(Y?)rr",
Craig Topperdfccafe2018-04-18 06:41:25 +0000646 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000647
648def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000649 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000650 let NumMicroOps = 2;
651 let ResourceCycles = [1,1];
652}
Clement Courbet327fac42018-03-07 08:14:02 +0000653def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000654
655def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
656 let Latency = 3;
657 let NumMicroOps = 1;
658 let ResourceCycles = [1];
659}
Craig Topper5a69a002018-03-21 06:28:42 +0000660def: InstRW<[BWWriteResGroup28], (instregex "VBROADCASTSDYrr",
661 "VBROADCASTSSYrr",
662 "VEXTRACTF128rr",
663 "VEXTRACTI128rr",
664 "VINSERTF128rr",
665 "VINSERTI128rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000666 "VPBROADCASTB(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000667 "VPBROADCASTDYrr",
668 "VPBROADCASTQYrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000669 "VPBROADCASTW(Y?)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000670 "VPERM2F128rr",
671 "VPERM2I128rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000672 "VPERMPDYri",
Craig Topper5a69a002018-03-21 06:28:42 +0000673 "VPERMQYri",
674 "VPMOVSXBDYrr",
675 "VPMOVSXBQYrr",
676 "VPMOVSXBWYrr",
677 "VPMOVSXDQYrr",
678 "VPMOVSXWDYrr",
679 "VPMOVSXWQYrr",
680 "VPMOVZXBDYrr",
681 "VPMOVZXBQYrr",
682 "VPMOVZXBWYrr",
683 "VPMOVZXDQYrr",
684 "VPMOVZXWDYrr",
685 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000686
687def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
688 let Latency = 3;
689 let NumMicroOps = 1;
690 let ResourceCycles = [1];
691}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000692def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
693 "(V?)MULPS(Y?)rr",
694 "(V?)MULSDrr",
695 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000696
697def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000698 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000699 let NumMicroOps = 3;
700 let ResourceCycles = [3];
701}
Craig Topperb5f26592018-04-19 18:00:17 +0000702def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
703 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
704 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000705
706def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
707 let Latency = 3;
708 let NumMicroOps = 3;
709 let ResourceCycles = [2,1];
710}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000711def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
712 "VPSRAVD(Y?)rr",
713 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000714
715def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
716 let Latency = 3;
717 let NumMicroOps = 3;
718 let ResourceCycles = [2,1];
719}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000720def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000721 "(V?)PHADDD(Y?)rr",
722 "(V?)PHADDSW(Y?)rr",
723 "(V?)PHADDW(Y?)rr",
724 "(V?)PHSUBD(Y?)rr",
725 "(V?)PHSUBSW(Y?)rr",
726 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000727
728def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
729 let Latency = 3;
730 let NumMicroOps = 3;
731 let ResourceCycles = [2,1];
732}
Craig Topper5a69a002018-03-21 06:28:42 +0000733def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
734 "MMX_PACKSSWBirr",
735 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000736
737def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
738 let Latency = 3;
739 let NumMicroOps = 3;
740 let ResourceCycles = [1,2];
741}
742def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
743
744def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
745 let Latency = 3;
746 let NumMicroOps = 3;
747 let ResourceCycles = [1,2];
748}
Craig Topper5a69a002018-03-21 06:28:42 +0000749def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
750 "RCL(8|16|32|64)ri",
751 "RCR(8|16|32|64)r1",
752 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000753
754def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
755 let Latency = 3;
756 let NumMicroOps = 3;
757 let ResourceCycles = [2,1];
758}
Craig Topper5a69a002018-03-21 06:28:42 +0000759def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
760 "ROR(8|16|32|64)rCL",
761 "SAR(8|16|32|64)rCL",
762 "SHL(8|16|32|64)rCL",
763 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000764
765def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
766 let Latency = 3;
767 let NumMicroOps = 4;
768 let ResourceCycles = [1,1,1,1];
769}
770def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
771
772def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
773 let Latency = 3;
774 let NumMicroOps = 4;
775 let ResourceCycles = [1,1,1,1];
776}
Craig Topper5a69a002018-03-21 06:28:42 +0000777def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
778 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000779
780def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
781 let Latency = 4;
782 let NumMicroOps = 2;
783 let ResourceCycles = [1,1];
784}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000785def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
786 "(V?)CVTSD2SIrr",
787 "(V?)CVTSS2SI64rr",
788 "(V?)CVTSS2SIrr",
789 "(V?)CVTTSD2SI64rr",
790 "(V?)CVTTSD2SIrr",
791 "(V?)CVTTSS2SI64rr",
792 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000793
794def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
795 let Latency = 4;
796 let NumMicroOps = 2;
797 let ResourceCycles = [1,1];
798}
Craig Topper5a69a002018-03-21 06:28:42 +0000799def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
800 "VPSLLDYrr",
801 "VPSLLQYrr",
802 "VPSLLWYrr",
803 "VPSRADYrr",
804 "VPSRAWYrr",
805 "VPSRLDYrr",
806 "VPSRLQYrr",
807 "VPSRLWYrr",
808 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000809
810def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
811 let Latency = 4;
812 let NumMicroOps = 2;
813 let ResourceCycles = [1,1];
814}
815def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
816
817def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
818 let Latency = 4;
819 let NumMicroOps = 2;
820 let ResourceCycles = [1,1];
821}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000822def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000823def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000824 "MMX_CVTPI2PDirr",
825 "MMX_CVTPS2PIirr",
826 "MMX_CVTTPD2PIirr",
827 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000828 "(V?)CVTDQ2PDrr",
829 "(V?)CVTPD2DQrr",
830 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000831 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000832 "(V?)CVTSD2SSrr",
833 "(V?)CVTSI642SDrr",
834 "(V?)CVTSI2SDrr",
835 "(V?)CVTSI2SSrr",
836 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000837
838def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
839 let Latency = 4;
840 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000841 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000842}
Craig Topper5a69a002018-03-21 06:28:42 +0000843def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000844
845def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
846 let Latency = 4;
847 let NumMicroOps = 3;
848 let ResourceCycles = [1,1,1];
849}
850def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
851
852def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
853 let Latency = 4;
854 let NumMicroOps = 3;
855 let ResourceCycles = [1,1,1];
856}
Craig Topper5a69a002018-03-21 06:28:42 +0000857def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
858 "ISTT_FP32m",
859 "ISTT_FP64m",
860 "IST_F16m",
861 "IST_F32m",
862 "IST_FP16m",
863 "IST_FP32m",
864 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000865 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000866
867def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
868 let Latency = 4;
869 let NumMicroOps = 4;
870 let ResourceCycles = [4];
871}
872def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
873
874def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
875 let Latency = 4;
876 let NumMicroOps = 4;
877 let ResourceCycles = [1,3];
878}
879def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
880
881def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
882 let Latency = 5;
883 let NumMicroOps = 1;
884 let ResourceCycles = [1];
885}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000886def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000887
Gadi Haber323f2e12017-10-24 20:19:47 +0000888def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
889 let Latency = 5;
890 let NumMicroOps = 1;
891 let ResourceCycles = [1];
892}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000893def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000894 "MOVSX(16|32|64)rm32",
895 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000896 "MOVZX(16|32|64)rm16",
897 "MOVZX(16|32|64)rm8",
898 "PREFETCHNTA",
899 "PREFETCHT0",
900 "PREFETCHT1",
901 "PREFETCHT2",
902 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000903 "(V?)LDDQUrm",
904 "(V?)MOV64toPQIrm",
905 "(V?)MOVAPDrm",
906 "(V?)MOVAPSrm",
907 "(V?)MOVDDUPrm",
908 "(V?)MOVDI2PDIrm",
909 "(V?)MOVDQArm",
910 "(V?)MOVDQUrm",
911 "(V?)MOVNTDQArm",
912 "(V?)MOVQI2PQIrm",
913 "(V?)MOVSDrm",
914 "(V?)MOVSHDUPrm",
915 "(V?)MOVSLDUPrm",
916 "(V?)MOVSSrm",
917 "(V?)MOVUPDrm",
918 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000919 "VPBROADCASTDrm",
920 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000921
922def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
923 let Latency = 5;
924 let NumMicroOps = 3;
925 let ResourceCycles = [1,2];
926}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000927def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
928 "(V?)HADDPD(Y?)rr",
929 "(V?)HADDPS(Y?)rr",
930 "(V?)HSUBPD(Y?)rr",
931 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000932
933def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
934 let Latency = 5;
935 let NumMicroOps = 3;
936 let ResourceCycles = [1,1,1];
937}
938def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
939
940def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000941 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000942 let NumMicroOps = 3;
943 let ResourceCycles = [1,1,1];
944}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000945def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000946
947def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
948 let Latency = 5;
949 let NumMicroOps = 4;
950 let ResourceCycles = [1,1,1,1];
951}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000952def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
953 "VMASKMOVPS(Y?)mr",
954 "VPMASKMOVD(Y?)mr",
955 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000956
957def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
958 let Latency = 5;
959 let NumMicroOps = 5;
960 let ResourceCycles = [1,4];
961}
962def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
963
964def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
965 let Latency = 5;
966 let NumMicroOps = 5;
967 let ResourceCycles = [1,4];
968}
969def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
970
971def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
972 let Latency = 5;
973 let NumMicroOps = 5;
974 let ResourceCycles = [2,3];
975}
Craig Topper5a69a002018-03-21 06:28:42 +0000976def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000977
978def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
979 let Latency = 5;
980 let NumMicroOps = 6;
981 let ResourceCycles = [1,1,4];
982}
Craig Topper5a69a002018-03-21 06:28:42 +0000983def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000984
985def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
986 let Latency = 6;
987 let NumMicroOps = 1;
988 let ResourceCycles = [1];
989}
Craig Topper5a69a002018-03-21 06:28:42 +0000990def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
991 "LD_F64m",
992 "LD_F80m",
993 "VBROADCASTF128",
994 "VBROADCASTI128",
995 "VBROADCASTSDYrm",
996 "VBROADCASTSSYrm",
997 "VLDDQUYrm",
998 "VMOVAPDYrm",
999 "VMOVAPSYrm",
1000 "VMOVDDUPYrm",
1001 "VMOVDQAYrm",
1002 "VMOVDQUYrm",
1003 "VMOVNTDQAYrm",
1004 "VMOVSHDUPYrm",
1005 "VMOVSLDUPYrm",
1006 "VMOVUPDYrm",
1007 "VMOVUPSYrm",
1008 "VPBROADCASTDYrm",
1009 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001010 "(V?)ROUNDPD(Y?)r",
1011 "(V?)ROUNDPS(Y?)r",
1012 "(V?)ROUNDSDr",
1013 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001014
1015def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
1016 let Latency = 6;
1017 let NumMicroOps = 2;
1018 let ResourceCycles = [1,1];
1019}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001020def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001021 "MMX_PSLLQrm",
1022 "MMX_PSLLWrm",
1023 "MMX_PSRADrm",
1024 "MMX_PSRAWrm",
1025 "MMX_PSRLDrm",
1026 "MMX_PSRLQrm",
1027 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001028 "VCVTPH2PS(Y?)rm",
1029 "(V?)CVTPS2PDrm",
1030 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001031 "VPSLLVQrm",
1032 "VPSRLVQrm",
1033 "VTESTPDrm",
1034 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001035
1036def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1037 let Latency = 6;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [1,1];
1040}
Craig Topper5a69a002018-03-21 06:28:42 +00001041def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1042 "VCVTPD2DQYrr",
1043 "VCVTPD2PSYrr",
1044 "VCVTPS2PHYrr",
1045 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001046
1047def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1048 let Latency = 6;
1049 let NumMicroOps = 2;
1050 let ResourceCycles = [1,1];
1051}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001052def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001053 "MMX_PINSRWrm",
1054 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001055 "MMX_PUNPCKHBWirm",
1056 "MMX_PUNPCKHDQirm",
1057 "MMX_PUNPCKHWDirm",
1058 "MMX_PUNPCKLBWirm",
1059 "MMX_PUNPCKLDQirm",
1060 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001061 "(V?)INSERTPSrm",
1062 "(V?)MOVHPDrm",
1063 "(V?)MOVHPSrm",
1064 "(V?)MOVLPDrm",
1065 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001066 "(V?)PACKSSDWrm",
1067 "(V?)PACKSSWBrm",
1068 "(V?)PACKUSDWrm",
1069 "(V?)PACKUSWBrm",
1070 "(V?)PALIGNRrmi",
1071 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001072 "VPERMILPDmi",
1073 "VPERMILPDrm",
1074 "VPERMILPSmi",
1075 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001076 "(V?)PINSRBrm",
1077 "(V?)PINSRDrm",
1078 "(V?)PINSRQrm",
1079 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001080 "(V?)PSHUFBrm",
1081 "(V?)PSHUFDmi",
1082 "(V?)PSHUFHWmi",
1083 "(V?)PSHUFLWmi",
1084 "(V?)PUNPCKHBWrm",
1085 "(V?)PUNPCKHDQrm",
1086 "(V?)PUNPCKHQDQrm",
1087 "(V?)PUNPCKHWDrm",
1088 "(V?)PUNPCKLBWrm",
1089 "(V?)PUNPCKLDQrm",
1090 "(V?)PUNPCKLQDQrm",
1091 "(V?)PUNPCKLWDrm",
1092 "(V?)SHUFPDrmi",
1093 "(V?)SHUFPSrmi",
1094 "(V?)UNPCKHPDrm",
1095 "(V?)UNPCKHPSrm",
1096 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001097 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001098
1099def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1100 let Latency = 6;
1101 let NumMicroOps = 2;
1102 let ResourceCycles = [1,1];
1103}
Craig Topper5a69a002018-03-21 06:28:42 +00001104def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1105 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001106
1107def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1108 let Latency = 6;
1109 let NumMicroOps = 2;
1110 let ResourceCycles = [1,1];
1111}
Craig Topperdfccafe2018-04-18 06:41:25 +00001112def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001113def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1114 ADCX32rm, ADCX64rm,
1115 ADOX32rm, ADOX64rm,
1116 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001117
1118def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1119 let Latency = 6;
1120 let NumMicroOps = 2;
1121 let ResourceCycles = [1,1];
1122}
Craig Topper5a69a002018-03-21 06:28:42 +00001123def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1124 "BLSI(32|64)rm",
1125 "BLSMSK(32|64)rm",
1126 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001127 "MMX_PADD(B|D|Q|W)irm",
1128 "MMX_PADDS(B|W)irm",
1129 "MMX_PADDUS(B|W)irm",
1130 "MMX_PAVG(B|W)irm",
1131 "MMX_PCMPEQ(B|D|W)irm",
1132 "MMX_PCMPGT(B|D|W)irm",
1133 "MMX_P(MAX|MIN)SWirm",
1134 "MMX_P(MAX|MIN)UBirm",
1135 "MMX_PSIGN(B|D|W)rm",
1136 "MMX_PSUB(B|D|Q|W)irm",
1137 "MMX_PSUBS(B|W)irm",
1138 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001139 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001140 "(V?)PABSBrm",
1141 "(V?)PABSDrm",
1142 "(V?)PABSWrm",
1143 "(V?)PADDBrm",
1144 "(V?)PADDDrm",
1145 "(V?)PADDQrm",
1146 "(V?)PADDSBrm",
1147 "(V?)PADDSWrm",
1148 "(V?)PADDUSBrm",
1149 "(V?)PADDUSWrm",
1150 "(V?)PADDWrm",
1151 "(V?)PAVGBrm",
1152 "(V?)PAVGWrm",
1153 "(V?)PCMPEQBrm",
1154 "(V?)PCMPEQDrm",
1155 "(V?)PCMPEQQrm",
1156 "(V?)PCMPEQWrm",
1157 "(V?)PCMPGTBrm",
1158 "(V?)PCMPGTDrm",
1159 "(V?)PCMPGTWrm",
1160 "(V?)PMAXSBrm",
1161 "(V?)PMAXSDrm",
1162 "(V?)PMAXSWrm",
1163 "(V?)PMAXUBrm",
1164 "(V?)PMAXUDrm",
1165 "(V?)PMAXUWrm",
1166 "(V?)PMINSBrm",
1167 "(V?)PMINSDrm",
1168 "(V?)PMINSWrm",
1169 "(V?)PMINUBrm",
1170 "(V?)PMINUDrm",
1171 "(V?)PMINUWrm",
1172 "(V?)PSIGNBrm",
1173 "(V?)PSIGNDrm",
1174 "(V?)PSIGNWrm",
1175 "(V?)PSUBBrm",
1176 "(V?)PSUBDrm",
1177 "(V?)PSUBQrm",
1178 "(V?)PSUBSBrm",
1179 "(V?)PSUBSWrm",
1180 "(V?)PSUBUSBrm",
1181 "(V?)PSUBUSWrm",
1182 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001183
1184def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1185 let Latency = 6;
1186 let NumMicroOps = 2;
1187 let ResourceCycles = [1,1];
1188}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001189def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001190 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001191 "VINSERTF128rm",
1192 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001193 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001194
1195def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1196 let Latency = 6;
1197 let NumMicroOps = 2;
1198 let ResourceCycles = [1,1];
1199}
Craig Topper2d451e72018-03-18 08:38:06 +00001200def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001201def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001202
1203def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1204 let Latency = 6;
1205 let NumMicroOps = 4;
1206 let ResourceCycles = [1,1,2];
1207}
Craig Topper5a69a002018-03-21 06:28:42 +00001208def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1209 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001210
1211def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1212 let Latency = 6;
1213 let NumMicroOps = 4;
1214 let ResourceCycles = [1,1,1,1];
1215}
1216def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1217
1218def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1219 let Latency = 6;
1220 let NumMicroOps = 4;
1221 let ResourceCycles = [1,1,1,1];
1222}
Craig Topper5a69a002018-03-21 06:28:42 +00001223def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1224 "BTR(16|32|64)mi8",
1225 "BTS(16|32|64)mi8",
1226 "SAR(8|16|32|64)m1",
1227 "SAR(8|16|32|64)mi",
1228 "SHL(8|16|32|64)m1",
1229 "SHL(8|16|32|64)mi",
1230 "SHR(8|16|32|64)m1",
1231 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001232
1233def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1234 let Latency = 6;
1235 let NumMicroOps = 4;
1236 let ResourceCycles = [1,1,1,1];
1237}
Craig Topperf0d04262018-04-06 16:16:48 +00001238def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1239 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001240
1241def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1242 let Latency = 6;
1243 let NumMicroOps = 6;
1244 let ResourceCycles = [1,5];
1245}
1246def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1247
Gadi Haber323f2e12017-10-24 20:19:47 +00001248def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1249 let Latency = 7;
1250 let NumMicroOps = 2;
1251 let ResourceCycles = [1,1];
1252}
Craig Topper5a69a002018-03-21 06:28:42 +00001253def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1254 "VPSLLQYrm",
1255 "VPSLLVQYrm",
1256 "VPSLLWYrm",
1257 "VPSRADYrm",
1258 "VPSRAWYrm",
1259 "VPSRLDYrm",
1260 "VPSRLQYrm",
1261 "VPSRLVQYrm",
1262 "VPSRLWYrm",
1263 "VTESTPDYrm",
1264 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001265
1266def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1267 let Latency = 7;
1268 let NumMicroOps = 2;
1269 let ResourceCycles = [1,1];
1270}
Craig Topper5a69a002018-03-21 06:28:42 +00001271def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1272 "FCOM64m",
1273 "FCOMP32m",
1274 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001275
1276def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1277 let Latency = 7;
1278 let NumMicroOps = 2;
1279 let ResourceCycles = [1,1];
1280}
Craig Topper5a69a002018-03-21 06:28:42 +00001281def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1282 "VANDNPSYrm",
1283 "VANDPDYrm",
1284 "VANDPSYrm",
1285 "VORPDYrm",
1286 "VORPSYrm",
1287 "VPACKSSDWYrm",
1288 "VPACKSSWBYrm",
1289 "VPACKUSDWYrm",
1290 "VPACKUSWBYrm",
1291 "VPALIGNRYrmi",
1292 "VPBLENDWYrmi",
1293 "VPERMILPDYmi",
1294 "VPERMILPDYrm",
1295 "VPERMILPSYmi",
1296 "VPERMILPSYrm",
1297 "VPSHUFBYrm",
1298 "VPSHUFDYmi",
1299 "VPSHUFHWYmi",
1300 "VPSHUFLWYmi",
1301 "VPUNPCKHBWYrm",
1302 "VPUNPCKHDQYrm",
1303 "VPUNPCKHQDQYrm",
1304 "VPUNPCKHWDYrm",
1305 "VPUNPCKLBWYrm",
1306 "VPUNPCKLDQYrm",
1307 "VPUNPCKLQDQYrm",
1308 "VPUNPCKLWDYrm",
1309 "VSHUFPDYrmi",
1310 "VSHUFPSYrmi",
1311 "VUNPCKHPDYrm",
1312 "VUNPCKHPSYrm",
1313 "VUNPCKLPDYrm",
1314 "VUNPCKLPSYrm",
1315 "VXORPDYrm",
1316 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001317
1318def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1319 let Latency = 7;
1320 let NumMicroOps = 2;
1321 let ResourceCycles = [1,1];
1322}
Craig Topper5a69a002018-03-21 06:28:42 +00001323def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1324 "VPABSDYrm",
1325 "VPABSWYrm",
1326 "VPADDBYrm",
1327 "VPADDDYrm",
1328 "VPADDQYrm",
1329 "VPADDSBYrm",
1330 "VPADDSWYrm",
1331 "VPADDUSBYrm",
1332 "VPADDUSWYrm",
1333 "VPADDWYrm",
1334 "VPAVGBYrm",
1335 "VPAVGWYrm",
1336 "VPCMPEQBYrm",
1337 "VPCMPEQDYrm",
1338 "VPCMPEQQYrm",
1339 "VPCMPEQWYrm",
1340 "VPCMPGTBYrm",
1341 "VPCMPGTDYrm",
1342 "VPCMPGTWYrm",
1343 "VPMAXSBYrm",
1344 "VPMAXSDYrm",
1345 "VPMAXSWYrm",
1346 "VPMAXUBYrm",
1347 "VPMAXUDYrm",
1348 "VPMAXUWYrm",
1349 "VPMINSBYrm",
1350 "VPMINSDYrm",
1351 "VPMINSWYrm",
1352 "VPMINUBYrm",
1353 "VPMINUDYrm",
1354 "VPMINUWYrm",
1355 "VPSIGNBYrm",
1356 "VPSIGNDYrm",
1357 "VPSIGNWYrm",
1358 "VPSUBBYrm",
1359 "VPSUBDYrm",
1360 "VPSUBQYrm",
1361 "VPSUBSBYrm",
1362 "VPSUBSWYrm",
1363 "VPSUBUSBYrm",
1364 "VPSUBUSWYrm",
1365 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001366
1367def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1368 let Latency = 7;
1369 let NumMicroOps = 2;
1370 let ResourceCycles = [1,1];
1371}
Craig Topper5a69a002018-03-21 06:28:42 +00001372def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1373 "VBLENDPSYrmi",
1374 "VPANDNYrm",
1375 "VPANDYrm",
1376 "VPBLENDDYrmi",
1377 "VPORYrm",
1378 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001379
1380def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1381 let Latency = 7;
1382 let NumMicroOps = 3;
1383 let ResourceCycles = [1,2];
1384}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001385def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001386
1387def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1388 let Latency = 7;
1389 let NumMicroOps = 3;
1390 let ResourceCycles = [2,1];
1391}
Craig Topper5a69a002018-03-21 06:28:42 +00001392def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1393 "BLENDVPSrm0",
1394 "MMX_PACKSSDWirm",
1395 "MMX_PACKSSWBirm",
1396 "MMX_PACKUSWBirm",
1397 "PBLENDVBrm0",
1398 "VBLENDVPDrm",
1399 "VBLENDVPSrm",
1400 "VMASKMOVPDrm",
1401 "VMASKMOVPSrm",
1402 "VPBLENDVBrm",
1403 "VPMASKMOVDrm",
1404 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001405
1406def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1407 let Latency = 7;
1408 let NumMicroOps = 3;
1409 let ResourceCycles = [1,2];
1410}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001411def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1412 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001413
1414def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1415 let Latency = 7;
1416 let NumMicroOps = 3;
1417 let ResourceCycles = [1,1,1];
1418}
Craig Topper5a69a002018-03-21 06:28:42 +00001419def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1420 "PSLLQrm",
1421 "PSLLWrm",
1422 "PSRADrm",
1423 "PSRAWrm",
1424 "PSRLDrm",
1425 "PSRLQrm",
1426 "PSRLWrm",
1427 "PTESTrm",
1428 "VPSLLDrm",
1429 "VPSLLQrm",
1430 "VPSLLWrm",
1431 "VPSRADrm",
1432 "VPSRAWrm",
1433 "VPSRLDrm",
1434 "VPSRLQrm",
1435 "VPSRLWrm",
1436 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001437
1438def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1439 let Latency = 7;
1440 let NumMicroOps = 3;
1441 let ResourceCycles = [1,1,1];
1442}
1443def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1444
Gadi Haber323f2e12017-10-24 20:19:47 +00001445def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1446 let Latency = 7;
1447 let NumMicroOps = 3;
1448 let ResourceCycles = [1,1,1];
1449}
Craig Topper5a69a002018-03-21 06:28:42 +00001450def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1451 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001452
Gadi Haber323f2e12017-10-24 20:19:47 +00001453def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1454 let Latency = 7;
1455 let NumMicroOps = 3;
1456 let ResourceCycles = [1,1,1];
1457}
Craig Topperf4cd9082018-01-19 05:47:32 +00001458def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001459
1460def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1461 let Latency = 7;
1462 let NumMicroOps = 5;
1463 let ResourceCycles = [1,1,1,2];
1464}
Craig Topper5a69a002018-03-21 06:28:42 +00001465def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1466 "ROL(8|16|32|64)mi",
1467 "ROR(8|16|32|64)m1",
1468 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001469
1470def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1471 let Latency = 7;
1472 let NumMicroOps = 5;
1473 let ResourceCycles = [1,1,1,2];
1474}
Craig Topper5a69a002018-03-21 06:28:42 +00001475def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001476
1477def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1478 let Latency = 7;
1479 let NumMicroOps = 5;
1480 let ResourceCycles = [1,1,1,1,1];
1481}
Craig Topper5a69a002018-03-21 06:28:42 +00001482def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1483 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001484
1485def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1486 let Latency = 7;
1487 let NumMicroOps = 7;
1488 let ResourceCycles = [2,2,1,2];
1489}
Craig Topper2d451e72018-03-18 08:38:06 +00001490def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001491
1492def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1493 let Latency = 8;
1494 let NumMicroOps = 2;
1495 let ResourceCycles = [1,1];
1496}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001497def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001498 "PDEP(32|64)rm",
1499 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001500 "(V?)ADDPDrm",
1501 "(V?)ADDPSrm",
1502 "(V?)ADDSDrm",
1503 "(V?)ADDSSrm",
1504 "(V?)ADDSUBPDrm",
1505 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001506 "(V?)CVTDQ2PSrm",
1507 "(V?)CVTPS2DQrm",
1508 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001509 "(V?)SUBPDrm",
1510 "(V?)SUBPSrm",
1511 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001512 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001513
1514def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001515 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001516 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001517 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001518}
Craig Topperf846e2d2018-04-19 05:34:05 +00001519def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001520
Craig Topperf846e2d2018-04-19 05:34:05 +00001521def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1522 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001523 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001524 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001525}
Craig Topper5a69a002018-03-21 06:28:42 +00001526def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001527
Gadi Haber323f2e12017-10-24 20:19:47 +00001528def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1529 let Latency = 8;
1530 let NumMicroOps = 2;
1531 let ResourceCycles = [1,1];
1532}
Craig Topper5a69a002018-03-21 06:28:42 +00001533def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1534 "VPMOVSXBQYrm",
1535 "VPMOVSXBWYrm",
1536 "VPMOVSXDQYrm",
1537 "VPMOVSXWDYrm",
1538 "VPMOVSXWQYrm",
1539 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001540
1541def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1542 let Latency = 8;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001546def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1547 "(V?)MULPSrm",
1548 "(V?)MULSDrm",
1549 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001550
1551def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1552 let Latency = 8;
1553 let NumMicroOps = 3;
1554 let ResourceCycles = [2,1];
1555}
Craig Topper5a69a002018-03-21 06:28:42 +00001556def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1557 "VBLENDVPSYrm",
1558 "VMASKMOVPDYrm",
1559 "VMASKMOVPSYrm",
1560 "VPBLENDVBYrm",
1561 "VPMASKMOVDYrm",
1562 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001563
1564def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1565 let Latency = 8;
1566 let NumMicroOps = 4;
1567 let ResourceCycles = [2,1,1];
1568}
Craig Topper5a69a002018-03-21 06:28:42 +00001569def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1570 "VPSRAVDrm",
1571 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001572
1573def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1574 let Latency = 8;
1575 let NumMicroOps = 4;
1576 let ResourceCycles = [2,1,1];
1577}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001578def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001579 "(V?)PHADDDrm",
1580 "(V?)PHADDSWrm",
1581 "(V?)PHADDWrm",
1582 "(V?)PHSUBDrm",
1583 "(V?)PHSUBSWrm",
1584 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001585
1586def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1587 let Latency = 8;
1588 let NumMicroOps = 5;
1589 let ResourceCycles = [1,1,1,2];
1590}
Craig Topper5a69a002018-03-21 06:28:42 +00001591def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1592 "RCL(8|16|32|64)mi",
1593 "RCR(8|16|32|64)m1",
1594 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001595
1596def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1597 let Latency = 8;
1598 let NumMicroOps = 5;
1599 let ResourceCycles = [1,1,2,1];
1600}
Craig Topper13a16502018-03-19 00:56:09 +00001601def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001602
1603def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1604 let Latency = 8;
1605 let NumMicroOps = 6;
1606 let ResourceCycles = [1,1,1,3];
1607}
Craig Topper9f834812018-04-01 21:54:24 +00001608def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001609
1610def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1611 let Latency = 8;
1612 let NumMicroOps = 6;
1613 let ResourceCycles = [1,1,1,2,1];
1614}
Craig Topper9f834812018-04-01 21:54:24 +00001615def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001616 "CMPXCHG(8|16|32|64)rm",
1617 "ROL(8|16|32|64)mCL",
1618 "SAR(8|16|32|64)mCL",
1619 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001620 "SHL(8|16|32|64)mCL",
1621 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001622def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1623 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001624
1625def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1626 let Latency = 9;
1627 let NumMicroOps = 2;
1628 let ResourceCycles = [1,1];
1629}
Craig Topper5a69a002018-03-21 06:28:42 +00001630def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1631 "ADD_F64m",
1632 "ILD_F16m",
1633 "ILD_F32m",
1634 "ILD_F64m",
1635 "SUBR_F32m",
1636 "SUBR_F64m",
1637 "SUB_F32m",
1638 "SUB_F64m",
1639 "VADDPDYrm",
1640 "VADDPSYrm",
1641 "VADDSUBPDYrm",
1642 "VADDSUBPSYrm",
1643 "VCMPPDYrmi",
1644 "VCMPPSYrmi",
1645 "VCVTDQ2PSYrm",
1646 "VCVTPS2DQYrm",
1647 "VCVTTPS2DQYrm",
1648 "VMAX(C?)PDYrm",
1649 "VMAX(C?)PSYrm",
1650 "VMIN(C?)PDYrm",
1651 "VMIN(C?)PSYrm",
1652 "VSUBPDYrm",
1653 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001654
1655def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1656 let Latency = 9;
1657 let NumMicroOps = 2;
1658 let ResourceCycles = [1,1];
1659}
Craig Topper5a69a002018-03-21 06:28:42 +00001660def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1661 "VPERM2I128rm",
1662 "VPERMDYrm",
1663 "VPERMPDYmi",
1664 "VPERMPSYrm",
1665 "VPERMQYmi",
1666 "VPMOVZXBDYrm",
1667 "VPMOVZXBQYrm",
1668 "VPMOVZXBWYrm",
1669 "VPMOVZXDQYrm",
1670 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001671
1672def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1673 let Latency = 9;
1674 let NumMicroOps = 2;
1675 let ResourceCycles = [1,1];
1676}
Craig Topper5a69a002018-03-21 06:28:42 +00001677def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1678 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001679
1680def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1681 let Latency = 9;
1682 let NumMicroOps = 3;
1683 let ResourceCycles = [1,1,1];
1684}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001685def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001686
1687def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1688 let Latency = 9;
1689 let NumMicroOps = 3;
1690 let ResourceCycles = [1,1,1];
1691}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001692def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1693 "(V?)CVTSD2SIrm",
1694 "(V?)CVTSS2SI64rm",
1695 "(V?)CVTSS2SIrm",
1696 "(V?)CVTTSD2SI64rm",
1697 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001698 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001699 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001700
1701def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1702 let Latency = 9;
1703 let NumMicroOps = 3;
1704 let ResourceCycles = [1,1,1];
1705}
1706def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1707
1708def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1709 let Latency = 9;
1710 let NumMicroOps = 3;
1711 let ResourceCycles = [1,1,1];
1712}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001713def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001714def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001715 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001716 "CVTTPD2DQrm",
1717 "MMX_CVTPD2PIirm",
1718 "MMX_CVTPI2PDirm",
1719 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001720 "(V?)CVTDQ2PDrm",
1721 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001722
1723def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1724 let Latency = 9;
1725 let NumMicroOps = 3;
1726 let ResourceCycles = [1,1,1];
1727}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001728def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1729 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001730
1731def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1732 let Latency = 9;
1733 let NumMicroOps = 4;
1734 let ResourceCycles = [2,1,1];
1735}
Craig Topper5a69a002018-03-21 06:28:42 +00001736def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1737 "VPSRAVDYrm",
1738 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001739
1740def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1741 let Latency = 9;
1742 let NumMicroOps = 4;
1743 let ResourceCycles = [2,1,1];
1744}
Craig Topper5a69a002018-03-21 06:28:42 +00001745def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1746 "VPHADDSWYrm",
1747 "VPHADDWYrm",
1748 "VPHSUBDYrm",
1749 "VPHSUBSWYrm",
1750 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001751
1752def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1753 let Latency = 9;
1754 let NumMicroOps = 4;
1755 let ResourceCycles = [1,1,1,1];
1756}
Craig Topper5a69a002018-03-21 06:28:42 +00001757def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1758 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001759
1760def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1761 let Latency = 9;
1762 let NumMicroOps = 5;
1763 let ResourceCycles = [1,1,3];
1764}
1765def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1766
1767def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1768 let Latency = 9;
1769 let NumMicroOps = 5;
1770 let ResourceCycles = [1,2,1,1];
1771}
Craig Topper5a69a002018-03-21 06:28:42 +00001772def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1773 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001774
Gadi Haber323f2e12017-10-24 20:19:47 +00001775def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1776 let Latency = 10;
1777 let NumMicroOps = 2;
1778 let ResourceCycles = [1,1];
1779}
Craig Topper5a69a002018-03-21 06:28:42 +00001780def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1781 "MMX_PMADDWDirm",
1782 "MMX_PMULHRSWrm",
1783 "MMX_PMULHUWirm",
1784 "MMX_PMULHWirm",
1785 "MMX_PMULLWirm",
1786 "MMX_PMULUDQirm",
1787 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001788 "(V?)PCMPGTQrm",
1789 "(V?)PHMINPOSUWrm",
1790 "(V?)PMADDUBSWrm",
1791 "(V?)PMADDWDrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001792 "(V?)PSADBWrm",
1793 "(V?)RCPPSm",
1794 "(V?)RCPSSm",
1795 "(V?)RSQRTPSm",
1796 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001797
1798def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1799 let Latency = 10;
1800 let NumMicroOps = 2;
1801 let ResourceCycles = [1,1];
1802}
Craig Topperf82867c2017-12-13 23:11:30 +00001803def: InstRW<[BWWriteResGroup116],
1804 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1805 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001806
1807def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1808 let Latency = 10;
1809 let NumMicroOps = 3;
1810 let ResourceCycles = [2,1];
1811}
Craig Topper5a69a002018-03-21 06:28:42 +00001812def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1813 "FICOM32m",
1814 "FICOMP16m",
1815 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001816
1817def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1818 let Latency = 10;
1819 let NumMicroOps = 3;
1820 let ResourceCycles = [1,1,1];
1821}
1822def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1823
1824def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1825 let Latency = 10;
1826 let NumMicroOps = 4;
1827 let ResourceCycles = [1,2,1];
1828}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001829def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
1830 "(V?)HADDPSrm",
1831 "(V?)HSUBPDrm",
1832 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001833
1834def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1835 let Latency = 10;
1836 let NumMicroOps = 4;
1837 let ResourceCycles = [1,1,1,1];
1838}
1839def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1840
1841def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001842 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001843 let NumMicroOps = 4;
1844 let ResourceCycles = [1,1,1,1];
1845}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001846def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001847
Craig Topper8104f262018-04-02 05:33:28 +00001848def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001849 let Latency = 11;
1850 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001851 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001852}
Craig Topper8104f262018-04-02 05:33:28 +00001853def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1854
1855def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1856 let Latency = 11;
1857 let NumMicroOps = 1;
1858 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1859}
1860def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001861
1862def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1863 let Latency = 11;
1864 let NumMicroOps = 2;
1865 let ResourceCycles = [1,1];
1866}
Craig Topper5a69a002018-03-21 06:28:42 +00001867def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1868 "MUL_F64m",
1869 "VPCMPGTQYrm",
1870 "VPMADDUBSWYrm",
1871 "VPMADDWDYrm",
1872 "VPMULDQYrm",
1873 "VPMULHRSWYrm",
1874 "VPMULHUWYrm",
1875 "VPMULHWYrm",
1876 "VPMULLWYrm",
1877 "VPMULUDQYrm",
1878 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001879
1880def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1881 let Latency = 11;
1882 let NumMicroOps = 2;
1883 let ResourceCycles = [1,1];
1884}
Craig Topperf82867c2017-12-13 23:11:30 +00001885def: InstRW<[BWWriteResGroup124],
1886 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001887
Gadi Haber323f2e12017-10-24 20:19:47 +00001888def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1889 let Latency = 11;
1890 let NumMicroOps = 3;
1891 let ResourceCycles = [2,1];
1892}
Craig Topper5a69a002018-03-21 06:28:42 +00001893def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1894 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001895
1896def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1897 let Latency = 11;
1898 let NumMicroOps = 3;
1899 let ResourceCycles = [2,1];
1900}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001901def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1902 "(V?)ROUNDPSm",
1903 "(V?)ROUNDSDm",
1904 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001905
1906def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1907 let Latency = 11;
1908 let NumMicroOps = 3;
1909 let ResourceCycles = [1,1,1];
1910}
1911def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1912
1913def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1914 let Latency = 11;
1915 let NumMicroOps = 4;
1916 let ResourceCycles = [1,2,1];
1917}
Craig Topper5a69a002018-03-21 06:28:42 +00001918def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1919 "VHADDPSYrm",
1920 "VHSUBPDYrm",
1921 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001922
1923def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1924 let Latency = 11;
1925 let NumMicroOps = 6;
1926 let ResourceCycles = [1,1,1,1,2];
1927}
Craig Topper5a69a002018-03-21 06:28:42 +00001928def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1929 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001930
1931def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1932 let Latency = 11;
1933 let NumMicroOps = 7;
1934 let ResourceCycles = [2,2,3];
1935}
Craig Topper5a69a002018-03-21 06:28:42 +00001936def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1937 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001938
1939def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1940 let Latency = 11;
1941 let NumMicroOps = 9;
1942 let ResourceCycles = [1,4,1,3];
1943}
1944def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1945
1946def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1947 let Latency = 11;
1948 let NumMicroOps = 11;
1949 let ResourceCycles = [2,9];
1950}
Craig Topper2d451e72018-03-18 08:38:06 +00001951def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1952def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001953
Gadi Haber323f2e12017-10-24 20:19:47 +00001954def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1955 let Latency = 12;
1956 let NumMicroOps = 3;
1957 let ResourceCycles = [2,1];
1958}
Craig Topper5a69a002018-03-21 06:28:42 +00001959def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1960 "ADD_FI32m",
1961 "SUBR_FI16m",
1962 "SUBR_FI32m",
1963 "SUB_FI16m",
1964 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001965 "VROUNDPDYm",
1966 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001967
1968def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1969 let Latency = 12;
1970 let NumMicroOps = 4;
1971 let ResourceCycles = [1,2,1];
1972}
Craig Topper5a69a002018-03-21 06:28:42 +00001973def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001974
Craig Topper8104f262018-04-02 05:33:28 +00001975def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001976 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001977 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001978 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001979}
Craig Topper8104f262018-04-02 05:33:28 +00001980def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1981
1982def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1983 let Latency = 11;
1984 let NumMicroOps = 1;
1985 let ResourceCycles = [1,4];
1986}
1987def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001988
1989def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1990 let Latency = 13;
1991 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001992 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001993}
1994def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1995
Craig Topper8104f262018-04-02 05:33:28 +00001996def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001997 let Latency = 14;
1998 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001999 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002000}
Craig Topper8104f262018-04-02 05:33:28 +00002001def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
2002
2003def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2004 let Latency = 14;
2005 let NumMicroOps = 1;
2006 let ResourceCycles = [1,4];
2007}
2008def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
Gadi Haber323f2e12017-10-24 20:19:47 +00002010def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2011 let Latency = 14;
2012 let NumMicroOps = 3;
2013 let ResourceCycles = [1,1,1];
2014}
Craig Topper5a69a002018-03-21 06:28:42 +00002015def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
2016 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002017
2018def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2019 let Latency = 14;
2020 let NumMicroOps = 4;
2021 let ResourceCycles = [2,1,1];
2022}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002023def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002024
2025def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2026 let Latency = 14;
2027 let NumMicroOps = 4;
2028 let ResourceCycles = [1,1,1,1];
2029}
Craig Topper5a69a002018-03-21 06:28:42 +00002030def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002031
2032def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2033 let Latency = 14;
2034 let NumMicroOps = 8;
2035 let ResourceCycles = [2,2,1,3];
2036}
2037def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2038
2039def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2040 let Latency = 14;
2041 let NumMicroOps = 10;
2042 let ResourceCycles = [2,3,1,4];
2043}
2044def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2045
2046def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2047 let Latency = 14;
2048 let NumMicroOps = 12;
2049 let ResourceCycles = [2,1,4,5];
2050}
2051def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2052
2053def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2054 let Latency = 15;
2055 let NumMicroOps = 1;
2056 let ResourceCycles = [1];
2057}
Craig Topper5a69a002018-03-21 06:28:42 +00002058def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2059 "DIVR_FST0r",
2060 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002061
Gadi Haber323f2e12017-10-24 20:19:47 +00002062def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2063 let Latency = 15;
2064 let NumMicroOps = 10;
2065 let ResourceCycles = [1,1,1,4,1,2];
2066}
Craig Topper13a16502018-03-19 00:56:09 +00002067def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002068
Craig Topper8104f262018-04-02 05:33:28 +00002069def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002070 let Latency = 16;
2071 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002072 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002073}
Craig Topper5a69a002018-03-21 06:28:42 +00002074def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2075 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002076
2077def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2078 let Latency = 16;
2079 let NumMicroOps = 3;
2080 let ResourceCycles = [2,1];
2081}
2082def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2083
Gadi Haber323f2e12017-10-24 20:19:47 +00002084def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2085 let Latency = 16;
2086 let NumMicroOps = 14;
2087 let ResourceCycles = [1,1,1,4,2,5];
2088}
2089def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2090
2091def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2092 let Latency = 16;
2093 let NumMicroOps = 16;
2094 let ResourceCycles = [16];
2095}
Craig Topper5a69a002018-03-21 06:28:42 +00002096def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002097
Craig Topper8104f262018-04-02 05:33:28 +00002098def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002099 let Latency = 17;
2100 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002101 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002102}
2103def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2104
2105def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2106 let Latency = 17;
2107 let NumMicroOps = 4;
2108 let ResourceCycles = [2,1,1];
2109}
Craig Topper5a69a002018-03-21 06:28:42 +00002110def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2111 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002112
Craig Topper8104f262018-04-02 05:33:28 +00002113def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002114 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002115 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002116 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002117}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002118def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2119 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002120
Gadi Haber323f2e12017-10-24 20:19:47 +00002121def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2122 let Latency = 18;
2123 let NumMicroOps = 8;
2124 let ResourceCycles = [1,1,1,5];
2125}
Craig Topper5a69a002018-03-21 06:28:42 +00002126def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002127def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128
2129def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2130 let Latency = 18;
2131 let NumMicroOps = 11;
2132 let ResourceCycles = [2,1,1,3,1,3];
2133}
Craig Topper13a16502018-03-19 00:56:09 +00002134def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002135
Craig Topper8104f262018-04-02 05:33:28 +00002136def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002137 let Latency = 19;
2138 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002139 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002140}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002141def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002142 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002143
Gadi Haber323f2e12017-10-24 20:19:47 +00002144def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2145 let Latency = 19;
2146 let NumMicroOps = 5;
2147 let ResourceCycles = [2,1,1,1];
2148}
Craig Topper5a69a002018-03-21 06:28:42 +00002149def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002150
Gadi Haber323f2e12017-10-24 20:19:47 +00002151def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2152 let Latency = 20;
2153 let NumMicroOps = 1;
2154 let ResourceCycles = [1];
2155}
Craig Topper5a69a002018-03-21 06:28:42 +00002156def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2157 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002158 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002159
2160def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2161 let Latency = 20;
2162 let NumMicroOps = 5;
2163 let ResourceCycles = [2,1,1,1];
2164}
2165def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2166
2167def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2168 let Latency = 20;
2169 let NumMicroOps = 8;
2170 let ResourceCycles = [1,1,1,1,1,1,2];
2171}
Craig Topper5a69a002018-03-21 06:28:42 +00002172def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2173 "INSL",
2174 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002175
Craig Topper8104f262018-04-02 05:33:28 +00002176def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002177 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002178 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002179 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002180}
Craig Topper8104f262018-04-02 05:33:28 +00002181def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2182
2183def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2184 let Latency = 16;
2185 let NumMicroOps = 1;
2186 let ResourceCycles = [1,8];
2187}
2188def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002189
2190def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2191 let Latency = 21;
2192 let NumMicroOps = 2;
2193 let ResourceCycles = [1,1];
2194}
Craig Topper5a69a002018-03-21 06:28:42 +00002195def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2196 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002197
Craig Topper8104f262018-04-02 05:33:28 +00002198def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002199 let Latency = 21;
2200 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002201 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002202}
2203def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2204
2205def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2206 let Latency = 21;
2207 let NumMicroOps = 19;
2208 let ResourceCycles = [2,1,4,1,1,4,6];
2209}
2210def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2211
2212def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2213 let Latency = 22;
2214 let NumMicroOps = 18;
2215 let ResourceCycles = [1,1,16];
2216}
2217def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2218
Craig Topper8104f262018-04-02 05:33:28 +00002219def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002220 let Latency = 23;
2221 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002222 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002223}
2224def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2225
Craig Topper8104f262018-04-02 05:33:28 +00002226def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002227 let Latency = 23;
2228 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002229 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002230}
2231def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2232
Gadi Haber323f2e12017-10-24 20:19:47 +00002233def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2234 let Latency = 23;
2235 let NumMicroOps = 19;
2236 let ResourceCycles = [3,1,15];
2237}
Craig Topper391c6f92017-12-10 01:24:08 +00002238def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002239
2240def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2241 let Latency = 24;
2242 let NumMicroOps = 3;
2243 let ResourceCycles = [1,1,1];
2244}
Craig Topper5a69a002018-03-21 06:28:42 +00002245def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2246 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002247
Craig Topper8104f262018-04-02 05:33:28 +00002248def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002249 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002250 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002251 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002252}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002253def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2254 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002255
2256def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2257 let Latency = 26;
2258 let NumMicroOps = 2;
2259 let ResourceCycles = [1,1];
2260}
Craig Topper5a69a002018-03-21 06:28:42 +00002261def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002262 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002263
Craig Topper8104f262018-04-02 05:33:28 +00002264def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002265 let Latency = 27;
2266 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002267 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002268}
2269def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2270
2271def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2272 let Latency = 29;
2273 let NumMicroOps = 3;
2274 let ResourceCycles = [1,1,1];
2275}
Craig Topper5a69a002018-03-21 06:28:42 +00002276def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2277 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002278
Craig Topper8104f262018-04-02 05:33:28 +00002279def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002280 let Latency = 29;
2281 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002282 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002283}
2284def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2285
2286def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2287 let Latency = 22;
2288 let NumMicroOps = 7;
2289 let ResourceCycles = [1,3,2,1];
2290}
Craig Topper17a31182017-12-16 18:35:29 +00002291def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002292
2293def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2294 let Latency = 23;
2295 let NumMicroOps = 9;
2296 let ResourceCycles = [1,3,4,1];
2297}
Craig Topper17a31182017-12-16 18:35:29 +00002298def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002299
2300def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2301 let Latency = 24;
2302 let NumMicroOps = 9;
2303 let ResourceCycles = [1,5,2,1];
2304}
Craig Topper17a31182017-12-16 18:35:29 +00002305def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002306
2307def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2308 let Latency = 25;
2309 let NumMicroOps = 7;
2310 let ResourceCycles = [1,3,2,1];
2311}
Craig Topper17a31182017-12-16 18:35:29 +00002312def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2313 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002314
2315def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2316 let Latency = 26;
2317 let NumMicroOps = 9;
2318 let ResourceCycles = [1,5,2,1];
2319}
Craig Topper17a31182017-12-16 18:35:29 +00002320def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002321
2322def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2323 let Latency = 26;
2324 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002325 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002326}
Craig Topper17a31182017-12-16 18:35:29 +00002327def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002328
2329def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2330 let Latency = 27;
2331 let NumMicroOps = 9;
2332 let ResourceCycles = [1,5,2,1];
2333}
Craig Topper17a31182017-12-16 18:35:29 +00002334def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002335
Gadi Haber323f2e12017-10-24 20:19:47 +00002336def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2337 let Latency = 29;
2338 let NumMicroOps = 27;
2339 let ResourceCycles = [1,5,1,1,19];
2340}
2341def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2342
2343def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2344 let Latency = 30;
2345 let NumMicroOps = 28;
2346 let ResourceCycles = [1,6,1,1,19];
2347}
Craig Topper2d451e72018-03-18 08:38:06 +00002348def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002349
2350def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2351 let Latency = 31;
2352 let NumMicroOps = 31;
2353 let ResourceCycles = [8,1,21,1];
2354}
2355def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2356
Craig Topper8104f262018-04-02 05:33:28 +00002357def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2358 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002359 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002360 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002361}
2362def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2363
2364def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2365 let Latency = 34;
2366 let NumMicroOps = 8;
2367 let ResourceCycles = [2,2,2,1,1];
2368}
Craig Topper13a16502018-03-19 00:56:09 +00002369def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002370
2371def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2372 let Latency = 34;
2373 let NumMicroOps = 23;
2374 let ResourceCycles = [1,5,3,4,10];
2375}
Craig Topper5a69a002018-03-21 06:28:42 +00002376def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2377 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002378
2379def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2380 let Latency = 35;
2381 let NumMicroOps = 8;
2382 let ResourceCycles = [2,2,2,1,1];
2383}
Craig Topper13a16502018-03-19 00:56:09 +00002384def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002385
2386def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2387 let Latency = 35;
2388 let NumMicroOps = 23;
2389 let ResourceCycles = [1,5,2,1,4,10];
2390}
Craig Topper5a69a002018-03-21 06:28:42 +00002391def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2392 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002393
Craig Topper8104f262018-04-02 05:33:28 +00002394def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2395 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002396 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002397 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002398}
2399def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2400
2401def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2402 let Latency = 42;
2403 let NumMicroOps = 22;
2404 let ResourceCycles = [2,20];
2405}
Craig Topper2d451e72018-03-18 08:38:06 +00002406def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002407
2408def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2409 let Latency = 60;
2410 let NumMicroOps = 64;
2411 let ResourceCycles = [2,2,8,1,10,2,39];
2412}
2413def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002414
2415def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2416 let Latency = 63;
2417 let NumMicroOps = 88;
2418 let ResourceCycles = [4,4,31,1,2,1,45];
2419}
Craig Topper2d451e72018-03-18 08:38:06 +00002420def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002421
2422def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2423 let Latency = 63;
2424 let NumMicroOps = 90;
2425 let ResourceCycles = [4,2,33,1,2,1,47];
2426}
Craig Topper2d451e72018-03-18 08:38:06 +00002427def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002428
2429def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2430 let Latency = 75;
2431 let NumMicroOps = 15;
2432 let ResourceCycles = [6,3,6];
2433}
2434def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2435
2436def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2437 let Latency = 80;
2438 let NumMicroOps = 32;
2439 let ResourceCycles = [7,7,3,3,1,11];
2440}
2441def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2442
2443def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2444 let Latency = 115;
2445 let NumMicroOps = 100;
2446 let ResourceCycles = [9,9,11,8,1,11,21,30];
2447}
2448def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002449
2450} // SchedModel
2451