blob: 15b07c3dd67b92687b1ecdf1f8a17d7a5928bbc9 [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.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000166defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
167defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000172
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000173def : WriteRes<WriteCvtF2FSt, [BWPort1,BWPort4,BWPort237]> {
174 let Latency = 4;
175 let NumMicroOps = 3;
176 let ResourceCycles = [1,1,1];
177}
178
Gadi Haber323f2e12017-10-24 20:19:47 +0000179// FMA Scheduling helper class.
180// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
181
182// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000183def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
184def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
185def : WriteRes<WriteVecMove, [BWPort015]>;
186
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000187defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000188defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
190defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000191defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000193defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000194defm : BWWriteResPair<WriteBlend, [BWPort5], 1>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000195defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000196defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // Vector MPSAD.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000197defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
198defm : BWWriteResPair<WritePHMINPOS, [BWPort0], 5>; // Vector PHMINPOS.
Gadi Haber323f2e12017-10-24 20:19:47 +0000199
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000200// Vector insert/extract operations.
201def : WriteRes<WriteVecInsert, [BWPort5]> {
202 let Latency = 2;
203 let NumMicroOps = 2;
204 let ResourceCycles = [2];
205}
206def : WriteRes<WriteVecInsertLd, [BWPort5,BWPort23]> {
207 let Latency = 6;
208 let NumMicroOps = 2;
209}
210
211def : WriteRes<WriteVecExtract, [BWPort0,BWPort5]> {
212 let Latency = 2;
213 let NumMicroOps = 2;
214}
215def : WriteRes<WriteVecExtractSt, [BWPort4,BWPort5,BWPort237]> {
216 let Latency = 2;
217 let NumMicroOps = 3;
218}
219
Gadi Haber323f2e12017-10-24 20:19:47 +0000220// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000221defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
222defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
223defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000224
225// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000226
Gadi Haber323f2e12017-10-24 20:19:47 +0000227// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000228def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229 let Latency = 11;
230 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000231 let ResourceCycles = [3];
232}
233def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234 let Latency = 16;
235 let NumMicroOps = 4;
236 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000237}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000238
239// Packed Compare Explicit Length Strings, Return Mask
240def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
241 let Latency = 19;
242 let NumMicroOps = 9;
243 let ResourceCycles = [4,3,1,1];
244}
245def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
246 let Latency = 24;
247 let NumMicroOps = 10;
248 let ResourceCycles = [4,3,1,1,1];
249}
250
251// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000252def : WriteRes<WritePCmpIStrI, [BWPort0]> {
253 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000254 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000255 let ResourceCycles = [3];
256}
257def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000258 let Latency = 16;
259 let NumMicroOps = 4;
260 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000261}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000262
263// Packed Compare Explicit Length Strings, Return Index
264def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
265 let Latency = 18;
266 let NumMicroOps = 8;
267 let ResourceCycles = [4,3,1];
268}
269def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
270 let Latency = 23;
271 let NumMicroOps = 9;
272 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000273}
274
Simon Pilgrima2f26782018-03-27 20:38:54 +0000275// MOVMSK Instructions.
276def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
277def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
278def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
279
Gadi Haber323f2e12017-10-24 20:19:47 +0000280// AES instructions.
281def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
282 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000283 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000284 let ResourceCycles = [1];
285}
286def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000287 let Latency = 12;
288 let NumMicroOps = 2;
289 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000290}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000291
Gadi Haber323f2e12017-10-24 20:19:47 +0000292def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
293 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000295 let ResourceCycles = [2];
296}
297def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000298 let Latency = 19;
299 let NumMicroOps = 3;
300 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000301}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302
303def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
304 let Latency = 29;
305 let NumMicroOps = 11;
306 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000307}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000308def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
309 let Latency = 33;
310 let NumMicroOps = 11;
311 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000312}
313
314// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000315defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
317// Catch-all for expensive system instructions.
318def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
319
320// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000321defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000322defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000323defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000324defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000325defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000326
327// Old microcoded instructions that nobody use.
328def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
329
330// Fence instructions.
331def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
332
Craig Topper05242bf2018-04-21 18:07:36 +0000333// Load/store MXCSR.
334def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
335def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
336
Gadi Haber323f2e12017-10-24 20:19:47 +0000337// Nop, not very useful expect it provides a model for nops!
338def : WriteRes<WriteNop, []>;
339
340////////////////////////////////////////////////////////////////////////////////
341// Horizontal add/sub instructions.
342////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000343
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000344defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
345defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000346
347// Remaining instrs.
348
349def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
350 let Latency = 1;
351 let NumMicroOps = 1;
352 let ResourceCycles = [1];
353}
Craig Topper5a69a002018-03-21 06:28:42 +0000354def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
355 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000356 "(V?)MOVPDI2DIrr",
357 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000359 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000360 "VTESTPD(Y?)rr",
361 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000362
363def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
364 let Latency = 1;
365 let NumMicroOps = 1;
366 let ResourceCycles = [1];
367}
Craig Topper5a69a002018-03-21 06:28:42 +0000368def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
369 "COM_FST0r",
370 "UCOM_FPr",
371 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000372
373def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
374 let Latency = 1;
375 let NumMicroOps = 1;
376 let ResourceCycles = [1];
377}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000378def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000379 "MMX_MOVD64to64rr",
380 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000381 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000382 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000383 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000384 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000385
386def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
387 let Latency = 1;
388 let NumMicroOps = 1;
389 let ResourceCycles = [1];
390}
391def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
392
393def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
394 let Latency = 1;
395 let NumMicroOps = 1;
396 let ResourceCycles = [1];
397}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000398def: InstRW<[BWWriteResGroup5], (instrs FINCSTP, FNOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000399
400def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
401 let Latency = 1;
402 let NumMicroOps = 1;
403 let ResourceCycles = [1];
404}
Craig Topperfbe31322018-04-05 21:56:19 +0000405def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000406def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
407 "ADC(16|32|64)i",
408 "ADC(8|16|32|64)rr",
409 "ADCX(32|64)rr",
410 "ADOX(32|64)rr",
411 "BT(16|32|64)ri8",
412 "BT(16|32|64)rr",
413 "BTC(16|32|64)ri8",
414 "BTC(16|32|64)rr",
415 "BTR(16|32|64)ri8",
416 "BTR(16|32|64)rr",
417 "BTS(16|32|64)ri8",
418 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000419 "SBB(16|32|64)ri",
420 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000421 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000422
423def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
424 let Latency = 1;
425 let NumMicroOps = 1;
426 let ResourceCycles = [1];
427}
Craig Topper5a69a002018-03-21 06:28:42 +0000428def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
429 "BLSI(32|64)rr",
430 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000431 "BLSR(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000432
433def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
434 let Latency = 1;
435 let NumMicroOps = 1;
436 let ResourceCycles = [1];
437}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000438def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000439 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000440
441def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
442 let Latency = 1;
443 let NumMicroOps = 1;
444 let ResourceCycles = [1];
445}
Craig Topperdfccafe2018-04-18 06:41:25 +0000446def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000447 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000448 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000449 "SGDT64m",
450 "SIDT64m",
451 "SLDT64m",
452 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000453 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000454 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000455
456def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
457 let Latency = 1;
458 let NumMicroOps = 2;
459 let ResourceCycles = [1,1];
460}
Craig Topper5a69a002018-03-21 06:28:42 +0000461def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
462 "MMX_MOVD64from64rm",
463 "MMX_MOVD64mr",
464 "MMX_MOVNTQmr",
465 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000466 "MOVNTI_64mr",
467 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000468 "ST_FP32m",
469 "ST_FP64m",
470 "ST_FP80m",
471 "VEXTRACTF128mr",
472 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000473 "(V?)MOVAPD(Y?)mr",
474 "(V?)MOVAPS(Y?)mr",
475 "(V?)MOVDQA(Y?)mr",
476 "(V?)MOVDQU(Y?)mr",
477 "(V?)MOVHPDmr",
478 "(V?)MOVHPSmr",
479 "(V?)MOVLPDmr",
480 "(V?)MOVLPSmr",
481 "(V?)MOVNTDQ(V?)mr",
482 "(V?)MOVNTPD(V?)mr",
483 "(V?)MOVNTPS(V?)mr",
484 "(V?)MOVPDI2DImr",
485 "(V?)MOVPQI2QImr",
486 "(V?)MOVPQIto64mr",
487 "(V?)MOVSDmr",
488 "(V?)MOVSSmr",
489 "(V?)MOVUPD(Y?)mr",
490 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000491
Gadi Haber323f2e12017-10-24 20:19:47 +0000492def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
493 let Latency = 2;
494 let NumMicroOps = 2;
495 let ResourceCycles = [2];
496}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000497def: InstRW<[BWWriteResGroup12], (instrs FDECSTP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000498
499def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
500 let Latency = 2;
501 let NumMicroOps = 2;
502 let ResourceCycles = [2];
503}
Craig Topper5a69a002018-03-21 06:28:42 +0000504def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
505 "ROL(8|16|32|64)ri",
506 "ROR(8|16|32|64)r1",
507 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000508
509def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
510 let Latency = 2;
511 let NumMicroOps = 2;
512 let ResourceCycles = [2];
513}
Craig Topper5a69a002018-03-21 06:28:42 +0000514def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
515 "MFENCE",
516 "WAIT",
517 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000518
519def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
520 let Latency = 2;
521 let NumMicroOps = 2;
522 let ResourceCycles = [1,1];
523}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000524def: InstRW<[BWWriteResGroup15], (instregex "VCVTPH2PS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000525 "(V?)CVTPS2PDrr",
526 "(V?)CVTSS2SDrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000527 "(V?)PSLLDrr",
528 "(V?)PSLLQrr",
529 "(V?)PSLLWrr",
530 "(V?)PSRADrr",
531 "(V?)PSRAWrr",
532 "(V?)PSRLDrr",
533 "(V?)PSRLQrr",
534 "(V?)PSRLWrr",
535 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000536
537def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
538 let Latency = 2;
539 let NumMicroOps = 2;
540 let ResourceCycles = [1,1];
541}
542def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
543
544def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
545 let Latency = 2;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
549def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
550
551def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
552 let Latency = 2;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
556def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
557
558def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
559 let Latency = 2;
560 let NumMicroOps = 2;
561 let ResourceCycles = [1,1];
562}
Craig Topper498875f2018-04-04 17:54:19 +0000563def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
564
565def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
566 let Latency = 1;
567 let NumMicroOps = 1;
568 let ResourceCycles = [1];
569}
570def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000571
572def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
573 let Latency = 2;
574 let NumMicroOps = 2;
575 let ResourceCycles = [1,1];
576}
Craig Topper2d451e72018-03-18 08:38:06 +0000577def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000578def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000579def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
580 "ADC8ri",
581 "CMOV(A|BE)(16|32|64)rr",
582 "SBB8i8",
583 "SBB8ri",
584 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000585
Gadi Haber323f2e12017-10-24 20:19:47 +0000586def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
587 let Latency = 2;
588 let NumMicroOps = 3;
589 let ResourceCycles = [1,1,1];
590}
591def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
592
Gadi Haber323f2e12017-10-24 20:19:47 +0000593def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
594 let Latency = 2;
595 let NumMicroOps = 3;
596 let ResourceCycles = [1,1,1];
597}
598def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
599
600def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
601 let Latency = 2;
602 let NumMicroOps = 3;
603 let ResourceCycles = [1,1,1];
604}
Craig Topper2d451e72018-03-18 08:38:06 +0000605def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000606def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
607 "PUSH64i8",
608 "STOSB",
609 "STOSL",
610 "STOSQ",
611 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000612
Gadi Haber323f2e12017-10-24 20:19:47 +0000613def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
614 let Latency = 3;
615 let NumMicroOps = 1;
616 let ResourceCycles = [1];
617}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000618def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000619 "PDEP(32|64)rr",
620 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000621 "SHLD(16|32|64)rri8",
622 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000623 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000624
625def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000626 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000627 let NumMicroOps = 2;
628 let ResourceCycles = [1,1];
629}
Clement Courbet327fac42018-03-07 08:14:02 +0000630def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000631
632def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
633 let Latency = 3;
634 let NumMicroOps = 1;
635 let ResourceCycles = [1];
636}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000637def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
638 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "VPMOVSXBDYrr",
640 "VPMOVSXBQYrr",
641 "VPMOVSXBWYrr",
642 "VPMOVSXDQYrr",
643 "VPMOVSXWDYrr",
644 "VPMOVSXWQYrr",
645 "VPMOVZXBDYrr",
646 "VPMOVZXBQYrr",
647 "VPMOVZXBWYrr",
648 "VPMOVZXDQYrr",
649 "VPMOVZXWDYrr",
650 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000651
652def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
653 let Latency = 3;
654 let NumMicroOps = 1;
655 let ResourceCycles = [1];
656}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000657def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
658 "(V?)MULPS(Y?)rr",
659 "(V?)MULSDrr",
660 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000661
662def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000663 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000664 let NumMicroOps = 3;
665 let ResourceCycles = [3];
666}
Craig Topperb5f26592018-04-19 18:00:17 +0000667def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
668 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
669 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000670
671def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
672 let Latency = 3;
673 let NumMicroOps = 3;
674 let ResourceCycles = [2,1];
675}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000676def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
677 "VPSRAVD(Y?)rr",
678 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000679
Gadi Haber323f2e12017-10-24 20:19:47 +0000680def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
681 let Latency = 3;
682 let NumMicroOps = 3;
683 let ResourceCycles = [2,1];
684}
Craig Topper5a69a002018-03-21 06:28:42 +0000685def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
686 "MMX_PACKSSWBirr",
687 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000688
689def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
690 let Latency = 3;
691 let NumMicroOps = 3;
692 let ResourceCycles = [1,2];
693}
694def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
695
696def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
697 let Latency = 3;
698 let NumMicroOps = 3;
699 let ResourceCycles = [1,2];
700}
Craig Topper5a69a002018-03-21 06:28:42 +0000701def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
702 "RCL(8|16|32|64)ri",
703 "RCR(8|16|32|64)r1",
704 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000705
706def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
707 let Latency = 3;
708 let NumMicroOps = 3;
709 let ResourceCycles = [2,1];
710}
Craig Topper5a69a002018-03-21 06:28:42 +0000711def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
712 "ROR(8|16|32|64)rCL",
713 "SAR(8|16|32|64)rCL",
714 "SHL(8|16|32|64)rCL",
715 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000716
717def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
718 let Latency = 3;
719 let NumMicroOps = 4;
720 let ResourceCycles = [1,1,1,1];
721}
722def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
723
724def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
725 let Latency = 3;
726 let NumMicroOps = 4;
727 let ResourceCycles = [1,1,1,1];
728}
Craig Topper5a69a002018-03-21 06:28:42 +0000729def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
730 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000731
732def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
733 let Latency = 4;
734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000737def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
738 "(V?)CVTSD2SIrr",
739 "(V?)CVTSS2SI64rr",
740 "(V?)CVTSS2SIrr",
741 "(V?)CVTTSD2SI64rr",
742 "(V?)CVTTSD2SIrr",
743 "(V?)CVTTSS2SI64rr",
744 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000745
746def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
747 let Latency = 4;
748 let NumMicroOps = 2;
749 let ResourceCycles = [1,1];
750}
Craig Topper5a69a002018-03-21 06:28:42 +0000751def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
752 "VPSLLDYrr",
753 "VPSLLQYrr",
754 "VPSLLWYrr",
755 "VPSRADYrr",
756 "VPSRAWYrr",
757 "VPSRLDYrr",
758 "VPSRLQYrr",
759 "VPSRLWYrr",
760 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000761
762def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
763 let Latency = 4;
764 let NumMicroOps = 2;
765 let ResourceCycles = [1,1];
766}
767def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
768
769def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
770 let Latency = 4;
771 let NumMicroOps = 2;
772 let ResourceCycles = [1,1];
773}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000774def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000775def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000776 "MMX_CVTPI2PDirr",
777 "MMX_CVTPS2PIirr",
778 "MMX_CVTTPD2PIirr",
779 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000780 "(V?)CVTDQ2PDrr",
781 "(V?)CVTPD2DQrr",
782 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000783 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000784 "(V?)CVTSD2SSrr",
785 "(V?)CVTSI642SDrr",
786 "(V?)CVTSI2SDrr",
787 "(V?)CVTSI2SSrr",
788 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000789
790def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
791 let Latency = 4;
792 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000793 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000794}
Craig Topper5a69a002018-03-21 06:28:42 +0000795def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000796
797def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
798 let Latency = 4;
799 let NumMicroOps = 3;
800 let ResourceCycles = [1,1,1];
801}
802def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
803
804def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
805 let Latency = 4;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,1,1];
808}
Craig Topper5a69a002018-03-21 06:28:42 +0000809def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
810 "ISTT_FP32m",
811 "ISTT_FP64m",
812 "IST_F16m",
813 "IST_F32m",
814 "IST_FP16m",
815 "IST_FP32m",
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000816 "IST_FP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000817
818def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
819 let Latency = 4;
820 let NumMicroOps = 4;
821 let ResourceCycles = [4];
822}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000823def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000824
825def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
826 let Latency = 4;
827 let NumMicroOps = 4;
828 let ResourceCycles = [1,3];
829}
830def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
831
832def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
833 let Latency = 5;
834 let NumMicroOps = 1;
835 let ResourceCycles = [1];
836}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000837def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000838
Gadi Haber323f2e12017-10-24 20:19:47 +0000839def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
840 let Latency = 5;
841 let NumMicroOps = 1;
842 let ResourceCycles = [1];
843}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000844def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000845 "MOVSX(16|32|64)rm32",
846 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000847 "MOVZX(16|32|64)rm16",
848 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000849 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000850 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000851 "(V?)MOVSHDUPrm",
852 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000853 "VPBROADCASTDrm",
854 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000855
856def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
857 let Latency = 5;
858 let NumMicroOps = 3;
859 let ResourceCycles = [1,2];
860}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000861def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000862
863def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
864 let Latency = 5;
865 let NumMicroOps = 3;
866 let ResourceCycles = [1,1,1];
867}
868def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
869
870def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000871 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000872 let NumMicroOps = 3;
873 let ResourceCycles = [1,1,1];
874}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000875def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000876
877def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
878 let Latency = 5;
879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,1,1];
881}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000882def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
883 "VMASKMOVPS(Y?)mr",
884 "VPMASKMOVD(Y?)mr",
885 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000886
887def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
888 let Latency = 5;
889 let NumMicroOps = 5;
890 let ResourceCycles = [1,4];
891}
892def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
893
894def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
895 let Latency = 5;
896 let NumMicroOps = 5;
897 let ResourceCycles = [1,4];
898}
899def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
900
901def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
902 let Latency = 5;
903 let NumMicroOps = 5;
904 let ResourceCycles = [2,3];
905}
Craig Topper5a69a002018-03-21 06:28:42 +0000906def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000907
908def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
909 let Latency = 5;
910 let NumMicroOps = 6;
911 let ResourceCycles = [1,1,4];
912}
Craig Topper5a69a002018-03-21 06:28:42 +0000913def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000914
915def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
916 let Latency = 6;
917 let NumMicroOps = 1;
918 let ResourceCycles = [1];
919}
Craig Topper5a69a002018-03-21 06:28:42 +0000920def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
921 "LD_F64m",
922 "LD_F80m",
923 "VBROADCASTF128",
924 "VBROADCASTI128",
925 "VBROADCASTSDYrm",
926 "VBROADCASTSSYrm",
927 "VLDDQUYrm",
928 "VMOVAPDYrm",
929 "VMOVAPSYrm",
930 "VMOVDDUPYrm",
931 "VMOVDQAYrm",
932 "VMOVDQUYrm",
933 "VMOVNTDQAYrm",
934 "VMOVSHDUPYrm",
935 "VMOVSLDUPYrm",
936 "VMOVUPDYrm",
937 "VMOVUPSYrm",
938 "VPBROADCASTDYrm",
939 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000940 "(V?)ROUNDPD(Y?)r",
941 "(V?)ROUNDPS(Y?)r",
942 "(V?)ROUNDSDr",
943 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000944
945def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
946 let Latency = 6;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000950def: InstRW<[BWWriteResGroup59], (instregex "VCVTPH2PS(Y?)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000951 "(V?)CVTPS2PDrm",
952 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000953 "VPSLLVQrm",
954 "VPSRLVQrm",
955 "VTESTPDrm",
956 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000957
958def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
959 let Latency = 6;
960 let NumMicroOps = 2;
961 let ResourceCycles = [1,1];
962}
Craig Topper5a69a002018-03-21 06:28:42 +0000963def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
964 "VCVTPD2DQYrr",
965 "VCVTPD2PSYrr",
966 "VCVTPS2PHYrr",
967 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000968
Gadi Haber323f2e12017-10-24 20:19:47 +0000969def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
970 let Latency = 6;
971 let NumMicroOps = 2;
972 let ResourceCycles = [1,1];
973}
Craig Topper5a69a002018-03-21 06:28:42 +0000974def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
975 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000976
977def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
978 let Latency = 6;
979 let NumMicroOps = 2;
980 let ResourceCycles = [1,1];
981}
Craig Topperdfccafe2018-04-18 06:41:25 +0000982def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +0000983def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
984 ADCX32rm, ADCX64rm,
985 ADOX32rm, ADOX64rm,
986 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000987
988def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
989 let Latency = 6;
990 let NumMicroOps = 2;
991 let ResourceCycles = [1,1];
992}
Craig Topper5a69a002018-03-21 06:28:42 +0000993def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
994 "BLSI(32|64)rm",
995 "BLSMSK(32|64)rm",
996 "BLSR(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000997 "MOVBE(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000998
999def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1000 let Latency = 6;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001004def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001005 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001006 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001007
1008def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1009 let Latency = 6;
1010 let NumMicroOps = 2;
1011 let ResourceCycles = [1,1];
1012}
Craig Topper2d451e72018-03-18 08:38:06 +00001013def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001014def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001015
1016def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1017 let Latency = 6;
1018 let NumMicroOps = 4;
1019 let ResourceCycles = [1,1,2];
1020}
Craig Topper5a69a002018-03-21 06:28:42 +00001021def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1022 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001023
1024def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1025 let Latency = 6;
1026 let NumMicroOps = 4;
1027 let ResourceCycles = [1,1,1,1];
1028}
1029def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1030
1031def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1032 let Latency = 6;
1033 let NumMicroOps = 4;
1034 let ResourceCycles = [1,1,1,1];
1035}
Craig Topper5a69a002018-03-21 06:28:42 +00001036def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1037 "BTR(16|32|64)mi8",
1038 "BTS(16|32|64)mi8",
1039 "SAR(8|16|32|64)m1",
1040 "SAR(8|16|32|64)mi",
1041 "SHL(8|16|32|64)m1",
1042 "SHL(8|16|32|64)mi",
1043 "SHR(8|16|32|64)m1",
1044 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001045
1046def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1047 let Latency = 6;
1048 let NumMicroOps = 4;
1049 let ResourceCycles = [1,1,1,1];
1050}
Craig Topperf0d04262018-04-06 16:16:48 +00001051def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1052 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001053
1054def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1055 let Latency = 6;
1056 let NumMicroOps = 6;
1057 let ResourceCycles = [1,5];
1058}
1059def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1060
Gadi Haber323f2e12017-10-24 20:19:47 +00001061def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1062 let Latency = 7;
1063 let NumMicroOps = 2;
1064 let ResourceCycles = [1,1];
1065}
Craig Topper5a69a002018-03-21 06:28:42 +00001066def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1067 "VPSLLQYrm",
1068 "VPSLLVQYrm",
1069 "VPSLLWYrm",
1070 "VPSRADYrm",
1071 "VPSRAWYrm",
1072 "VPSRLDYrm",
1073 "VPSRLQYrm",
1074 "VPSRLVQYrm",
1075 "VPSRLWYrm",
1076 "VTESTPDYrm",
1077 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001078
1079def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1080 let Latency = 7;
1081 let NumMicroOps = 2;
1082 let ResourceCycles = [1,1];
1083}
Craig Topper5a69a002018-03-21 06:28:42 +00001084def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1085 "FCOM64m",
1086 "FCOMP32m",
1087 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001088
1089def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1090 let Latency = 7;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Craig Topper5a69a002018-03-21 06:28:42 +00001094def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1095 "VANDNPSYrm",
1096 "VANDPDYrm",
1097 "VANDPSYrm",
1098 "VORPDYrm",
1099 "VORPSYrm",
1100 "VPACKSSDWYrm",
1101 "VPACKSSWBYrm",
1102 "VPACKUSDWYrm",
1103 "VPACKUSWBYrm",
1104 "VPALIGNRYrmi",
1105 "VPBLENDWYrmi",
1106 "VPERMILPDYmi",
1107 "VPERMILPDYrm",
1108 "VPERMILPSYmi",
1109 "VPERMILPSYrm",
1110 "VPSHUFBYrm",
1111 "VPSHUFDYmi",
1112 "VPSHUFHWYmi",
1113 "VPSHUFLWYmi",
1114 "VPUNPCKHBWYrm",
1115 "VPUNPCKHDQYrm",
1116 "VPUNPCKHQDQYrm",
1117 "VPUNPCKHWDYrm",
1118 "VPUNPCKLBWYrm",
1119 "VPUNPCKLDQYrm",
1120 "VPUNPCKLQDQYrm",
1121 "VPUNPCKLWDYrm",
1122 "VSHUFPDYrmi",
1123 "VSHUFPSYrmi",
1124 "VUNPCKHPDYrm",
1125 "VUNPCKHPSYrm",
1126 "VUNPCKLPDYrm",
1127 "VUNPCKLPSYrm",
1128 "VXORPDYrm",
1129 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001130
1131def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1132 let Latency = 7;
1133 let NumMicroOps = 2;
1134 let ResourceCycles = [1,1];
1135}
Craig Topper5a69a002018-03-21 06:28:42 +00001136def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1137 "VPABSDYrm",
1138 "VPABSWYrm",
1139 "VPADDBYrm",
1140 "VPADDDYrm",
1141 "VPADDQYrm",
1142 "VPADDSBYrm",
1143 "VPADDSWYrm",
1144 "VPADDUSBYrm",
1145 "VPADDUSWYrm",
1146 "VPADDWYrm",
1147 "VPAVGBYrm",
1148 "VPAVGWYrm",
1149 "VPCMPEQBYrm",
1150 "VPCMPEQDYrm",
1151 "VPCMPEQQYrm",
1152 "VPCMPEQWYrm",
1153 "VPCMPGTBYrm",
1154 "VPCMPGTDYrm",
1155 "VPCMPGTWYrm",
1156 "VPMAXSBYrm",
1157 "VPMAXSDYrm",
1158 "VPMAXSWYrm",
1159 "VPMAXUBYrm",
1160 "VPMAXUDYrm",
1161 "VPMAXUWYrm",
1162 "VPMINSBYrm",
1163 "VPMINSDYrm",
1164 "VPMINSWYrm",
1165 "VPMINUBYrm",
1166 "VPMINUDYrm",
1167 "VPMINUWYrm",
1168 "VPSIGNBYrm",
1169 "VPSIGNDYrm",
1170 "VPSIGNWYrm",
1171 "VPSUBBYrm",
1172 "VPSUBDYrm",
1173 "VPSUBQYrm",
1174 "VPSUBSBYrm",
1175 "VPSUBSWYrm",
1176 "VPSUBUSBYrm",
1177 "VPSUBUSWYrm",
1178 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001179
1180def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1181 let Latency = 7;
1182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Craig Topper5a69a002018-03-21 06:28:42 +00001185def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1186 "VBLENDPSYrmi",
1187 "VPANDNYrm",
1188 "VPANDYrm",
1189 "VPBLENDDYrmi",
1190 "VPORYrm",
1191 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001192
Gadi Haber323f2e12017-10-24 20:19:47 +00001193def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1194 let Latency = 7;
1195 let NumMicroOps = 3;
1196 let ResourceCycles = [2,1];
1197}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001198def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001199 "MMX_PACKSSWBirm",
1200 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001201 "VMASKMOVPDrm",
1202 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001203 "VPMASKMOVDrm",
1204 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001205
1206def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1207 let Latency = 7;
1208 let NumMicroOps = 3;
1209 let ResourceCycles = [1,2];
1210}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001211def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1212 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001213
1214def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1215 let Latency = 7;
1216 let NumMicroOps = 3;
1217 let ResourceCycles = [1,1,1];
1218}
Craig Topper5a69a002018-03-21 06:28:42 +00001219def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1220 "PSLLQrm",
1221 "PSLLWrm",
1222 "PSRADrm",
1223 "PSRAWrm",
1224 "PSRLDrm",
1225 "PSRLQrm",
1226 "PSRLWrm",
1227 "PTESTrm",
1228 "VPSLLDrm",
1229 "VPSLLQrm",
1230 "VPSLLWrm",
1231 "VPSRADrm",
1232 "VPSRAWrm",
1233 "VPSRLDrm",
1234 "VPSRLQrm",
1235 "VPSRLWrm",
1236 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001237
1238def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1239 let Latency = 7;
1240 let NumMicroOps = 3;
1241 let ResourceCycles = [1,1,1];
1242}
1243def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1244
Gadi Haber323f2e12017-10-24 20:19:47 +00001245def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1246 let Latency = 7;
1247 let NumMicroOps = 3;
1248 let ResourceCycles = [1,1,1];
1249}
Craig Topper5a69a002018-03-21 06:28:42 +00001250def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1251 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001252
Gadi Haber323f2e12017-10-24 20:19:47 +00001253def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1254 let Latency = 7;
1255 let NumMicroOps = 3;
1256 let ResourceCycles = [1,1,1];
1257}
Craig Topperf4cd9082018-01-19 05:47:32 +00001258def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001259
1260def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1261 let Latency = 7;
1262 let NumMicroOps = 5;
1263 let ResourceCycles = [1,1,1,2];
1264}
Craig Topper5a69a002018-03-21 06:28:42 +00001265def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1266 "ROL(8|16|32|64)mi",
1267 "ROR(8|16|32|64)m1",
1268 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001269
1270def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1271 let Latency = 7;
1272 let NumMicroOps = 5;
1273 let ResourceCycles = [1,1,1,2];
1274}
Craig Topper5a69a002018-03-21 06:28:42 +00001275def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001276
1277def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1278 let Latency = 7;
1279 let NumMicroOps = 5;
1280 let ResourceCycles = [1,1,1,1,1];
1281}
Craig Topper5a69a002018-03-21 06:28:42 +00001282def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1283 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001284
1285def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1286 let Latency = 7;
1287 let NumMicroOps = 7;
1288 let ResourceCycles = [2,2,1,2];
1289}
Craig Topper2d451e72018-03-18 08:38:06 +00001290def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001291
1292def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1293 let Latency = 8;
1294 let NumMicroOps = 2;
1295 let ResourceCycles = [1,1];
1296}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001297def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001298 "PDEP(32|64)rm",
1299 "PEXT(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001300 "(V?)CVTDQ2PSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001301
1302def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001303 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001304 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001305 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001306}
Craig Topperf846e2d2018-04-19 05:34:05 +00001307def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001308
Craig Topperf846e2d2018-04-19 05:34:05 +00001309def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1310 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001311 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001312 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001313}
Craig Topper5a69a002018-03-21 06:28:42 +00001314def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001315
Gadi Haber323f2e12017-10-24 20:19:47 +00001316def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1317 let Latency = 8;
1318 let NumMicroOps = 2;
1319 let ResourceCycles = [1,1];
1320}
Craig Topper5a69a002018-03-21 06:28:42 +00001321def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1322 "VPMOVSXBQYrm",
1323 "VPMOVSXBWYrm",
1324 "VPMOVSXDQYrm",
1325 "VPMOVSXWDYrm",
1326 "VPMOVSXWQYrm",
1327 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001328
1329def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1330 let Latency = 8;
1331 let NumMicroOps = 2;
1332 let ResourceCycles = [1,1];
1333}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001334def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1335 "(V?)MULPSrm",
1336 "(V?)MULSDrm",
1337 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001338
1339def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1340 let Latency = 8;
1341 let NumMicroOps = 3;
1342 let ResourceCycles = [2,1];
1343}
Craig Topper5a69a002018-03-21 06:28:42 +00001344def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1345 "VBLENDVPSYrm",
1346 "VMASKMOVPDYrm",
1347 "VMASKMOVPSYrm",
1348 "VPBLENDVBYrm",
1349 "VPMASKMOVDYrm",
1350 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001351
1352def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1353 let Latency = 8;
1354 let NumMicroOps = 4;
1355 let ResourceCycles = [2,1,1];
1356}
Craig Topper5a69a002018-03-21 06:28:42 +00001357def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1358 "VPSRAVDrm",
1359 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001360
Gadi Haber323f2e12017-10-24 20:19:47 +00001361def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1362 let Latency = 8;
1363 let NumMicroOps = 5;
1364 let ResourceCycles = [1,1,1,2];
1365}
Craig Topper5a69a002018-03-21 06:28:42 +00001366def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1367 "RCL(8|16|32|64)mi",
1368 "RCR(8|16|32|64)m1",
1369 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001370
1371def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1372 let Latency = 8;
1373 let NumMicroOps = 5;
1374 let ResourceCycles = [1,1,2,1];
1375}
Craig Topper13a16502018-03-19 00:56:09 +00001376def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001377
1378def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1379 let Latency = 8;
1380 let NumMicroOps = 6;
1381 let ResourceCycles = [1,1,1,3];
1382}
Craig Topper9f834812018-04-01 21:54:24 +00001383def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001384
1385def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1386 let Latency = 8;
1387 let NumMicroOps = 6;
1388 let ResourceCycles = [1,1,1,2,1];
1389}
Craig Topper9f834812018-04-01 21:54:24 +00001390def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001391 "CMPXCHG(8|16|32|64)rm",
1392 "ROL(8|16|32|64)mCL",
1393 "SAR(8|16|32|64)mCL",
1394 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001395 "SHL(8|16|32|64)mCL",
1396 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001397def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1398 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001399
1400def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1401 let Latency = 9;
1402 let NumMicroOps = 2;
1403 let ResourceCycles = [1,1];
1404}
Craig Topper5a69a002018-03-21 06:28:42 +00001405def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1406 "ADD_F64m",
1407 "ILD_F16m",
1408 "ILD_F32m",
1409 "ILD_F64m",
1410 "SUBR_F32m",
1411 "SUBR_F64m",
1412 "SUB_F32m",
1413 "SUB_F64m",
1414 "VADDPDYrm",
1415 "VADDPSYrm",
1416 "VADDSUBPDYrm",
1417 "VADDSUBPSYrm",
1418 "VCMPPDYrmi",
1419 "VCMPPSYrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001420 "VCVTPS2DQYrm",
1421 "VCVTTPS2DQYrm",
1422 "VMAX(C?)PDYrm",
1423 "VMAX(C?)PSYrm",
1424 "VMIN(C?)PDYrm",
1425 "VMIN(C?)PSYrm",
1426 "VSUBPDYrm",
1427 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001428
1429def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1430 let Latency = 9;
1431 let NumMicroOps = 2;
1432 let ResourceCycles = [1,1];
1433}
Craig Topper5a69a002018-03-21 06:28:42 +00001434def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1435 "VPERM2I128rm",
1436 "VPERMDYrm",
1437 "VPERMPDYmi",
1438 "VPERMPSYrm",
1439 "VPERMQYmi",
1440 "VPMOVZXBDYrm",
1441 "VPMOVZXBQYrm",
1442 "VPMOVZXBWYrm",
1443 "VPMOVZXDQYrm",
1444 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001445
1446def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1447 let Latency = 9;
1448 let NumMicroOps = 2;
1449 let ResourceCycles = [1,1];
1450}
Craig Topper5a69a002018-03-21 06:28:42 +00001451def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1452 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001453
1454def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1455 let Latency = 9;
1456 let NumMicroOps = 3;
1457 let ResourceCycles = [1,1,1];
1458}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001459def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001460
1461def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1462 let Latency = 9;
1463 let NumMicroOps = 3;
1464 let ResourceCycles = [1,1,1];
1465}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001466def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1467 "(V?)CVTSD2SIrm",
1468 "(V?)CVTSS2SI64rm",
1469 "(V?)CVTSS2SIrm",
1470 "(V?)CVTTSD2SI64rm",
1471 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001472 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001473 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001474
1475def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1476 let Latency = 9;
1477 let NumMicroOps = 3;
1478 let ResourceCycles = [1,1,1];
1479}
1480def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1481
1482def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1483 let Latency = 9;
1484 let NumMicroOps = 3;
1485 let ResourceCycles = [1,1,1];
1486}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001487def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001488def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001489 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001490 "CVTTPD2DQrm",
1491 "MMX_CVTPD2PIirm",
1492 "MMX_CVTPI2PDirm",
1493 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001494 "(V?)CVTDQ2PDrm",
1495 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001496
1497def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1498 let Latency = 9;
1499 let NumMicroOps = 3;
1500 let ResourceCycles = [1,1,1];
1501}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001502def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1503 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001504
1505def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1506 let Latency = 9;
1507 let NumMicroOps = 4;
1508 let ResourceCycles = [2,1,1];
1509}
Craig Topper5a69a002018-03-21 06:28:42 +00001510def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1511 "VPSRAVDYrm",
1512 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001513
1514def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1515 let Latency = 9;
1516 let NumMicroOps = 4;
1517 let ResourceCycles = [2,1,1];
1518}
Craig Topper5a69a002018-03-21 06:28:42 +00001519def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1520 "VPHADDSWYrm",
1521 "VPHADDWYrm",
1522 "VPHSUBDYrm",
1523 "VPHSUBSWYrm",
1524 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001525
1526def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1527 let Latency = 9;
1528 let NumMicroOps = 4;
1529 let ResourceCycles = [1,1,1,1];
1530}
Craig Topper5a69a002018-03-21 06:28:42 +00001531def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1532 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001533
1534def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1535 let Latency = 9;
1536 let NumMicroOps = 5;
1537 let ResourceCycles = [1,1,3];
1538}
1539def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1540
1541def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1542 let Latency = 9;
1543 let NumMicroOps = 5;
1544 let ResourceCycles = [1,2,1,1];
1545}
Craig Topper5a69a002018-03-21 06:28:42 +00001546def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1547 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001548
Gadi Haber323f2e12017-10-24 20:19:47 +00001549def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1550 let Latency = 10;
1551 let NumMicroOps = 2;
1552 let ResourceCycles = [1,1];
1553}
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001554def: InstRW<[BWWriteResGroup115], (instregex "(V?)PCMPGTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001555
Gadi Haber323f2e12017-10-24 20:19:47 +00001556def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1557 let Latency = 10;
1558 let NumMicroOps = 3;
1559 let ResourceCycles = [2,1];
1560}
Craig Topper5a69a002018-03-21 06:28:42 +00001561def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1562 "FICOM32m",
1563 "FICOMP16m",
1564 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001565
1566def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1567 let Latency = 10;
1568 let NumMicroOps = 3;
1569 let ResourceCycles = [1,1,1];
1570}
1571def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1572
Gadi Haber323f2e12017-10-24 20:19:47 +00001573def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1574 let Latency = 10;
1575 let NumMicroOps = 4;
1576 let ResourceCycles = [1,1,1,1];
1577}
1578def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1579
1580def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001581 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001582 let NumMicroOps = 4;
1583 let ResourceCycles = [1,1,1,1];
1584}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001585def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001586
Craig Topper8104f262018-04-02 05:33:28 +00001587def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001588 let Latency = 11;
1589 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001590 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001591}
Craig Topper8104f262018-04-02 05:33:28 +00001592def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1593
1594def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1595 let Latency = 11;
1596 let NumMicroOps = 1;
1597 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1598}
1599def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001600
1601def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1602 let Latency = 11;
1603 let NumMicroOps = 2;
1604 let ResourceCycles = [1,1];
1605}
Craig Topper5a69a002018-03-21 06:28:42 +00001606def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1607 "MUL_F64m",
1608 "VPCMPGTQYrm",
1609 "VPMADDUBSWYrm",
1610 "VPMADDWDYrm",
1611 "VPMULDQYrm",
1612 "VPMULHRSWYrm",
1613 "VPMULHUWYrm",
1614 "VPMULHWYrm",
1615 "VPMULLWYrm",
1616 "VPMULUDQYrm",
1617 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001618
1619def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1620 let Latency = 11;
1621 let NumMicroOps = 2;
1622 let ResourceCycles = [1,1];
1623}
Craig Topperf82867c2017-12-13 23:11:30 +00001624def: InstRW<[BWWriteResGroup124],
1625 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001626
Gadi Haber323f2e12017-10-24 20:19:47 +00001627def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1628 let Latency = 11;
1629 let NumMicroOps = 3;
1630 let ResourceCycles = [2,1];
1631}
Craig Topper5a69a002018-03-21 06:28:42 +00001632def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1633 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001634
1635def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1636 let Latency = 11;
1637 let NumMicroOps = 3;
1638 let ResourceCycles = [2,1];
1639}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001640def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1641 "(V?)ROUNDPSm",
1642 "(V?)ROUNDSDm",
1643 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001644
1645def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1646 let Latency = 11;
1647 let NumMicroOps = 3;
1648 let ResourceCycles = [1,1,1];
1649}
1650def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1651
1652def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1653 let Latency = 11;
1654 let NumMicroOps = 4;
1655 let ResourceCycles = [1,2,1];
1656}
Craig Topper5a69a002018-03-21 06:28:42 +00001657def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1658 "VHADDPSYrm",
1659 "VHSUBPDYrm",
1660 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001661
1662def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1663 let Latency = 11;
1664 let NumMicroOps = 6;
1665 let ResourceCycles = [1,1,1,1,2];
1666}
Craig Topper5a69a002018-03-21 06:28:42 +00001667def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1668 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001669
1670def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1671 let Latency = 11;
1672 let NumMicroOps = 7;
1673 let ResourceCycles = [2,2,3];
1674}
Craig Topper5a69a002018-03-21 06:28:42 +00001675def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1676 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001677
1678def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1679 let Latency = 11;
1680 let NumMicroOps = 9;
1681 let ResourceCycles = [1,4,1,3];
1682}
1683def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1684
1685def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1686 let Latency = 11;
1687 let NumMicroOps = 11;
1688 let ResourceCycles = [2,9];
1689}
Craig Topper2d451e72018-03-18 08:38:06 +00001690def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1691def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001692
Gadi Haber323f2e12017-10-24 20:19:47 +00001693def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1694 let Latency = 12;
1695 let NumMicroOps = 3;
1696 let ResourceCycles = [2,1];
1697}
Craig Topper5a69a002018-03-21 06:28:42 +00001698def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1699 "ADD_FI32m",
1700 "SUBR_FI16m",
1701 "SUBR_FI32m",
1702 "SUB_FI16m",
1703 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001704 "VROUNDPDYm",
1705 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001706
Craig Topper8104f262018-04-02 05:33:28 +00001707def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001708 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001709 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001710 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001711}
Craig Topper8104f262018-04-02 05:33:28 +00001712def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1713
1714def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1715 let Latency = 11;
1716 let NumMicroOps = 1;
1717 let ResourceCycles = [1,4];
1718}
1719def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001720
1721def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1722 let Latency = 13;
1723 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001724 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001725}
1726def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1727
Craig Topper8104f262018-04-02 05:33:28 +00001728def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001729 let Latency = 14;
1730 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001731 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001732}
Craig Topper8104f262018-04-02 05:33:28 +00001733def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1734
1735def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1736 let Latency = 14;
1737 let NumMicroOps = 1;
1738 let ResourceCycles = [1,4];
1739}
1740def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001741
Gadi Haber323f2e12017-10-24 20:19:47 +00001742def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1743 let Latency = 14;
1744 let NumMicroOps = 3;
1745 let ResourceCycles = [1,1,1];
1746}
Craig Topper5a69a002018-03-21 06:28:42 +00001747def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1748 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001749
1750def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1751 let Latency = 14;
1752 let NumMicroOps = 4;
1753 let ResourceCycles = [2,1,1];
1754}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001755def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001756
1757def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1758 let Latency = 14;
1759 let NumMicroOps = 4;
1760 let ResourceCycles = [1,1,1,1];
1761}
Craig Topper5a69a002018-03-21 06:28:42 +00001762def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001763
1764def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1765 let Latency = 14;
1766 let NumMicroOps = 8;
1767 let ResourceCycles = [2,2,1,3];
1768}
1769def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1770
1771def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1772 let Latency = 14;
1773 let NumMicroOps = 10;
1774 let ResourceCycles = [2,3,1,4];
1775}
1776def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1777
1778def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1779 let Latency = 14;
1780 let NumMicroOps = 12;
1781 let ResourceCycles = [2,1,4,5];
1782}
1783def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
1784
1785def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1786 let Latency = 15;
1787 let NumMicroOps = 1;
1788 let ResourceCycles = [1];
1789}
Craig Topper5a69a002018-03-21 06:28:42 +00001790def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1791 "DIVR_FST0r",
1792 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001793
Gadi Haber323f2e12017-10-24 20:19:47 +00001794def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1795 let Latency = 15;
1796 let NumMicroOps = 10;
1797 let ResourceCycles = [1,1,1,4,1,2];
1798}
Craig Topper13a16502018-03-19 00:56:09 +00001799def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001800
Craig Topper8104f262018-04-02 05:33:28 +00001801def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001802 let Latency = 16;
1803 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001804 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001805}
Craig Topper5a69a002018-03-21 06:28:42 +00001806def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1807 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001808
1809def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1810 let Latency = 16;
1811 let NumMicroOps = 3;
1812 let ResourceCycles = [2,1];
1813}
1814def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1815
Gadi Haber323f2e12017-10-24 20:19:47 +00001816def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1817 let Latency = 16;
1818 let NumMicroOps = 14;
1819 let ResourceCycles = [1,1,1,4,2,5];
1820}
1821def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1822
1823def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1824 let Latency = 16;
1825 let NumMicroOps = 16;
1826 let ResourceCycles = [16];
1827}
Craig Topper5a69a002018-03-21 06:28:42 +00001828def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001829
Craig Topper8104f262018-04-02 05:33:28 +00001830def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001831 let Latency = 17;
1832 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001833 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001834}
1835def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1836
1837def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1838 let Latency = 17;
1839 let NumMicroOps = 4;
1840 let ResourceCycles = [2,1,1];
1841}
Craig Topper5a69a002018-03-21 06:28:42 +00001842def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
1843 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001844
Craig Topper8104f262018-04-02 05:33:28 +00001845def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001846 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001847 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001848 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001849}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001850def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
1851 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001852
Gadi Haber323f2e12017-10-24 20:19:47 +00001853def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
1854 let Latency = 18;
1855 let NumMicroOps = 8;
1856 let ResourceCycles = [1,1,1,5];
1857}
Craig Topper5a69a002018-03-21 06:28:42 +00001858def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00001859def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001860
1861def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1862 let Latency = 18;
1863 let NumMicroOps = 11;
1864 let ResourceCycles = [2,1,1,3,1,3];
1865}
Craig Topper13a16502018-03-19 00:56:09 +00001866def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001867
Craig Topper8104f262018-04-02 05:33:28 +00001868def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001869 let Latency = 19;
1870 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001871 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001872}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001873def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001874 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001875
Gadi Haber323f2e12017-10-24 20:19:47 +00001876def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1877 let Latency = 19;
1878 let NumMicroOps = 5;
1879 let ResourceCycles = [2,1,1,1];
1880}
Craig Topper5a69a002018-03-21 06:28:42 +00001881def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001882
Gadi Haber323f2e12017-10-24 20:19:47 +00001883def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
1884 let Latency = 20;
1885 let NumMicroOps = 1;
1886 let ResourceCycles = [1];
1887}
Craig Topper5a69a002018-03-21 06:28:42 +00001888def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
1889 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001890 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001891
1892def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1893 let Latency = 20;
1894 let NumMicroOps = 5;
1895 let ResourceCycles = [2,1,1,1];
1896}
1897def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
1898
1899def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1900 let Latency = 20;
1901 let NumMicroOps = 8;
1902 let ResourceCycles = [1,1,1,1,1,1,2];
1903}
Craig Topper5a69a002018-03-21 06:28:42 +00001904def: InstRW<[BWWriteResGroup167], (instregex "INSB",
1905 "INSL",
1906 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001907
Craig Topper8104f262018-04-02 05:33:28 +00001908def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001909 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001910 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001911 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001912}
Craig Topper8104f262018-04-02 05:33:28 +00001913def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
1914
1915def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1916 let Latency = 16;
1917 let NumMicroOps = 1;
1918 let ResourceCycles = [1,8];
1919}
1920def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001921
1922def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
1923 let Latency = 21;
1924 let NumMicroOps = 2;
1925 let ResourceCycles = [1,1];
1926}
Craig Topper5a69a002018-03-21 06:28:42 +00001927def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
1928 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001929
Craig Topper8104f262018-04-02 05:33:28 +00001930def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001931 let Latency = 21;
1932 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001933 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001934}
1935def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
1936
1937def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1938 let Latency = 21;
1939 let NumMicroOps = 19;
1940 let ResourceCycles = [2,1,4,1,1,4,6];
1941}
1942def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
1943
1944def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1945 let Latency = 22;
1946 let NumMicroOps = 18;
1947 let ResourceCycles = [1,1,16];
1948}
1949def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
1950
Craig Topper8104f262018-04-02 05:33:28 +00001951def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001952 let Latency = 23;
1953 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001954 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001955}
1956def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
1957
Craig Topper8104f262018-04-02 05:33:28 +00001958def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001959 let Latency = 23;
1960 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001961 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001962}
1963def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
1964
Gadi Haber323f2e12017-10-24 20:19:47 +00001965def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1966 let Latency = 23;
1967 let NumMicroOps = 19;
1968 let ResourceCycles = [3,1,15];
1969}
Craig Topper391c6f92017-12-10 01:24:08 +00001970def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001971
1972def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1973 let Latency = 24;
1974 let NumMicroOps = 3;
1975 let ResourceCycles = [1,1,1];
1976}
Craig Topper5a69a002018-03-21 06:28:42 +00001977def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
1978 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001979
Craig Topper8104f262018-04-02 05:33:28 +00001980def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001981 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00001982 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001983 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001984}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001985def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
1986 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001987
1988def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
1989 let Latency = 26;
1990 let NumMicroOps = 2;
1991 let ResourceCycles = [1,1];
1992}
Craig Topper5a69a002018-03-21 06:28:42 +00001993def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001994 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001995
Craig Topper8104f262018-04-02 05:33:28 +00001996def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001997 let Latency = 27;
1998 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001999 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002000}
2001def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2002
2003def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2004 let Latency = 29;
2005 let NumMicroOps = 3;
2006 let ResourceCycles = [1,1,1];
2007}
Craig Topper5a69a002018-03-21 06:28:42 +00002008def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2009 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002010
Craig Topper8104f262018-04-02 05:33:28 +00002011def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002012 let Latency = 29;
2013 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002014 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002015}
2016def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2017
2018def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2019 let Latency = 22;
2020 let NumMicroOps = 7;
2021 let ResourceCycles = [1,3,2,1];
2022}
Craig Topper17a31182017-12-16 18:35:29 +00002023def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002024
2025def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2026 let Latency = 23;
2027 let NumMicroOps = 9;
2028 let ResourceCycles = [1,3,4,1];
2029}
Craig Topper17a31182017-12-16 18:35:29 +00002030def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002031
2032def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2033 let Latency = 24;
2034 let NumMicroOps = 9;
2035 let ResourceCycles = [1,5,2,1];
2036}
Craig Topper17a31182017-12-16 18:35:29 +00002037def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002038
2039def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2040 let Latency = 25;
2041 let NumMicroOps = 7;
2042 let ResourceCycles = [1,3,2,1];
2043}
Craig Topper17a31182017-12-16 18:35:29 +00002044def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2045 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002046
2047def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2048 let Latency = 26;
2049 let NumMicroOps = 9;
2050 let ResourceCycles = [1,5,2,1];
2051}
Craig Topper17a31182017-12-16 18:35:29 +00002052def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002053
2054def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2055 let Latency = 26;
2056 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002057 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002058}
Craig Topper17a31182017-12-16 18:35:29 +00002059def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002060
2061def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2062 let Latency = 27;
2063 let NumMicroOps = 9;
2064 let ResourceCycles = [1,5,2,1];
2065}
Craig Topper17a31182017-12-16 18:35:29 +00002066def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002067
Gadi Haber323f2e12017-10-24 20:19:47 +00002068def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2069 let Latency = 29;
2070 let NumMicroOps = 27;
2071 let ResourceCycles = [1,5,1,1,19];
2072}
2073def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2074
2075def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2076 let Latency = 30;
2077 let NumMicroOps = 28;
2078 let ResourceCycles = [1,6,1,1,19];
2079}
Craig Topper2d451e72018-03-18 08:38:06 +00002080def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002081
2082def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2083 let Latency = 31;
2084 let NumMicroOps = 31;
2085 let ResourceCycles = [8,1,21,1];
2086}
2087def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2088
Craig Topper8104f262018-04-02 05:33:28 +00002089def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2090 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002091 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002092 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002093}
2094def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2095
2096def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2097 let Latency = 34;
2098 let NumMicroOps = 8;
2099 let ResourceCycles = [2,2,2,1,1];
2100}
Craig Topper13a16502018-03-19 00:56:09 +00002101def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002102
2103def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2104 let Latency = 34;
2105 let NumMicroOps = 23;
2106 let ResourceCycles = [1,5,3,4,10];
2107}
Craig Topper5a69a002018-03-21 06:28:42 +00002108def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2109 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002110
2111def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2112 let Latency = 35;
2113 let NumMicroOps = 8;
2114 let ResourceCycles = [2,2,2,1,1];
2115}
Craig Topper13a16502018-03-19 00:56:09 +00002116def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002117
2118def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2119 let Latency = 35;
2120 let NumMicroOps = 23;
2121 let ResourceCycles = [1,5,2,1,4,10];
2122}
Craig Topper5a69a002018-03-21 06:28:42 +00002123def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2124 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002125
Craig Topper8104f262018-04-02 05:33:28 +00002126def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2127 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002129 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002130}
2131def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2132
2133def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2134 let Latency = 42;
2135 let NumMicroOps = 22;
2136 let ResourceCycles = [2,20];
2137}
Craig Topper2d451e72018-03-18 08:38:06 +00002138def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002139
2140def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2141 let Latency = 60;
2142 let NumMicroOps = 64;
2143 let ResourceCycles = [2,2,8,1,10,2,39];
2144}
2145def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002146
2147def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2148 let Latency = 63;
2149 let NumMicroOps = 88;
2150 let ResourceCycles = [4,4,31,1,2,1,45];
2151}
Craig Topper2d451e72018-03-18 08:38:06 +00002152def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002153
2154def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2155 let Latency = 63;
2156 let NumMicroOps = 90;
2157 let ResourceCycles = [4,2,33,1,2,1,47];
2158}
Craig Topper2d451e72018-03-18 08:38:06 +00002159def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002160
2161def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2162 let Latency = 75;
2163 let NumMicroOps = 15;
2164 let ResourceCycles = [6,3,6];
2165}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002166def: InstRW<[BWWriteResGroup200], (instrs FNINIT)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002167
2168def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2169 let Latency = 80;
2170 let NumMicroOps = 32;
2171 let ResourceCycles = [7,7,3,3,1,11];
2172}
2173def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2174
2175def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2176 let Latency = 115;
2177 let NumMicroOps = 100;
2178 let ResourceCycles = [9,9,11,8,1,11,21,30];
2179}
2180def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002181
2182} // SchedModel
2183