blob: bc20bd8606f1eec9bb8dd00466c320aab11ea2f0 [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 {
Simon Pilgrimf7d2a932018-04-24 13:21:41 +000015 // All x86 instructions are modeled as a single micro-op, and BW can decode 4
Gadi Haber323f2e12017-10-24 20:19:47 +000016 // 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.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000165defm : BWWriteResPair<WriteFMA, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFMAS, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add (Scalar).
167defm : BWWriteResPair<WriteFMAY, [BWPort01], 5, [1], 1, 6>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000168defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
169defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000171defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000172defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000173defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000174
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000175def : WriteRes<WriteCvtF2FSt, [BWPort1,BWPort4,BWPort237]> {
176 let Latency = 4;
177 let NumMicroOps = 3;
178 let ResourceCycles = [1,1,1];
179}
180
Gadi Haber323f2e12017-10-24 20:19:47 +0000181// FMA Scheduling helper class.
182// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
183
184// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000185def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
186def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
187def : WriteRes<WriteVecMove, [BWPort015]>;
188
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000190defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
192defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000193defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000195defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000196defm : BWWriteResPair<WriteBlend, [BWPort5], 1>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000197defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000198defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // Vector MPSAD.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000199defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
200defm : BWWriteResPair<WritePHMINPOS, [BWPort0], 5>; // Vector PHMINPOS.
Gadi Haber323f2e12017-10-24 20:19:47 +0000201
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000202// Vector insert/extract operations.
203def : WriteRes<WriteVecInsert, [BWPort5]> {
204 let Latency = 2;
205 let NumMicroOps = 2;
206 let ResourceCycles = [2];
207}
208def : WriteRes<WriteVecInsertLd, [BWPort5,BWPort23]> {
209 let Latency = 6;
210 let NumMicroOps = 2;
211}
212
213def : WriteRes<WriteVecExtract, [BWPort0,BWPort5]> {
214 let Latency = 2;
215 let NumMicroOps = 2;
216}
217def : WriteRes<WriteVecExtractSt, [BWPort4,BWPort5,BWPort237]> {
218 let Latency = 2;
219 let NumMicroOps = 3;
220}
221
Gadi Haber323f2e12017-10-24 20:19:47 +0000222// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000223defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
224defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
225defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000226
227// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228
Gadi Haber323f2e12017-10-24 20:19:47 +0000229// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000230def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 11;
232 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000233 let ResourceCycles = [3];
234}
235def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236 let Latency = 16;
237 let NumMicroOps = 4;
238 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000239}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000240
241// Packed Compare Explicit Length Strings, Return Mask
242def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
243 let Latency = 19;
244 let NumMicroOps = 9;
245 let ResourceCycles = [4,3,1,1];
246}
247def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
248 let Latency = 24;
249 let NumMicroOps = 10;
250 let ResourceCycles = [4,3,1,1,1];
251}
252
253// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000254def : WriteRes<WritePCmpIStrI, [BWPort0]> {
255 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000256 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [3];
258}
259def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000260 let Latency = 16;
261 let NumMicroOps = 4;
262 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000264
265// Packed Compare Explicit Length Strings, Return Index
266def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
267 let Latency = 18;
268 let NumMicroOps = 8;
269 let ResourceCycles = [4,3,1];
270}
271def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
272 let Latency = 23;
273 let NumMicroOps = 9;
274 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000275}
276
Simon Pilgrima2f26782018-03-27 20:38:54 +0000277// MOVMSK Instructions.
278def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
279def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
280def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
281
Gadi Haber323f2e12017-10-24 20:19:47 +0000282// AES instructions.
283def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
284 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000285 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000286 let ResourceCycles = [1];
287}
288def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000289 let Latency = 12;
290 let NumMicroOps = 2;
291 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000292}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000293
Gadi Haber323f2e12017-10-24 20:19:47 +0000294def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
295 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000296 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000297 let ResourceCycles = [2];
298}
299def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000300 let Latency = 19;
301 let NumMicroOps = 3;
302 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000303}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000304
305def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
306 let Latency = 29;
307 let NumMicroOps = 11;
308 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000309}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000310def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
311 let Latency = 33;
312 let NumMicroOps = 11;
313 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000314}
315
316// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000317defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000318
319// Catch-all for expensive system instructions.
320def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
321
322// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000323defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000324defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000325defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000326defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000327defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000328
329// Old microcoded instructions that nobody use.
330def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
331
332// Fence instructions.
333def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
334
Craig Topper05242bf2018-04-21 18:07:36 +0000335// Load/store MXCSR.
336def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
337def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
338
Gadi Haber323f2e12017-10-24 20:19:47 +0000339// Nop, not very useful expect it provides a model for nops!
340def : WriteRes<WriteNop, []>;
341
342////////////////////////////////////////////////////////////////////////////////
343// Horizontal add/sub instructions.
344////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000345
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000346defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
347defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000348
349// Remaining instrs.
350
351def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
352 let Latency = 1;
353 let NumMicroOps = 1;
354 let ResourceCycles = [1];
355}
Craig Topper5a69a002018-03-21 06:28:42 +0000356def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
357 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358 "(V?)MOVPDI2DIrr",
359 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000360 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000361 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000362 "VTESTPD(Y?)rr",
363 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000364
365def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
366 let Latency = 1;
367 let NumMicroOps = 1;
368 let ResourceCycles = [1];
369}
Craig Topper5a69a002018-03-21 06:28:42 +0000370def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
371 "COM_FST0r",
372 "UCOM_FPr",
373 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000374
375def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
376 let Latency = 1;
377 let NumMicroOps = 1;
378 let ResourceCycles = [1];
379}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000380def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000381 "MMX_MOVD64to64rr",
382 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000383 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000384 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000385 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000386 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000387
388def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
389 let Latency = 1;
390 let NumMicroOps = 1;
391 let ResourceCycles = [1];
392}
393def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
394
395def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
396 let Latency = 1;
397 let NumMicroOps = 1;
398 let ResourceCycles = [1];
399}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000400def: InstRW<[BWWriteResGroup5], (instrs FINCSTP, FNOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000401
402def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Craig Topperfbe31322018-04-05 21:56:19 +0000407def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000408def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
409 "ADC(16|32|64)i",
410 "ADC(8|16|32|64)rr",
411 "ADCX(32|64)rr",
412 "ADOX(32|64)rr",
413 "BT(16|32|64)ri8",
414 "BT(16|32|64)rr",
415 "BTC(16|32|64)ri8",
416 "BTC(16|32|64)rr",
417 "BTR(16|32|64)ri8",
418 "BTR(16|32|64)rr",
419 "BTS(16|32|64)ri8",
420 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000421 "SBB(16|32|64)ri",
422 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000423 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000424
425def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
426 let Latency = 1;
427 let NumMicroOps = 1;
428 let ResourceCycles = [1];
429}
Craig Topper5a69a002018-03-21 06:28:42 +0000430def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
431 "BLSI(32|64)rr",
432 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000433 "BLSR(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000434
435def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
436 let Latency = 1;
437 let NumMicroOps = 1;
438 let ResourceCycles = [1];
439}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000440def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000441 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000442
443def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
444 let Latency = 1;
445 let NumMicroOps = 1;
446 let ResourceCycles = [1];
447}
Craig Topperdfccafe2018-04-18 06:41:25 +0000448def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000449 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000450 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000451 "SGDT64m",
452 "SIDT64m",
453 "SLDT64m",
454 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000455 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000456 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000457
458def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
459 let Latency = 1;
460 let NumMicroOps = 2;
461 let ResourceCycles = [1,1];
462}
Craig Topper5a69a002018-03-21 06:28:42 +0000463def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
464 "MMX_MOVD64from64rm",
465 "MMX_MOVD64mr",
466 "MMX_MOVNTQmr",
467 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000468 "MOVNTI_64mr",
469 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000470 "ST_FP32m",
471 "ST_FP64m",
472 "ST_FP80m",
473 "VEXTRACTF128mr",
474 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000475 "(V?)MOVAPD(Y?)mr",
476 "(V?)MOVAPS(Y?)mr",
477 "(V?)MOVDQA(Y?)mr",
478 "(V?)MOVDQU(Y?)mr",
479 "(V?)MOVHPDmr",
480 "(V?)MOVHPSmr",
481 "(V?)MOVLPDmr",
482 "(V?)MOVLPSmr",
483 "(V?)MOVNTDQ(V?)mr",
484 "(V?)MOVNTPD(V?)mr",
485 "(V?)MOVNTPS(V?)mr",
486 "(V?)MOVPDI2DImr",
487 "(V?)MOVPQI2QImr",
488 "(V?)MOVPQIto64mr",
489 "(V?)MOVSDmr",
490 "(V?)MOVSSmr",
491 "(V?)MOVUPD(Y?)mr",
492 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000493
Gadi Haber323f2e12017-10-24 20:19:47 +0000494def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
495 let Latency = 2;
496 let NumMicroOps = 2;
497 let ResourceCycles = [2];
498}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000499def: InstRW<[BWWriteResGroup12], (instrs FDECSTP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000500
501def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
502 let Latency = 2;
503 let NumMicroOps = 2;
504 let ResourceCycles = [2];
505}
Craig Topper5a69a002018-03-21 06:28:42 +0000506def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
507 "ROL(8|16|32|64)ri",
508 "ROR(8|16|32|64)r1",
509 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000510
511def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
512 let Latency = 2;
513 let NumMicroOps = 2;
514 let ResourceCycles = [2];
515}
Craig Topper5a69a002018-03-21 06:28:42 +0000516def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
517 "MFENCE",
518 "WAIT",
519 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000520
521def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
522 let Latency = 2;
523 let NumMicroOps = 2;
524 let ResourceCycles = [1,1];
525}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000526def: InstRW<[BWWriteResGroup15], (instregex "VCVTPH2PS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000527 "(V?)CVTPS2PDrr",
528 "(V?)CVTSS2SDrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000529 "(V?)PSLLDrr",
530 "(V?)PSLLQrr",
531 "(V?)PSLLWrr",
532 "(V?)PSRADrr",
533 "(V?)PSRAWrr",
534 "(V?)PSRLDrr",
535 "(V?)PSRLQrr",
536 "(V?)PSRLWrr",
537 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000538
539def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
540 let Latency = 2;
541 let NumMicroOps = 2;
542 let ResourceCycles = [1,1];
543}
544def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
545
546def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
547 let Latency = 2;
548 let NumMicroOps = 2;
549 let ResourceCycles = [1,1];
550}
551def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
552
553def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
554 let Latency = 2;
555 let NumMicroOps = 2;
556 let ResourceCycles = [1,1];
557}
558def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
559
560def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
561 let Latency = 2;
562 let NumMicroOps = 2;
563 let ResourceCycles = [1,1];
564}
Craig Topper498875f2018-04-04 17:54:19 +0000565def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
566
567def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
568 let Latency = 1;
569 let NumMicroOps = 1;
570 let ResourceCycles = [1];
571}
572def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000573
574def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
575 let Latency = 2;
576 let NumMicroOps = 2;
577 let ResourceCycles = [1,1];
578}
Craig Topper2d451e72018-03-18 08:38:06 +0000579def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000580def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000581def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
582 "ADC8ri",
583 "CMOV(A|BE)(16|32|64)rr",
584 "SBB8i8",
585 "SBB8ri",
586 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000587
Gadi Haber323f2e12017-10-24 20:19:47 +0000588def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
589 let Latency = 2;
590 let NumMicroOps = 3;
591 let ResourceCycles = [1,1,1];
592}
593def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
594
Gadi Haber323f2e12017-10-24 20:19:47 +0000595def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
596 let Latency = 2;
597 let NumMicroOps = 3;
598 let ResourceCycles = [1,1,1];
599}
600def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
601
602def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
603 let Latency = 2;
604 let NumMicroOps = 3;
605 let ResourceCycles = [1,1,1];
606}
Craig Topper2d451e72018-03-18 08:38:06 +0000607def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000608def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
609 "PUSH64i8",
610 "STOSB",
611 "STOSL",
612 "STOSQ",
613 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000614
Gadi Haber323f2e12017-10-24 20:19:47 +0000615def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
616 let Latency = 3;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000620def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000621 "PDEP(32|64)rr",
622 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000623 "SHLD(16|32|64)rri8",
624 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000625 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000626
627def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000628 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000629 let NumMicroOps = 2;
630 let ResourceCycles = [1,1];
631}
Clement Courbet327fac42018-03-07 08:14:02 +0000632def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000633
634def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
635 let Latency = 3;
636 let NumMicroOps = 1;
637 let ResourceCycles = [1];
638}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000639def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
640 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000641 "VPMOVSXBDYrr",
642 "VPMOVSXBQYrr",
643 "VPMOVSXBWYrr",
644 "VPMOVSXDQYrr",
645 "VPMOVSXWDYrr",
646 "VPMOVSXWQYrr",
647 "VPMOVZXBDYrr",
648 "VPMOVZXBQYrr",
649 "VPMOVZXBWYrr",
650 "VPMOVZXDQYrr",
651 "VPMOVZXWDYrr",
652 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000653
654def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
655 let Latency = 3;
656 let NumMicroOps = 1;
657 let ResourceCycles = [1];
658}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000659def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
660 "(V?)MULPS(Y?)rr",
661 "(V?)MULSDrr",
662 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000663
664def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000665 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000666 let NumMicroOps = 3;
667 let ResourceCycles = [3];
668}
Craig Topperb5f26592018-04-19 18:00:17 +0000669def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
670 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
671 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000672
673def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
674 let Latency = 3;
675 let NumMicroOps = 3;
676 let ResourceCycles = [2,1];
677}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000678def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
679 "VPSRAVD(Y?)rr",
680 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000681
Gadi Haber323f2e12017-10-24 20:19:47 +0000682def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
683 let Latency = 3;
684 let NumMicroOps = 3;
685 let ResourceCycles = [2,1];
686}
Craig Topper5a69a002018-03-21 06:28:42 +0000687def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
688 "MMX_PACKSSWBirr",
689 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000690
691def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
692 let Latency = 3;
693 let NumMicroOps = 3;
694 let ResourceCycles = [1,2];
695}
696def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
697
698def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
699 let Latency = 3;
700 let NumMicroOps = 3;
701 let ResourceCycles = [1,2];
702}
Craig Topper5a69a002018-03-21 06:28:42 +0000703def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
704 "RCL(8|16|32|64)ri",
705 "RCR(8|16|32|64)r1",
706 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000707
708def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
709 let Latency = 3;
710 let NumMicroOps = 3;
711 let ResourceCycles = [2,1];
712}
Craig Topper5a69a002018-03-21 06:28:42 +0000713def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
714 "ROR(8|16|32|64)rCL",
715 "SAR(8|16|32|64)rCL",
716 "SHL(8|16|32|64)rCL",
717 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000718
719def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
720 let Latency = 3;
721 let NumMicroOps = 4;
722 let ResourceCycles = [1,1,1,1];
723}
724def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
725
726def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
727 let Latency = 3;
728 let NumMicroOps = 4;
729 let ResourceCycles = [1,1,1,1];
730}
Craig Topper5a69a002018-03-21 06:28:42 +0000731def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
732 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000733
734def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
735 let Latency = 4;
736 let NumMicroOps = 2;
737 let ResourceCycles = [1,1];
738}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000739def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
740 "(V?)CVTSD2SIrr",
741 "(V?)CVTSS2SI64rr",
742 "(V?)CVTSS2SIrr",
743 "(V?)CVTTSD2SI64rr",
744 "(V?)CVTTSD2SIrr",
745 "(V?)CVTTSS2SI64rr",
746 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000747
748def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
749 let Latency = 4;
750 let NumMicroOps = 2;
751 let ResourceCycles = [1,1];
752}
Craig Topper5a69a002018-03-21 06:28:42 +0000753def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
754 "VPSLLDYrr",
755 "VPSLLQYrr",
756 "VPSLLWYrr",
757 "VPSRADYrr",
758 "VPSRAWYrr",
759 "VPSRLDYrr",
760 "VPSRLQYrr",
761 "VPSRLWYrr",
762 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000763
764def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
765 let Latency = 4;
766 let NumMicroOps = 2;
767 let ResourceCycles = [1,1];
768}
769def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
770
771def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
772 let Latency = 4;
773 let NumMicroOps = 2;
774 let ResourceCycles = [1,1];
775}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000776def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000777def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000778 "MMX_CVTPI2PDirr",
779 "MMX_CVTPS2PIirr",
780 "MMX_CVTTPD2PIirr",
781 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000782 "(V?)CVTDQ2PDrr",
783 "(V?)CVTPD2DQrr",
784 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000785 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000786 "(V?)CVTSD2SSrr",
787 "(V?)CVTSI642SDrr",
788 "(V?)CVTSI2SDrr",
789 "(V?)CVTSI2SSrr",
790 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000791
792def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
793 let Latency = 4;
794 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000795 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000796}
Craig Topper5a69a002018-03-21 06:28:42 +0000797def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000798
799def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
800 let Latency = 4;
801 let NumMicroOps = 3;
802 let ResourceCycles = [1,1,1];
803}
804def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
805
806def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
807 let Latency = 4;
808 let NumMicroOps = 3;
809 let ResourceCycles = [1,1,1];
810}
Craig Topper5a69a002018-03-21 06:28:42 +0000811def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
812 "ISTT_FP32m",
813 "ISTT_FP64m",
814 "IST_F16m",
815 "IST_F32m",
816 "IST_FP16m",
817 "IST_FP32m",
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000818 "IST_FP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000819
820def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
821 let Latency = 4;
822 let NumMicroOps = 4;
823 let ResourceCycles = [4];
824}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000825def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000826
827def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
828 let Latency = 4;
829 let NumMicroOps = 4;
830 let ResourceCycles = [1,3];
831}
832def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
833
834def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
835 let Latency = 5;
836 let NumMicroOps = 1;
837 let ResourceCycles = [1];
838}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000839def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000840
Gadi Haber323f2e12017-10-24 20:19:47 +0000841def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
842 let Latency = 5;
843 let NumMicroOps = 1;
844 let ResourceCycles = [1];
845}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000846def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000847 "MOVSX(16|32|64)rm32",
848 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000849 "MOVZX(16|32|64)rm16",
850 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000851 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000852 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000853 "(V?)MOVSHDUPrm",
854 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000855 "VPBROADCASTDrm",
856 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000857
858def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
859 let Latency = 5;
860 let NumMicroOps = 3;
861 let ResourceCycles = [1,2];
862}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000863def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000864
865def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
866 let Latency = 5;
867 let NumMicroOps = 3;
868 let ResourceCycles = [1,1,1];
869}
870def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
871
872def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000873 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000874 let NumMicroOps = 3;
875 let ResourceCycles = [1,1,1];
876}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000877def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000878
879def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
880 let Latency = 5;
881 let NumMicroOps = 4;
882 let ResourceCycles = [1,1,1,1];
883}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000884def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
885 "VMASKMOVPS(Y?)mr",
886 "VPMASKMOVD(Y?)mr",
887 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000888
889def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
890 let Latency = 5;
891 let NumMicroOps = 5;
892 let ResourceCycles = [1,4];
893}
894def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
895
896def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
897 let Latency = 5;
898 let NumMicroOps = 5;
899 let ResourceCycles = [1,4];
900}
901def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
902
903def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
904 let Latency = 5;
905 let NumMicroOps = 5;
906 let ResourceCycles = [2,3];
907}
Craig Topper5a69a002018-03-21 06:28:42 +0000908def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000909
910def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
911 let Latency = 5;
912 let NumMicroOps = 6;
913 let ResourceCycles = [1,1,4];
914}
Craig Topper5a69a002018-03-21 06:28:42 +0000915def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000916
917def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
918 let Latency = 6;
919 let NumMicroOps = 1;
920 let ResourceCycles = [1];
921}
Craig Topper5a69a002018-03-21 06:28:42 +0000922def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
923 "LD_F64m",
924 "LD_F80m",
925 "VBROADCASTF128",
926 "VBROADCASTI128",
927 "VBROADCASTSDYrm",
928 "VBROADCASTSSYrm",
929 "VLDDQUYrm",
930 "VMOVAPDYrm",
931 "VMOVAPSYrm",
932 "VMOVDDUPYrm",
933 "VMOVDQAYrm",
934 "VMOVDQUYrm",
935 "VMOVNTDQAYrm",
936 "VMOVSHDUPYrm",
937 "VMOVSLDUPYrm",
938 "VMOVUPDYrm",
939 "VMOVUPSYrm",
940 "VPBROADCASTDYrm",
941 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000942 "(V?)ROUNDPD(Y?)r",
943 "(V?)ROUNDPS(Y?)r",
944 "(V?)ROUNDSDr",
945 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000946
947def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
948 let Latency = 6;
949 let NumMicroOps = 2;
950 let ResourceCycles = [1,1];
951}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000952def: InstRW<[BWWriteResGroup59], (instregex "VCVTPH2PS(Y?)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000953 "(V?)CVTPS2PDrm",
954 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000955 "VPSLLVQrm",
956 "VPSRLVQrm",
957 "VTESTPDrm",
958 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000959
960def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
961 let Latency = 6;
962 let NumMicroOps = 2;
963 let ResourceCycles = [1,1];
964}
Craig Topper5a69a002018-03-21 06:28:42 +0000965def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
966 "VCVTPD2DQYrr",
967 "VCVTPD2PSYrr",
968 "VCVTPS2PHYrr",
969 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000970
Gadi Haber323f2e12017-10-24 20:19:47 +0000971def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
972 let Latency = 6;
973 let NumMicroOps = 2;
974 let ResourceCycles = [1,1];
975}
Craig Topper5a69a002018-03-21 06:28:42 +0000976def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
977 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000978
979def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
980 let Latency = 6;
981 let NumMicroOps = 2;
982 let ResourceCycles = [1,1];
983}
Craig Topperdfccafe2018-04-18 06:41:25 +0000984def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +0000985def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
986 ADCX32rm, ADCX64rm,
987 ADOX32rm, ADOX64rm,
988 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000989
990def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
991 let Latency = 6;
992 let NumMicroOps = 2;
993 let ResourceCycles = [1,1];
994}
Craig Topper5a69a002018-03-21 06:28:42 +0000995def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
996 "BLSI(32|64)rm",
997 "BLSMSK(32|64)rm",
998 "BLSR(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000999 "MOVBE(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001000
1001def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1002 let Latency = 6;
1003 let NumMicroOps = 2;
1004 let ResourceCycles = [1,1];
1005}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001006def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001007 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001008 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001009
1010def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1011 let Latency = 6;
1012 let NumMicroOps = 2;
1013 let ResourceCycles = [1,1];
1014}
Craig Topper2d451e72018-03-18 08:38:06 +00001015def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001016def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001017
1018def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1019 let Latency = 6;
1020 let NumMicroOps = 4;
1021 let ResourceCycles = [1,1,2];
1022}
Craig Topper5a69a002018-03-21 06:28:42 +00001023def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1024 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001025
1026def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1027 let Latency = 6;
1028 let NumMicroOps = 4;
1029 let ResourceCycles = [1,1,1,1];
1030}
1031def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1032
1033def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1034 let Latency = 6;
1035 let NumMicroOps = 4;
1036 let ResourceCycles = [1,1,1,1];
1037}
Craig Topper5a69a002018-03-21 06:28:42 +00001038def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1039 "BTR(16|32|64)mi8",
1040 "BTS(16|32|64)mi8",
1041 "SAR(8|16|32|64)m1",
1042 "SAR(8|16|32|64)mi",
1043 "SHL(8|16|32|64)m1",
1044 "SHL(8|16|32|64)mi",
1045 "SHR(8|16|32|64)m1",
1046 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001047
1048def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1049 let Latency = 6;
1050 let NumMicroOps = 4;
1051 let ResourceCycles = [1,1,1,1];
1052}
Craig Topperf0d04262018-04-06 16:16:48 +00001053def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1054 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001055
1056def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1057 let Latency = 6;
1058 let NumMicroOps = 6;
1059 let ResourceCycles = [1,5];
1060}
1061def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1062
Gadi Haber323f2e12017-10-24 20:19:47 +00001063def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1064 let Latency = 7;
1065 let NumMicroOps = 2;
1066 let ResourceCycles = [1,1];
1067}
Craig Topper5a69a002018-03-21 06:28:42 +00001068def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1069 "VPSLLQYrm",
1070 "VPSLLVQYrm",
1071 "VPSLLWYrm",
1072 "VPSRADYrm",
1073 "VPSRAWYrm",
1074 "VPSRLDYrm",
1075 "VPSRLQYrm",
1076 "VPSRLVQYrm",
1077 "VPSRLWYrm",
1078 "VTESTPDYrm",
1079 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001080
1081def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1082 let Latency = 7;
1083 let NumMicroOps = 2;
1084 let ResourceCycles = [1,1];
1085}
Craig Topper5a69a002018-03-21 06:28:42 +00001086def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1087 "FCOM64m",
1088 "FCOMP32m",
1089 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001090
1091def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1092 let Latency = 7;
1093 let NumMicroOps = 2;
1094 let ResourceCycles = [1,1];
1095}
Craig Topper5a69a002018-03-21 06:28:42 +00001096def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1097 "VANDNPSYrm",
1098 "VANDPDYrm",
1099 "VANDPSYrm",
1100 "VORPDYrm",
1101 "VORPSYrm",
1102 "VPACKSSDWYrm",
1103 "VPACKSSWBYrm",
1104 "VPACKUSDWYrm",
1105 "VPACKUSWBYrm",
1106 "VPALIGNRYrmi",
1107 "VPBLENDWYrmi",
1108 "VPERMILPDYmi",
1109 "VPERMILPDYrm",
1110 "VPERMILPSYmi",
1111 "VPERMILPSYrm",
1112 "VPSHUFBYrm",
1113 "VPSHUFDYmi",
1114 "VPSHUFHWYmi",
1115 "VPSHUFLWYmi",
1116 "VPUNPCKHBWYrm",
1117 "VPUNPCKHDQYrm",
1118 "VPUNPCKHQDQYrm",
1119 "VPUNPCKHWDYrm",
1120 "VPUNPCKLBWYrm",
1121 "VPUNPCKLDQYrm",
1122 "VPUNPCKLQDQYrm",
1123 "VPUNPCKLWDYrm",
1124 "VSHUFPDYrmi",
1125 "VSHUFPSYrmi",
1126 "VUNPCKHPDYrm",
1127 "VUNPCKHPSYrm",
1128 "VUNPCKLPDYrm",
1129 "VUNPCKLPSYrm",
1130 "VXORPDYrm",
1131 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001132
1133def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1134 let Latency = 7;
1135 let NumMicroOps = 2;
1136 let ResourceCycles = [1,1];
1137}
Craig Topper5a69a002018-03-21 06:28:42 +00001138def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1139 "VPABSDYrm",
1140 "VPABSWYrm",
1141 "VPADDBYrm",
1142 "VPADDDYrm",
1143 "VPADDQYrm",
1144 "VPADDSBYrm",
1145 "VPADDSWYrm",
1146 "VPADDUSBYrm",
1147 "VPADDUSWYrm",
1148 "VPADDWYrm",
1149 "VPAVGBYrm",
1150 "VPAVGWYrm",
1151 "VPCMPEQBYrm",
1152 "VPCMPEQDYrm",
1153 "VPCMPEQQYrm",
1154 "VPCMPEQWYrm",
1155 "VPCMPGTBYrm",
1156 "VPCMPGTDYrm",
1157 "VPCMPGTWYrm",
1158 "VPMAXSBYrm",
1159 "VPMAXSDYrm",
1160 "VPMAXSWYrm",
1161 "VPMAXUBYrm",
1162 "VPMAXUDYrm",
1163 "VPMAXUWYrm",
1164 "VPMINSBYrm",
1165 "VPMINSDYrm",
1166 "VPMINSWYrm",
1167 "VPMINUBYrm",
1168 "VPMINUDYrm",
1169 "VPMINUWYrm",
1170 "VPSIGNBYrm",
1171 "VPSIGNDYrm",
1172 "VPSIGNWYrm",
1173 "VPSUBBYrm",
1174 "VPSUBDYrm",
1175 "VPSUBQYrm",
1176 "VPSUBSBYrm",
1177 "VPSUBSWYrm",
1178 "VPSUBUSBYrm",
1179 "VPSUBUSWYrm",
1180 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001181
1182def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1183 let Latency = 7;
1184 let NumMicroOps = 2;
1185 let ResourceCycles = [1,1];
1186}
Craig Topper5a69a002018-03-21 06:28:42 +00001187def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1188 "VBLENDPSYrmi",
1189 "VPANDNYrm",
1190 "VPANDYrm",
1191 "VPBLENDDYrmi",
1192 "VPORYrm",
1193 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001194
Gadi Haber323f2e12017-10-24 20:19:47 +00001195def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1196 let Latency = 7;
1197 let NumMicroOps = 3;
1198 let ResourceCycles = [2,1];
1199}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001200def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001201 "MMX_PACKSSWBirm",
1202 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001203 "VMASKMOVPDrm",
1204 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001205 "VPMASKMOVDrm",
1206 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001207
1208def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1209 let Latency = 7;
1210 let NumMicroOps = 3;
1211 let ResourceCycles = [1,2];
1212}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001213def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1214 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001215
1216def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1217 let Latency = 7;
1218 let NumMicroOps = 3;
1219 let ResourceCycles = [1,1,1];
1220}
Craig Topper5a69a002018-03-21 06:28:42 +00001221def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1222 "PSLLQrm",
1223 "PSLLWrm",
1224 "PSRADrm",
1225 "PSRAWrm",
1226 "PSRLDrm",
1227 "PSRLQrm",
1228 "PSRLWrm",
1229 "PTESTrm",
1230 "VPSLLDrm",
1231 "VPSLLQrm",
1232 "VPSLLWrm",
1233 "VPSRADrm",
1234 "VPSRAWrm",
1235 "VPSRLDrm",
1236 "VPSRLQrm",
1237 "VPSRLWrm",
1238 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001239
1240def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1241 let Latency = 7;
1242 let NumMicroOps = 3;
1243 let ResourceCycles = [1,1,1];
1244}
1245def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1246
Gadi Haber323f2e12017-10-24 20:19:47 +00001247def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1248 let Latency = 7;
1249 let NumMicroOps = 3;
1250 let ResourceCycles = [1,1,1];
1251}
Craig Topper5a69a002018-03-21 06:28:42 +00001252def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1253 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001254
Gadi Haber323f2e12017-10-24 20:19:47 +00001255def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1256 let Latency = 7;
1257 let NumMicroOps = 3;
1258 let ResourceCycles = [1,1,1];
1259}
Craig Topperf4cd9082018-01-19 05:47:32 +00001260def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001261
1262def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1263 let Latency = 7;
1264 let NumMicroOps = 5;
1265 let ResourceCycles = [1,1,1,2];
1266}
Craig Topper5a69a002018-03-21 06:28:42 +00001267def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1268 "ROL(8|16|32|64)mi",
1269 "ROR(8|16|32|64)m1",
1270 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001271
1272def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1273 let Latency = 7;
1274 let NumMicroOps = 5;
1275 let ResourceCycles = [1,1,1,2];
1276}
Craig Topper5a69a002018-03-21 06:28:42 +00001277def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001278
1279def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1280 let Latency = 7;
1281 let NumMicroOps = 5;
1282 let ResourceCycles = [1,1,1,1,1];
1283}
Craig Topper5a69a002018-03-21 06:28:42 +00001284def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1285 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001286
1287def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1288 let Latency = 7;
1289 let NumMicroOps = 7;
1290 let ResourceCycles = [2,2,1,2];
1291}
Craig Topper2d451e72018-03-18 08:38:06 +00001292def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001293
1294def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1295 let Latency = 8;
1296 let NumMicroOps = 2;
1297 let ResourceCycles = [1,1];
1298}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001299def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001300 "PDEP(32|64)rm",
1301 "PEXT(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001302 "(V?)CVTDQ2PSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001303
1304def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001305 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001306 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001307 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001308}
Craig Topperf846e2d2018-04-19 05:34:05 +00001309def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001310
Craig Topperf846e2d2018-04-19 05:34:05 +00001311def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1312 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001313 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001314 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001315}
Craig Topper5a69a002018-03-21 06:28:42 +00001316def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001317
Gadi Haber323f2e12017-10-24 20:19:47 +00001318def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1319 let Latency = 8;
1320 let NumMicroOps = 2;
1321 let ResourceCycles = [1,1];
1322}
Craig Topper5a69a002018-03-21 06:28:42 +00001323def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1324 "VPMOVSXBQYrm",
1325 "VPMOVSXBWYrm",
1326 "VPMOVSXDQYrm",
1327 "VPMOVSXWDYrm",
1328 "VPMOVSXWQYrm",
1329 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001330
1331def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1332 let Latency = 8;
1333 let NumMicroOps = 2;
1334 let ResourceCycles = [1,1];
1335}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001336def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1337 "(V?)MULPSrm",
1338 "(V?)MULSDrm",
1339 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001340
1341def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1342 let Latency = 8;
1343 let NumMicroOps = 3;
1344 let ResourceCycles = [2,1];
1345}
Craig Topper5a69a002018-03-21 06:28:42 +00001346def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1347 "VBLENDVPSYrm",
1348 "VMASKMOVPDYrm",
1349 "VMASKMOVPSYrm",
1350 "VPBLENDVBYrm",
1351 "VPMASKMOVDYrm",
1352 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001353
1354def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1355 let Latency = 8;
1356 let NumMicroOps = 4;
1357 let ResourceCycles = [2,1,1];
1358}
Craig Topper5a69a002018-03-21 06:28:42 +00001359def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1360 "VPSRAVDrm",
1361 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001362
Gadi Haber323f2e12017-10-24 20:19:47 +00001363def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1364 let Latency = 8;
1365 let NumMicroOps = 5;
1366 let ResourceCycles = [1,1,1,2];
1367}
Craig Topper5a69a002018-03-21 06:28:42 +00001368def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1369 "RCL(8|16|32|64)mi",
1370 "RCR(8|16|32|64)m1",
1371 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001372
1373def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1374 let Latency = 8;
1375 let NumMicroOps = 5;
1376 let ResourceCycles = [1,1,2,1];
1377}
Craig Topper13a16502018-03-19 00:56:09 +00001378def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001379
1380def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1381 let Latency = 8;
1382 let NumMicroOps = 6;
1383 let ResourceCycles = [1,1,1,3];
1384}
Craig Topper9f834812018-04-01 21:54:24 +00001385def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001386
1387def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1388 let Latency = 8;
1389 let NumMicroOps = 6;
1390 let ResourceCycles = [1,1,1,2,1];
1391}
Craig Topper9f834812018-04-01 21:54:24 +00001392def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001393 "CMPXCHG(8|16|32|64)rm",
1394 "ROL(8|16|32|64)mCL",
1395 "SAR(8|16|32|64)mCL",
1396 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001397 "SHL(8|16|32|64)mCL",
1398 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001399def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1400 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001401
1402def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1403 let Latency = 9;
1404 let NumMicroOps = 2;
1405 let ResourceCycles = [1,1];
1406}
Craig Topper5a69a002018-03-21 06:28:42 +00001407def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1408 "ADD_F64m",
1409 "ILD_F16m",
1410 "ILD_F32m",
1411 "ILD_F64m",
1412 "SUBR_F32m",
1413 "SUBR_F64m",
1414 "SUB_F32m",
1415 "SUB_F64m",
1416 "VADDPDYrm",
1417 "VADDPSYrm",
1418 "VADDSUBPDYrm",
1419 "VADDSUBPSYrm",
1420 "VCMPPDYrmi",
1421 "VCMPPSYrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001422 "VCVTPS2DQYrm",
1423 "VCVTTPS2DQYrm",
1424 "VMAX(C?)PDYrm",
1425 "VMAX(C?)PSYrm",
1426 "VMIN(C?)PDYrm",
1427 "VMIN(C?)PSYrm",
1428 "VSUBPDYrm",
1429 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001430
1431def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1432 let Latency = 9;
1433 let NumMicroOps = 2;
1434 let ResourceCycles = [1,1];
1435}
Craig Topper5a69a002018-03-21 06:28:42 +00001436def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1437 "VPERM2I128rm",
1438 "VPERMDYrm",
1439 "VPERMPDYmi",
1440 "VPERMPSYrm",
1441 "VPERMQYmi",
1442 "VPMOVZXBDYrm",
1443 "VPMOVZXBQYrm",
1444 "VPMOVZXBWYrm",
1445 "VPMOVZXDQYrm",
1446 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001447
1448def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1449 let Latency = 9;
1450 let NumMicroOps = 2;
1451 let ResourceCycles = [1,1];
1452}
Craig Topper5a69a002018-03-21 06:28:42 +00001453def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1454 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001455
1456def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1457 let Latency = 9;
1458 let NumMicroOps = 3;
1459 let ResourceCycles = [1,1,1];
1460}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001461def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001462
1463def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1464 let Latency = 9;
1465 let NumMicroOps = 3;
1466 let ResourceCycles = [1,1,1];
1467}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001468def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1469 "(V?)CVTSD2SIrm",
1470 "(V?)CVTSS2SI64rm",
1471 "(V?)CVTSS2SIrm",
1472 "(V?)CVTTSD2SI64rm",
1473 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001474 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001475 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001476
1477def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1478 let Latency = 9;
1479 let NumMicroOps = 3;
1480 let ResourceCycles = [1,1,1];
1481}
1482def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1483
1484def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1485 let Latency = 9;
1486 let NumMicroOps = 3;
1487 let ResourceCycles = [1,1,1];
1488}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001489def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001490def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001491 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001492 "CVTTPD2DQrm",
1493 "MMX_CVTPD2PIirm",
1494 "MMX_CVTPI2PDirm",
1495 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001496 "(V?)CVTDQ2PDrm",
1497 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001498
1499def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1500 let Latency = 9;
1501 let NumMicroOps = 3;
1502 let ResourceCycles = [1,1,1];
1503}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001504def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1505 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001506
1507def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1508 let Latency = 9;
1509 let NumMicroOps = 4;
1510 let ResourceCycles = [2,1,1];
1511}
Craig Topper5a69a002018-03-21 06:28:42 +00001512def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1513 "VPSRAVDYrm",
1514 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001515
1516def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1517 let Latency = 9;
1518 let NumMicroOps = 4;
1519 let ResourceCycles = [2,1,1];
1520}
Craig Topper5a69a002018-03-21 06:28:42 +00001521def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1522 "VPHADDSWYrm",
1523 "VPHADDWYrm",
1524 "VPHSUBDYrm",
1525 "VPHSUBSWYrm",
1526 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001527
1528def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1529 let Latency = 9;
1530 let NumMicroOps = 4;
1531 let ResourceCycles = [1,1,1,1];
1532}
Craig Topper5a69a002018-03-21 06:28:42 +00001533def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1534 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001535
1536def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1537 let Latency = 9;
1538 let NumMicroOps = 5;
1539 let ResourceCycles = [1,1,3];
1540}
1541def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1542
1543def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1544 let Latency = 9;
1545 let NumMicroOps = 5;
1546 let ResourceCycles = [1,2,1,1];
1547}
Craig Topper5a69a002018-03-21 06:28:42 +00001548def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1549 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001550
Gadi Haber323f2e12017-10-24 20:19:47 +00001551def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1552 let Latency = 10;
1553 let NumMicroOps = 2;
1554 let ResourceCycles = [1,1];
1555}
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001556def: InstRW<[BWWriteResGroup115], (instregex "(V?)PCMPGTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001557
Gadi Haber323f2e12017-10-24 20:19:47 +00001558def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1559 let Latency = 10;
1560 let NumMicroOps = 3;
1561 let ResourceCycles = [2,1];
1562}
Craig Topper5a69a002018-03-21 06:28:42 +00001563def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1564 "FICOM32m",
1565 "FICOMP16m",
1566 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001567
1568def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1569 let Latency = 10;
1570 let NumMicroOps = 3;
1571 let ResourceCycles = [1,1,1];
1572}
1573def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1574
Gadi Haber323f2e12017-10-24 20:19:47 +00001575def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1576 let Latency = 10;
1577 let NumMicroOps = 4;
1578 let ResourceCycles = [1,1,1,1];
1579}
1580def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1581
1582def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001583 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001584 let NumMicroOps = 4;
1585 let ResourceCycles = [1,1,1,1];
1586}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001587def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001588
Craig Topper8104f262018-04-02 05:33:28 +00001589def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001590 let Latency = 11;
1591 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001592 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001593}
Craig Topper8104f262018-04-02 05:33:28 +00001594def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1595
1596def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1597 let Latency = 11;
1598 let NumMicroOps = 1;
1599 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1600}
1601def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001602
1603def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1604 let Latency = 11;
1605 let NumMicroOps = 2;
1606 let ResourceCycles = [1,1];
1607}
Craig Topper5a69a002018-03-21 06:28:42 +00001608def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1609 "MUL_F64m",
1610 "VPCMPGTQYrm",
1611 "VPMADDUBSWYrm",
1612 "VPMADDWDYrm",
1613 "VPMULDQYrm",
1614 "VPMULHRSWYrm",
1615 "VPMULHUWYrm",
1616 "VPMULHWYrm",
1617 "VPMULLWYrm",
1618 "VPMULUDQYrm",
1619 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001620
Gadi Haber323f2e12017-10-24 20:19:47 +00001621def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1622 let Latency = 11;
1623 let NumMicroOps = 3;
1624 let ResourceCycles = [2,1];
1625}
Craig Topper5a69a002018-03-21 06:28:42 +00001626def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1627 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001628
1629def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1630 let Latency = 11;
1631 let NumMicroOps = 3;
1632 let ResourceCycles = [2,1];
1633}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001634def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1635 "(V?)ROUNDPSm",
1636 "(V?)ROUNDSDm",
1637 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001638
1639def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1640 let Latency = 11;
1641 let NumMicroOps = 3;
1642 let ResourceCycles = [1,1,1];
1643}
1644def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1645
1646def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1647 let Latency = 11;
1648 let NumMicroOps = 4;
1649 let ResourceCycles = [1,2,1];
1650}
Craig Topper5a69a002018-03-21 06:28:42 +00001651def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1652 "VHADDPSYrm",
1653 "VHSUBPDYrm",
1654 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001655
1656def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1657 let Latency = 11;
1658 let NumMicroOps = 6;
1659 let ResourceCycles = [1,1,1,1,2];
1660}
Craig Topper5a69a002018-03-21 06:28:42 +00001661def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1662 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001663
1664def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1665 let Latency = 11;
1666 let NumMicroOps = 7;
1667 let ResourceCycles = [2,2,3];
1668}
Craig Topper5a69a002018-03-21 06:28:42 +00001669def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1670 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001671
1672def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1673 let Latency = 11;
1674 let NumMicroOps = 9;
1675 let ResourceCycles = [1,4,1,3];
1676}
1677def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1678
1679def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1680 let Latency = 11;
1681 let NumMicroOps = 11;
1682 let ResourceCycles = [2,9];
1683}
Craig Topper2d451e72018-03-18 08:38:06 +00001684def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1685def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001686
Gadi Haber323f2e12017-10-24 20:19:47 +00001687def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1688 let Latency = 12;
1689 let NumMicroOps = 3;
1690 let ResourceCycles = [2,1];
1691}
Craig Topper5a69a002018-03-21 06:28:42 +00001692def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1693 "ADD_FI32m",
1694 "SUBR_FI16m",
1695 "SUBR_FI32m",
1696 "SUB_FI16m",
1697 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001698 "VROUNDPDYm",
1699 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001700
Craig Topper8104f262018-04-02 05:33:28 +00001701def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001702 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001703 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001704 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001705}
Craig Topper8104f262018-04-02 05:33:28 +00001706def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1707
1708def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1709 let Latency = 11;
1710 let NumMicroOps = 1;
1711 let ResourceCycles = [1,4];
1712}
1713def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001714
1715def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1716 let Latency = 13;
1717 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001718 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001719}
1720def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1721
Craig Topper8104f262018-04-02 05:33:28 +00001722def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001723 let Latency = 14;
1724 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001725 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001726}
Craig Topper8104f262018-04-02 05:33:28 +00001727def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1728
1729def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1730 let Latency = 14;
1731 let NumMicroOps = 1;
1732 let ResourceCycles = [1,4];
1733}
1734def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001735
Gadi Haber323f2e12017-10-24 20:19:47 +00001736def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1737 let Latency = 14;
1738 let NumMicroOps = 3;
1739 let ResourceCycles = [1,1,1];
1740}
Craig Topper5a69a002018-03-21 06:28:42 +00001741def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1742 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001743
1744def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1745 let Latency = 14;
1746 let NumMicroOps = 4;
1747 let ResourceCycles = [2,1,1];
1748}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001749def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001750
1751def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1752 let Latency = 14;
1753 let NumMicroOps = 4;
1754 let ResourceCycles = [1,1,1,1];
1755}
Craig Topper5a69a002018-03-21 06:28:42 +00001756def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001757
1758def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1759 let Latency = 14;
1760 let NumMicroOps = 8;
1761 let ResourceCycles = [2,2,1,3];
1762}
1763def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1764
1765def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1766 let Latency = 14;
1767 let NumMicroOps = 10;
1768 let ResourceCycles = [2,3,1,4];
1769}
1770def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1771
1772def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1773 let Latency = 14;
1774 let NumMicroOps = 12;
1775 let ResourceCycles = [2,1,4,5];
1776}
1777def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
1778
1779def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1780 let Latency = 15;
1781 let NumMicroOps = 1;
1782 let ResourceCycles = [1];
1783}
Craig Topper5a69a002018-03-21 06:28:42 +00001784def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1785 "DIVR_FST0r",
1786 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001787
Gadi Haber323f2e12017-10-24 20:19:47 +00001788def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1789 let Latency = 15;
1790 let NumMicroOps = 10;
1791 let ResourceCycles = [1,1,1,4,1,2];
1792}
Craig Topper13a16502018-03-19 00:56:09 +00001793def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001794
Craig Topper8104f262018-04-02 05:33:28 +00001795def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001796 let Latency = 16;
1797 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001798 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001799}
Craig Topper5a69a002018-03-21 06:28:42 +00001800def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1801 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001802
1803def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1804 let Latency = 16;
1805 let NumMicroOps = 3;
1806 let ResourceCycles = [2,1];
1807}
1808def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1809
Gadi Haber323f2e12017-10-24 20:19:47 +00001810def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1811 let Latency = 16;
1812 let NumMicroOps = 14;
1813 let ResourceCycles = [1,1,1,4,2,5];
1814}
1815def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1816
1817def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1818 let Latency = 16;
1819 let NumMicroOps = 16;
1820 let ResourceCycles = [16];
1821}
Craig Topper5a69a002018-03-21 06:28:42 +00001822def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001823
Craig Topper8104f262018-04-02 05:33:28 +00001824def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001825 let Latency = 17;
1826 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001827 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001828}
1829def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1830
1831def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1832 let Latency = 17;
1833 let NumMicroOps = 4;
1834 let ResourceCycles = [2,1,1];
1835}
Craig Topper5a69a002018-03-21 06:28:42 +00001836def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
1837 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001838
Craig Topper8104f262018-04-02 05:33:28 +00001839def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001840 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001841 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001842 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001843}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001844def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
1845 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001846
Gadi Haber323f2e12017-10-24 20:19:47 +00001847def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
1848 let Latency = 18;
1849 let NumMicroOps = 8;
1850 let ResourceCycles = [1,1,1,5];
1851}
Craig Topper5a69a002018-03-21 06:28:42 +00001852def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00001853def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001854
1855def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1856 let Latency = 18;
1857 let NumMicroOps = 11;
1858 let ResourceCycles = [2,1,1,3,1,3];
1859}
Craig Topper13a16502018-03-19 00:56:09 +00001860def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001861
Craig Topper8104f262018-04-02 05:33:28 +00001862def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001863 let Latency = 19;
1864 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001865 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001866}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001867def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001868 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001869
Gadi Haber323f2e12017-10-24 20:19:47 +00001870def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1871 let Latency = 19;
1872 let NumMicroOps = 5;
1873 let ResourceCycles = [2,1,1,1];
1874}
Craig Topper5a69a002018-03-21 06:28:42 +00001875def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001876
Gadi Haber323f2e12017-10-24 20:19:47 +00001877def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
1878 let Latency = 20;
1879 let NumMicroOps = 1;
1880 let ResourceCycles = [1];
1881}
Craig Topper5a69a002018-03-21 06:28:42 +00001882def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
1883 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001884 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001885
1886def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1887 let Latency = 20;
1888 let NumMicroOps = 5;
1889 let ResourceCycles = [2,1,1,1];
1890}
1891def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
1892
1893def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1894 let Latency = 20;
1895 let NumMicroOps = 8;
1896 let ResourceCycles = [1,1,1,1,1,1,2];
1897}
Craig Topper5a69a002018-03-21 06:28:42 +00001898def: InstRW<[BWWriteResGroup167], (instregex "INSB",
1899 "INSL",
1900 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001901
Craig Topper8104f262018-04-02 05:33:28 +00001902def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001903 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001904 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001905 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001906}
Craig Topper8104f262018-04-02 05:33:28 +00001907def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
1908
1909def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1910 let Latency = 16;
1911 let NumMicroOps = 1;
1912 let ResourceCycles = [1,8];
1913}
1914def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001915
1916def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
1917 let Latency = 21;
1918 let NumMicroOps = 2;
1919 let ResourceCycles = [1,1];
1920}
Craig Topper5a69a002018-03-21 06:28:42 +00001921def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
1922 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001923
Craig Topper8104f262018-04-02 05:33:28 +00001924def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001925 let Latency = 21;
1926 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001927 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001928}
1929def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
1930
1931def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1932 let Latency = 21;
1933 let NumMicroOps = 19;
1934 let ResourceCycles = [2,1,4,1,1,4,6];
1935}
1936def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
1937
1938def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1939 let Latency = 22;
1940 let NumMicroOps = 18;
1941 let ResourceCycles = [1,1,16];
1942}
1943def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
1944
Craig Topper8104f262018-04-02 05:33:28 +00001945def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001946 let Latency = 23;
1947 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001948 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001949}
1950def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
1951
Craig Topper8104f262018-04-02 05:33:28 +00001952def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001953 let Latency = 23;
1954 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001955 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001956}
1957def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
1958
Gadi Haber323f2e12017-10-24 20:19:47 +00001959def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1960 let Latency = 23;
1961 let NumMicroOps = 19;
1962 let ResourceCycles = [3,1,15];
1963}
Craig Topper391c6f92017-12-10 01:24:08 +00001964def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001965
1966def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1967 let Latency = 24;
1968 let NumMicroOps = 3;
1969 let ResourceCycles = [1,1,1];
1970}
Craig Topper5a69a002018-03-21 06:28:42 +00001971def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
1972 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001973
Craig Topper8104f262018-04-02 05:33:28 +00001974def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001975 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00001976 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001977 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001978}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001979def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
1980 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001981
1982def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
1983 let Latency = 26;
1984 let NumMicroOps = 2;
1985 let ResourceCycles = [1,1];
1986}
Craig Topper5a69a002018-03-21 06:28:42 +00001987def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001988 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001989
Craig Topper8104f262018-04-02 05:33:28 +00001990def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001991 let Latency = 27;
1992 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001993 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001994}
1995def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
1996
1997def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1998 let Latency = 29;
1999 let NumMicroOps = 3;
2000 let ResourceCycles = [1,1,1];
2001}
Craig Topper5a69a002018-03-21 06:28:42 +00002002def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2003 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002004
Craig Topper8104f262018-04-02 05:33:28 +00002005def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002006 let Latency = 29;
2007 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002008 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002009}
2010def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2011
2012def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2013 let Latency = 22;
2014 let NumMicroOps = 7;
2015 let ResourceCycles = [1,3,2,1];
2016}
Craig Topper17a31182017-12-16 18:35:29 +00002017def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002018
2019def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2020 let Latency = 23;
2021 let NumMicroOps = 9;
2022 let ResourceCycles = [1,3,4,1];
2023}
Craig Topper17a31182017-12-16 18:35:29 +00002024def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002025
2026def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2027 let Latency = 24;
2028 let NumMicroOps = 9;
2029 let ResourceCycles = [1,5,2,1];
2030}
Craig Topper17a31182017-12-16 18:35:29 +00002031def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002032
2033def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2034 let Latency = 25;
2035 let NumMicroOps = 7;
2036 let ResourceCycles = [1,3,2,1];
2037}
Craig Topper17a31182017-12-16 18:35:29 +00002038def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2039 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002040
2041def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2042 let Latency = 26;
2043 let NumMicroOps = 9;
2044 let ResourceCycles = [1,5,2,1];
2045}
Craig Topper17a31182017-12-16 18:35:29 +00002046def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002047
2048def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2049 let Latency = 26;
2050 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002051 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002052}
Craig Topper17a31182017-12-16 18:35:29 +00002053def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002054
2055def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2056 let Latency = 27;
2057 let NumMicroOps = 9;
2058 let ResourceCycles = [1,5,2,1];
2059}
Craig Topper17a31182017-12-16 18:35:29 +00002060def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002061
Gadi Haber323f2e12017-10-24 20:19:47 +00002062def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2063 let Latency = 29;
2064 let NumMicroOps = 27;
2065 let ResourceCycles = [1,5,1,1,19];
2066}
2067def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2068
2069def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2070 let Latency = 30;
2071 let NumMicroOps = 28;
2072 let ResourceCycles = [1,6,1,1,19];
2073}
Craig Topper2d451e72018-03-18 08:38:06 +00002074def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002075
2076def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2077 let Latency = 31;
2078 let NumMicroOps = 31;
2079 let ResourceCycles = [8,1,21,1];
2080}
2081def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2082
Craig Topper8104f262018-04-02 05:33:28 +00002083def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2084 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002085 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002086 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002087}
2088def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2089
2090def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2091 let Latency = 34;
2092 let NumMicroOps = 8;
2093 let ResourceCycles = [2,2,2,1,1];
2094}
Craig Topper13a16502018-03-19 00:56:09 +00002095def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002096
2097def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2098 let Latency = 34;
2099 let NumMicroOps = 23;
2100 let ResourceCycles = [1,5,3,4,10];
2101}
Craig Topper5a69a002018-03-21 06:28:42 +00002102def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2103 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002104
2105def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2106 let Latency = 35;
2107 let NumMicroOps = 8;
2108 let ResourceCycles = [2,2,2,1,1];
2109}
Craig Topper13a16502018-03-19 00:56:09 +00002110def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002111
2112def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2113 let Latency = 35;
2114 let NumMicroOps = 23;
2115 let ResourceCycles = [1,5,2,1,4,10];
2116}
Craig Topper5a69a002018-03-21 06:28:42 +00002117def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2118 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002119
Craig Topper8104f262018-04-02 05:33:28 +00002120def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2121 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002122 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002123 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002124}
2125def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2126
2127def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2128 let Latency = 42;
2129 let NumMicroOps = 22;
2130 let ResourceCycles = [2,20];
2131}
Craig Topper2d451e72018-03-18 08:38:06 +00002132def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002133
2134def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2135 let Latency = 60;
2136 let NumMicroOps = 64;
2137 let ResourceCycles = [2,2,8,1,10,2,39];
2138}
2139def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002140
2141def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2142 let Latency = 63;
2143 let NumMicroOps = 88;
2144 let ResourceCycles = [4,4,31,1,2,1,45];
2145}
Craig Topper2d451e72018-03-18 08:38:06 +00002146def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002147
2148def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2149 let Latency = 63;
2150 let NumMicroOps = 90;
2151 let ResourceCycles = [4,2,33,1,2,1,47];
2152}
Craig Topper2d451e72018-03-18 08:38:06 +00002153def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002154
2155def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2156 let Latency = 75;
2157 let NumMicroOps = 15;
2158 let ResourceCycles = [6,3,6];
2159}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002160def: InstRW<[BWWriteResGroup200], (instrs FNINIT)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002161
2162def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2163 let Latency = 80;
2164 let NumMicroOps = 32;
2165 let ResourceCycles = [7,7,3,3,1,11];
2166}
2167def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2168
2169def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2170 let Latency = 115;
2171 let NumMicroOps = 100;
2172 let ResourceCycles = [9,9,11,8,1,11,21,30];
2173}
2174def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002175
2176} // SchedModel
2177