blob: cb366ef38ecfab20834777dcb554335a2002bf2b [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000166defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
167defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000172
173// FMA Scheduling helper class.
174// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
175
176// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000177def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
178def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
179def : WriteRes<WriteVecMove, [BWPort015]>;
180
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000181defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000182defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
184defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000185defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000187defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000188defm : BWWriteResPair<WriteBlend, [BWPort5], 1>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000189defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000190defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000191defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000192
Gadi Haber323f2e12017-10-24 20:19:47 +0000193// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
195defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
196defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000197
198// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199
Gadi Haber323f2e12017-10-24 20:19:47 +0000200// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000201def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 11;
203 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000204 let ResourceCycles = [3];
205}
206def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207 let Latency = 16;
208 let NumMicroOps = 4;
209 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000210}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000211
212// Packed Compare Explicit Length Strings, Return Mask
213def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
214 let Latency = 19;
215 let NumMicroOps = 9;
216 let ResourceCycles = [4,3,1,1];
217}
218def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
219 let Latency = 24;
220 let NumMicroOps = 10;
221 let ResourceCycles = [4,3,1,1,1];
222}
223
224// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000225def : WriteRes<WritePCmpIStrI, [BWPort0]> {
226 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000227 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000228 let ResourceCycles = [3];
229}
230def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 16;
232 let NumMicroOps = 4;
233 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000234}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000235
236// Packed Compare Explicit Length Strings, Return Index
237def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
238 let Latency = 18;
239 let NumMicroOps = 8;
240 let ResourceCycles = [4,3,1];
241}
242def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
243 let Latency = 23;
244 let NumMicroOps = 9;
245 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000246}
247
Simon Pilgrima2f26782018-03-27 20:38:54 +0000248// MOVMSK Instructions.
249def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
250def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
252
Gadi Haber323f2e12017-10-24 20:19:47 +0000253// AES instructions.
254def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
255 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [1];
258}
259def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 12;
261 let NumMicroOps = 2;
262 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000264
Gadi Haber323f2e12017-10-24 20:19:47 +0000265def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
266 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000268 let ResourceCycles = [2];
269}
270def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000271 let Latency = 19;
272 let NumMicroOps = 3;
273 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275
276def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
277 let Latency = 29;
278 let NumMicroOps = 11;
279 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000280}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000281def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
282 let Latency = 33;
283 let NumMicroOps = 11;
284 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000285}
286
287// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000289
290// Catch-all for expensive system instructions.
291def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
292
293// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000295defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000296defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000297defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000298defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000299
300// Old microcoded instructions that nobody use.
301def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
302
303// Fence instructions.
304def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
305
Craig Topper05242bf2018-04-21 18:07:36 +0000306// Load/store MXCSR.
307def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
308def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
309
Gadi Haber323f2e12017-10-24 20:19:47 +0000310// Nop, not very useful expect it provides a model for nops!
311def : WriteRes<WriteNop, []>;
312
313////////////////////////////////////////////////////////////////////////////////
314// Horizontal add/sub instructions.
315////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000317defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
318defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Remaining instrs.
321
322def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
323 let Latency = 1;
324 let NumMicroOps = 1;
325 let ResourceCycles = [1];
326}
Craig Topper5a69a002018-03-21 06:28:42 +0000327def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
328 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000329 "(V?)MOVPDI2DIrr",
330 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000331 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000332 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000333 "VTESTPD(Y?)rr",
334 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000335
336def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
337 let Latency = 1;
338 let NumMicroOps = 1;
339 let ResourceCycles = [1];
340}
Craig Topper5a69a002018-03-21 06:28:42 +0000341def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
342 "COM_FST0r",
343 "UCOM_FPr",
344 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000345
346def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
347 let Latency = 1;
348 let NumMicroOps = 1;
349 let ResourceCycles = [1];
350}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000351def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000352 "MMX_MOVD64to64rr",
353 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000354 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000355 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000356 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000357 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000358
359def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
360 let Latency = 1;
361 let NumMicroOps = 1;
362 let ResourceCycles = [1];
363}
364def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
365
366def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
367 let Latency = 1;
368 let NumMicroOps = 1;
369 let ResourceCycles = [1];
370}
Craig Topper5a69a002018-03-21 06:28:42 +0000371def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
372 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000373
374def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
375 let Latency = 1;
376 let NumMicroOps = 1;
377 let ResourceCycles = [1];
378}
Craig Topperfbe31322018-04-05 21:56:19 +0000379def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000380def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
381 "ADC(16|32|64)i",
382 "ADC(8|16|32|64)rr",
383 "ADCX(32|64)rr",
384 "ADOX(32|64)rr",
385 "BT(16|32|64)ri8",
386 "BT(16|32|64)rr",
387 "BTC(16|32|64)ri8",
388 "BTC(16|32|64)rr",
389 "BTR(16|32|64)ri8",
390 "BTR(16|32|64)rr",
391 "BTS(16|32|64)ri8",
392 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000393 "SBB(16|32|64)ri",
394 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000395 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000396
397def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
398 let Latency = 1;
399 let NumMicroOps = 1;
400 let ResourceCycles = [1];
401}
Craig Topper5a69a002018-03-21 06:28:42 +0000402def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
403 "BLSI(32|64)rr",
404 "BLSMSK(32|64)rr",
405 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000406 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000407
408def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
409 let Latency = 1;
410 let NumMicroOps = 1;
411 let ResourceCycles = [1];
412}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000413def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000414 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000415
416def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
417 let Latency = 1;
418 let NumMicroOps = 1;
419 let ResourceCycles = [1];
420}
Craig Topperdfccafe2018-04-18 06:41:25 +0000421def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000422 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000423 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000424 "SGDT64m",
425 "SIDT64m",
426 "SLDT64m",
427 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000428 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000429 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000430
431def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
432 let Latency = 1;
433 let NumMicroOps = 2;
434 let ResourceCycles = [1,1];
435}
Craig Topper5a69a002018-03-21 06:28:42 +0000436def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
437 "MMX_MOVD64from64rm",
438 "MMX_MOVD64mr",
439 "MMX_MOVNTQmr",
440 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000441 "MOVNTI_64mr",
442 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000443 "ST_FP32m",
444 "ST_FP64m",
445 "ST_FP80m",
446 "VEXTRACTF128mr",
447 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000448 "(V?)MOVAPD(Y?)mr",
449 "(V?)MOVAPS(Y?)mr",
450 "(V?)MOVDQA(Y?)mr",
451 "(V?)MOVDQU(Y?)mr",
452 "(V?)MOVHPDmr",
453 "(V?)MOVHPSmr",
454 "(V?)MOVLPDmr",
455 "(V?)MOVLPSmr",
456 "(V?)MOVNTDQ(V?)mr",
457 "(V?)MOVNTPD(V?)mr",
458 "(V?)MOVNTPS(V?)mr",
459 "(V?)MOVPDI2DImr",
460 "(V?)MOVPQI2QImr",
461 "(V?)MOVPQIto64mr",
462 "(V?)MOVSDmr",
463 "(V?)MOVSSmr",
464 "(V?)MOVUPD(Y?)mr",
465 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000466
467def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
468 let Latency = 2;
469 let NumMicroOps = 2;
470 let ResourceCycles = [2];
471}
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000472def: InstRW<[BWWriteResGroup11], (instregex "MMX_PINSRWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000473 "(V?)PINSRBrr",
474 "(V?)PINSRDrr",
475 "(V?)PINSRQrr",
476 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000477
478def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
479 let Latency = 2;
480 let NumMicroOps = 2;
481 let ResourceCycles = [2];
482}
483def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
484
485def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
486 let Latency = 2;
487 let NumMicroOps = 2;
488 let ResourceCycles = [2];
489}
Craig Topper5a69a002018-03-21 06:28:42 +0000490def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
491 "ROL(8|16|32|64)ri",
492 "ROR(8|16|32|64)r1",
493 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000494
495def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
496 let Latency = 2;
497 let NumMicroOps = 2;
498 let ResourceCycles = [2];
499}
Craig Topper5a69a002018-03-21 06:28:42 +0000500def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
501 "MFENCE",
502 "WAIT",
503 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000504
505def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
506 let Latency = 2;
507 let NumMicroOps = 2;
508 let ResourceCycles = [1,1];
509}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000510def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
511 "VCVTPH2PS(Y?)rr",
512 "(V?)CVTPS2PDrr",
513 "(V?)CVTSS2SDrr",
514 "(V?)EXTRACTPSrr",
515 "(V?)PEXTRBrr",
516 "(V?)PEXTRDrr",
517 "(V?)PEXTRQrr",
518 "(V?)PEXTRWrr",
519 "(V?)PSLLDrr",
520 "(V?)PSLLQrr",
521 "(V?)PSLLWrr",
522 "(V?)PSRADrr",
523 "(V?)PSRAWrr",
524 "(V?)PSRLDrr",
525 "(V?)PSRLQrr",
526 "(V?)PSRLWrr",
527 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000528
529def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
530 let Latency = 2;
531 let NumMicroOps = 2;
532 let ResourceCycles = [1,1];
533}
534def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
535
536def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
537 let Latency = 2;
538 let NumMicroOps = 2;
539 let ResourceCycles = [1,1];
540}
541def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
542
543def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
544 let Latency = 2;
545 let NumMicroOps = 2;
546 let ResourceCycles = [1,1];
547}
548def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
549
550def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
551 let Latency = 2;
552 let NumMicroOps = 2;
553 let ResourceCycles = [1,1];
554}
Craig Topper498875f2018-04-04 17:54:19 +0000555def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
556
557def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
558 let Latency = 1;
559 let NumMicroOps = 1;
560 let ResourceCycles = [1];
561}
562def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000563
564def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
565 let Latency = 2;
566 let NumMicroOps = 2;
567 let ResourceCycles = [1,1];
568}
Craig Topper2d451e72018-03-18 08:38:06 +0000569def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000570def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000571def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
572 "ADC8ri",
573 "CMOV(A|BE)(16|32|64)rr",
574 "SBB8i8",
575 "SBB8ri",
576 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000577
578def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
579 let Latency = 2;
580 let NumMicroOps = 3;
581 let ResourceCycles = [1,1,1];
582}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000583def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
584 "(V?)PEXTRBmr",
585 "(V?)PEXTRDmr",
586 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000587 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000588
589def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
590 let Latency = 2;
591 let NumMicroOps = 3;
592 let ResourceCycles = [1,1,1];
593}
594def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
595
Gadi Haber323f2e12017-10-24 20:19:47 +0000596def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
597 let Latency = 2;
598 let NumMicroOps = 3;
599 let ResourceCycles = [1,1,1];
600}
601def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
602
603def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
604 let Latency = 2;
605 let NumMicroOps = 3;
606 let ResourceCycles = [1,1,1];
607}
Craig Topper2d451e72018-03-18 08:38:06 +0000608def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000609def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
610 "PUSH64i8",
611 "STOSB",
612 "STOSL",
613 "STOSQ",
614 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000615
Gadi Haber323f2e12017-10-24 20:19:47 +0000616def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
617 let Latency = 3;
618 let NumMicroOps = 1;
619 let ResourceCycles = [1];
620}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000621def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000622 "PDEP(32|64)rr",
623 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000624 "SHLD(16|32|64)rri8",
625 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000626 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000627
628def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000629 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000630 let NumMicroOps = 2;
631 let ResourceCycles = [1,1];
632}
Clement Courbet327fac42018-03-07 08:14:02 +0000633def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000634
635def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
636 let Latency = 3;
637 let NumMicroOps = 1;
638 let ResourceCycles = [1];
639}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000640def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
641 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000642 "VPMOVSXBDYrr",
643 "VPMOVSXBQYrr",
644 "VPMOVSXBWYrr",
645 "VPMOVSXDQYrr",
646 "VPMOVSXWDYrr",
647 "VPMOVSXWQYrr",
648 "VPMOVZXBDYrr",
649 "VPMOVZXBQYrr",
650 "VPMOVZXBWYrr",
651 "VPMOVZXDQYrr",
652 "VPMOVZXWDYrr",
653 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000654
655def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
656 let Latency = 3;
657 let NumMicroOps = 1;
658 let ResourceCycles = [1];
659}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000660def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
661 "(V?)MULPS(Y?)rr",
662 "(V?)MULSDrr",
663 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000664
665def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000666 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000667 let NumMicroOps = 3;
668 let ResourceCycles = [3];
669}
Craig Topperb5f26592018-04-19 18:00:17 +0000670def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
671 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
672 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000673
674def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
675 let Latency = 3;
676 let NumMicroOps = 3;
677 let ResourceCycles = [2,1];
678}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000679def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
680 "VPSRAVD(Y?)rr",
681 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000682
Gadi Haber323f2e12017-10-24 20:19:47 +0000683def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
684 let Latency = 3;
685 let NumMicroOps = 3;
686 let ResourceCycles = [2,1];
687}
Craig Topper5a69a002018-03-21 06:28:42 +0000688def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
689 "MMX_PACKSSWBirr",
690 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000691
692def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
693 let Latency = 3;
694 let NumMicroOps = 3;
695 let ResourceCycles = [1,2];
696}
697def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
698
699def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
700 let Latency = 3;
701 let NumMicroOps = 3;
702 let ResourceCycles = [1,2];
703}
Craig Topper5a69a002018-03-21 06:28:42 +0000704def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
705 "RCL(8|16|32|64)ri",
706 "RCR(8|16|32|64)r1",
707 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000708
709def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
710 let Latency = 3;
711 let NumMicroOps = 3;
712 let ResourceCycles = [2,1];
713}
Craig Topper5a69a002018-03-21 06:28:42 +0000714def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
715 "ROR(8|16|32|64)rCL",
716 "SAR(8|16|32|64)rCL",
717 "SHL(8|16|32|64)rCL",
718 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000719
720def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
721 let Latency = 3;
722 let NumMicroOps = 4;
723 let ResourceCycles = [1,1,1,1];
724}
725def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
726
727def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
728 let Latency = 3;
729 let NumMicroOps = 4;
730 let ResourceCycles = [1,1,1,1];
731}
Craig Topper5a69a002018-03-21 06:28:42 +0000732def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
733 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000734
735def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
736 let Latency = 4;
737 let NumMicroOps = 2;
738 let ResourceCycles = [1,1];
739}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000740def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
741 "(V?)CVTSD2SIrr",
742 "(V?)CVTSS2SI64rr",
743 "(V?)CVTSS2SIrr",
744 "(V?)CVTTSD2SI64rr",
745 "(V?)CVTTSD2SIrr",
746 "(V?)CVTTSS2SI64rr",
747 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000748
749def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
750 let Latency = 4;
751 let NumMicroOps = 2;
752 let ResourceCycles = [1,1];
753}
Craig Topper5a69a002018-03-21 06:28:42 +0000754def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
755 "VPSLLDYrr",
756 "VPSLLQYrr",
757 "VPSLLWYrr",
758 "VPSRADYrr",
759 "VPSRAWYrr",
760 "VPSRLDYrr",
761 "VPSRLQYrr",
762 "VPSRLWYrr",
763 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000764
765def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
766 let Latency = 4;
767 let NumMicroOps = 2;
768 let ResourceCycles = [1,1];
769}
770def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
771
772def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
773 let Latency = 4;
774 let NumMicroOps = 2;
775 let ResourceCycles = [1,1];
776}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000777def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000778def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000779 "MMX_CVTPI2PDirr",
780 "MMX_CVTPS2PIirr",
781 "MMX_CVTTPD2PIirr",
782 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000783 "(V?)CVTDQ2PDrr",
784 "(V?)CVTPD2DQrr",
785 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000786 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000787 "(V?)CVTSD2SSrr",
788 "(V?)CVTSI642SDrr",
789 "(V?)CVTSI2SDrr",
790 "(V?)CVTSI2SSrr",
791 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000792
793def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
794 let Latency = 4;
795 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000796 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000797}
Craig Topper5a69a002018-03-21 06:28:42 +0000798def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000799
800def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
801 let Latency = 4;
802 let NumMicroOps = 3;
803 let ResourceCycles = [1,1,1];
804}
805def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
806
807def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
808 let Latency = 4;
809 let NumMicroOps = 3;
810 let ResourceCycles = [1,1,1];
811}
Craig Topper5a69a002018-03-21 06:28:42 +0000812def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
813 "ISTT_FP32m",
814 "ISTT_FP64m",
815 "IST_F16m",
816 "IST_F32m",
817 "IST_FP16m",
818 "IST_FP32m",
819 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000820 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000821
822def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
823 let Latency = 4;
824 let NumMicroOps = 4;
825 let ResourceCycles = [4];
826}
827def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
828
829def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
830 let Latency = 4;
831 let NumMicroOps = 4;
832 let ResourceCycles = [1,3];
833}
834def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
835
836def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
837 let Latency = 5;
838 let NumMicroOps = 1;
839 let ResourceCycles = [1];
840}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000841def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000842
Gadi Haber323f2e12017-10-24 20:19:47 +0000843def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
844 let Latency = 5;
845 let NumMicroOps = 1;
846 let ResourceCycles = [1];
847}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000848def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000849 "MOVSX(16|32|64)rm32",
850 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000851 "MOVZX(16|32|64)rm16",
852 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000853 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000854 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000855 "(V?)MOVSHDUPrm",
856 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000857 "VPBROADCASTDrm",
858 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000859
860def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
861 let Latency = 5;
862 let NumMicroOps = 3;
863 let ResourceCycles = [1,2];
864}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000865def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000866
867def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
868 let Latency = 5;
869 let NumMicroOps = 3;
870 let ResourceCycles = [1,1,1];
871}
872def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
873
874def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000875 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000876 let NumMicroOps = 3;
877 let ResourceCycles = [1,1,1];
878}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000879def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000880
881def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
882 let Latency = 5;
883 let NumMicroOps = 4;
884 let ResourceCycles = [1,1,1,1];
885}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000886def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
887 "VMASKMOVPS(Y?)mr",
888 "VPMASKMOVD(Y?)mr",
889 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000890
891def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
892 let Latency = 5;
893 let NumMicroOps = 5;
894 let ResourceCycles = [1,4];
895}
896def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
897
898def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
899 let Latency = 5;
900 let NumMicroOps = 5;
901 let ResourceCycles = [1,4];
902}
903def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
904
905def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
906 let Latency = 5;
907 let NumMicroOps = 5;
908 let ResourceCycles = [2,3];
909}
Craig Topper5a69a002018-03-21 06:28:42 +0000910def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000911
912def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
913 let Latency = 5;
914 let NumMicroOps = 6;
915 let ResourceCycles = [1,1,4];
916}
Craig Topper5a69a002018-03-21 06:28:42 +0000917def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000918
919def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
920 let Latency = 6;
921 let NumMicroOps = 1;
922 let ResourceCycles = [1];
923}
Craig Topper5a69a002018-03-21 06:28:42 +0000924def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
925 "LD_F64m",
926 "LD_F80m",
927 "VBROADCASTF128",
928 "VBROADCASTI128",
929 "VBROADCASTSDYrm",
930 "VBROADCASTSSYrm",
931 "VLDDQUYrm",
932 "VMOVAPDYrm",
933 "VMOVAPSYrm",
934 "VMOVDDUPYrm",
935 "VMOVDQAYrm",
936 "VMOVDQUYrm",
937 "VMOVNTDQAYrm",
938 "VMOVSHDUPYrm",
939 "VMOVSLDUPYrm",
940 "VMOVUPDYrm",
941 "VMOVUPSYrm",
942 "VPBROADCASTDYrm",
943 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000944 "(V?)ROUNDPD(Y?)r",
945 "(V?)ROUNDPS(Y?)r",
946 "(V?)ROUNDSDr",
947 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000948
949def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
950 let Latency = 6;
951 let NumMicroOps = 2;
952 let ResourceCycles = [1,1];
953}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000954def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000955 "MMX_PSLLQrm",
956 "MMX_PSLLWrm",
957 "MMX_PSRADrm",
958 "MMX_PSRAWrm",
959 "MMX_PSRLDrm",
960 "MMX_PSRLQrm",
961 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000962 "VCVTPH2PS(Y?)rm",
963 "(V?)CVTPS2PDrm",
964 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000965 "VPSLLVQrm",
966 "VPSRLVQrm",
967 "VTESTPDrm",
968 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000969
970def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
971 let Latency = 6;
972 let NumMicroOps = 2;
973 let ResourceCycles = [1,1];
974}
Craig Topper5a69a002018-03-21 06:28:42 +0000975def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
976 "VCVTPD2DQYrr",
977 "VCVTPD2PSYrr",
978 "VCVTPS2PHYrr",
979 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000980
981def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
982 let Latency = 6;
983 let NumMicroOps = 2;
984 let ResourceCycles = [1,1];
985}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000986def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +0000987 "MMX_PINSRWrm",
988 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000989 "MMX_PUNPCKHBWirm",
990 "MMX_PUNPCKHDQirm",
991 "MMX_PUNPCKHWDirm",
992 "MMX_PUNPCKLBWirm",
993 "MMX_PUNPCKLDQirm",
994 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000995 "(V?)INSERTPSrm",
996 "(V?)MOVHPDrm",
997 "(V?)MOVHPSrm",
998 "(V?)MOVLPDrm",
999 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001000 "(V?)PACKSSDWrm",
1001 "(V?)PACKSSWBrm",
1002 "(V?)PACKUSDWrm",
1003 "(V?)PACKUSWBrm",
1004 "(V?)PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001005 "VPERMILPDmi",
1006 "VPERMILPDrm",
1007 "VPERMILPSmi",
1008 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001009 "(V?)PINSRBrm",
1010 "(V?)PINSRDrm",
1011 "(V?)PINSRQrm",
1012 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001013 "(V?)PSHUFBrm",
1014 "(V?)PSHUFDmi",
1015 "(V?)PSHUFHWmi",
1016 "(V?)PSHUFLWmi",
1017 "(V?)PUNPCKHBWrm",
1018 "(V?)PUNPCKHDQrm",
1019 "(V?)PUNPCKHQDQrm",
1020 "(V?)PUNPCKHWDrm",
1021 "(V?)PUNPCKLBWrm",
1022 "(V?)PUNPCKLDQrm",
1023 "(V?)PUNPCKLQDQrm",
1024 "(V?)PUNPCKLWDrm",
1025 "(V?)SHUFPDrmi",
1026 "(V?)SHUFPSrmi",
1027 "(V?)UNPCKHPDrm",
1028 "(V?)UNPCKHPSrm",
1029 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001030 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001031
1032def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1033 let Latency = 6;
1034 let NumMicroOps = 2;
1035 let ResourceCycles = [1,1];
1036}
Craig Topper5a69a002018-03-21 06:28:42 +00001037def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1038 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001039
1040def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1041 let Latency = 6;
1042 let NumMicroOps = 2;
1043 let ResourceCycles = [1,1];
1044}
Craig Topperdfccafe2018-04-18 06:41:25 +00001045def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001046def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1047 ADCX32rm, ADCX64rm,
1048 ADOX32rm, ADOX64rm,
1049 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001050
1051def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1052 let Latency = 6;
1053 let NumMicroOps = 2;
1054 let ResourceCycles = [1,1];
1055}
Craig Topper5a69a002018-03-21 06:28:42 +00001056def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1057 "BLSI(32|64)rm",
1058 "BLSMSK(32|64)rm",
1059 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001060 "MMX_PADD(B|D|Q|W)irm",
1061 "MMX_PADDS(B|W)irm",
1062 "MMX_PADDUS(B|W)irm",
1063 "MMX_PAVG(B|W)irm",
1064 "MMX_PCMPEQ(B|D|W)irm",
1065 "MMX_PCMPGT(B|D|W)irm",
1066 "MMX_P(MAX|MIN)SWirm",
1067 "MMX_P(MAX|MIN)UBirm",
1068 "MMX_PSIGN(B|D|W)rm",
1069 "MMX_PSUB(B|D|Q|W)irm",
1070 "MMX_PSUBS(B|W)irm",
1071 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001072 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001073 "(V?)PABSBrm",
1074 "(V?)PABSDrm",
1075 "(V?)PABSWrm",
1076 "(V?)PADDBrm",
1077 "(V?)PADDDrm",
1078 "(V?)PADDQrm",
1079 "(V?)PADDSBrm",
1080 "(V?)PADDSWrm",
1081 "(V?)PADDUSBrm",
1082 "(V?)PADDUSWrm",
1083 "(V?)PADDWrm",
1084 "(V?)PAVGBrm",
1085 "(V?)PAVGWrm",
1086 "(V?)PCMPEQBrm",
1087 "(V?)PCMPEQDrm",
1088 "(V?)PCMPEQQrm",
1089 "(V?)PCMPEQWrm",
1090 "(V?)PCMPGTBrm",
1091 "(V?)PCMPGTDrm",
1092 "(V?)PCMPGTWrm",
1093 "(V?)PMAXSBrm",
1094 "(V?)PMAXSDrm",
1095 "(V?)PMAXSWrm",
1096 "(V?)PMAXUBrm",
1097 "(V?)PMAXUDrm",
1098 "(V?)PMAXUWrm",
1099 "(V?)PMINSBrm",
1100 "(V?)PMINSDrm",
1101 "(V?)PMINSWrm",
1102 "(V?)PMINUBrm",
1103 "(V?)PMINUDrm",
1104 "(V?)PMINUWrm",
1105 "(V?)PSIGNBrm",
1106 "(V?)PSIGNDrm",
1107 "(V?)PSIGNWrm",
1108 "(V?)PSUBBrm",
1109 "(V?)PSUBDrm",
1110 "(V?)PSUBQrm",
1111 "(V?)PSUBSBrm",
1112 "(V?)PSUBSWrm",
1113 "(V?)PSUBUSBrm",
1114 "(V?)PSUBUSWrm",
1115 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001116
1117def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1118 let Latency = 6;
1119 let NumMicroOps = 2;
1120 let ResourceCycles = [1,1];
1121}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001122def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001123 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001124 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001125
1126def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1127 let Latency = 6;
1128 let NumMicroOps = 2;
1129 let ResourceCycles = [1,1];
1130}
Craig Topper2d451e72018-03-18 08:38:06 +00001131def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001132def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001133
1134def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1135 let Latency = 6;
1136 let NumMicroOps = 4;
1137 let ResourceCycles = [1,1,2];
1138}
Craig Topper5a69a002018-03-21 06:28:42 +00001139def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1140 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001141
1142def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1143 let Latency = 6;
1144 let NumMicroOps = 4;
1145 let ResourceCycles = [1,1,1,1];
1146}
1147def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1148
1149def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1150 let Latency = 6;
1151 let NumMicroOps = 4;
1152 let ResourceCycles = [1,1,1,1];
1153}
Craig Topper5a69a002018-03-21 06:28:42 +00001154def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1155 "BTR(16|32|64)mi8",
1156 "BTS(16|32|64)mi8",
1157 "SAR(8|16|32|64)m1",
1158 "SAR(8|16|32|64)mi",
1159 "SHL(8|16|32|64)m1",
1160 "SHL(8|16|32|64)mi",
1161 "SHR(8|16|32|64)m1",
1162 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001163
1164def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1165 let Latency = 6;
1166 let NumMicroOps = 4;
1167 let ResourceCycles = [1,1,1,1];
1168}
Craig Topperf0d04262018-04-06 16:16:48 +00001169def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1170 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001171
1172def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1173 let Latency = 6;
1174 let NumMicroOps = 6;
1175 let ResourceCycles = [1,5];
1176}
1177def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1178
Gadi Haber323f2e12017-10-24 20:19:47 +00001179def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1180 let Latency = 7;
1181 let NumMicroOps = 2;
1182 let ResourceCycles = [1,1];
1183}
Craig Topper5a69a002018-03-21 06:28:42 +00001184def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1185 "VPSLLQYrm",
1186 "VPSLLVQYrm",
1187 "VPSLLWYrm",
1188 "VPSRADYrm",
1189 "VPSRAWYrm",
1190 "VPSRLDYrm",
1191 "VPSRLQYrm",
1192 "VPSRLVQYrm",
1193 "VPSRLWYrm",
1194 "VTESTPDYrm",
1195 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001196
1197def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1198 let Latency = 7;
1199 let NumMicroOps = 2;
1200 let ResourceCycles = [1,1];
1201}
Craig Topper5a69a002018-03-21 06:28:42 +00001202def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1203 "FCOM64m",
1204 "FCOMP32m",
1205 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001206
1207def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1208 let Latency = 7;
1209 let NumMicroOps = 2;
1210 let ResourceCycles = [1,1];
1211}
Craig Topper5a69a002018-03-21 06:28:42 +00001212def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1213 "VANDNPSYrm",
1214 "VANDPDYrm",
1215 "VANDPSYrm",
1216 "VORPDYrm",
1217 "VORPSYrm",
1218 "VPACKSSDWYrm",
1219 "VPACKSSWBYrm",
1220 "VPACKUSDWYrm",
1221 "VPACKUSWBYrm",
1222 "VPALIGNRYrmi",
1223 "VPBLENDWYrmi",
1224 "VPERMILPDYmi",
1225 "VPERMILPDYrm",
1226 "VPERMILPSYmi",
1227 "VPERMILPSYrm",
1228 "VPSHUFBYrm",
1229 "VPSHUFDYmi",
1230 "VPSHUFHWYmi",
1231 "VPSHUFLWYmi",
1232 "VPUNPCKHBWYrm",
1233 "VPUNPCKHDQYrm",
1234 "VPUNPCKHQDQYrm",
1235 "VPUNPCKHWDYrm",
1236 "VPUNPCKLBWYrm",
1237 "VPUNPCKLDQYrm",
1238 "VPUNPCKLQDQYrm",
1239 "VPUNPCKLWDYrm",
1240 "VSHUFPDYrmi",
1241 "VSHUFPSYrmi",
1242 "VUNPCKHPDYrm",
1243 "VUNPCKHPSYrm",
1244 "VUNPCKLPDYrm",
1245 "VUNPCKLPSYrm",
1246 "VXORPDYrm",
1247 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001248
1249def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1250 let Latency = 7;
1251 let NumMicroOps = 2;
1252 let ResourceCycles = [1,1];
1253}
Craig Topper5a69a002018-03-21 06:28:42 +00001254def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1255 "VPABSDYrm",
1256 "VPABSWYrm",
1257 "VPADDBYrm",
1258 "VPADDDYrm",
1259 "VPADDQYrm",
1260 "VPADDSBYrm",
1261 "VPADDSWYrm",
1262 "VPADDUSBYrm",
1263 "VPADDUSWYrm",
1264 "VPADDWYrm",
1265 "VPAVGBYrm",
1266 "VPAVGWYrm",
1267 "VPCMPEQBYrm",
1268 "VPCMPEQDYrm",
1269 "VPCMPEQQYrm",
1270 "VPCMPEQWYrm",
1271 "VPCMPGTBYrm",
1272 "VPCMPGTDYrm",
1273 "VPCMPGTWYrm",
1274 "VPMAXSBYrm",
1275 "VPMAXSDYrm",
1276 "VPMAXSWYrm",
1277 "VPMAXUBYrm",
1278 "VPMAXUDYrm",
1279 "VPMAXUWYrm",
1280 "VPMINSBYrm",
1281 "VPMINSDYrm",
1282 "VPMINSWYrm",
1283 "VPMINUBYrm",
1284 "VPMINUDYrm",
1285 "VPMINUWYrm",
1286 "VPSIGNBYrm",
1287 "VPSIGNDYrm",
1288 "VPSIGNWYrm",
1289 "VPSUBBYrm",
1290 "VPSUBDYrm",
1291 "VPSUBQYrm",
1292 "VPSUBSBYrm",
1293 "VPSUBSWYrm",
1294 "VPSUBUSBYrm",
1295 "VPSUBUSWYrm",
1296 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001297
1298def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1299 let Latency = 7;
1300 let NumMicroOps = 2;
1301 let ResourceCycles = [1,1];
1302}
Craig Topper5a69a002018-03-21 06:28:42 +00001303def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1304 "VBLENDPSYrmi",
1305 "VPANDNYrm",
1306 "VPANDYrm",
1307 "VPBLENDDYrmi",
1308 "VPORYrm",
1309 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001310
Gadi Haber323f2e12017-10-24 20:19:47 +00001311def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1312 let Latency = 7;
1313 let NumMicroOps = 3;
1314 let ResourceCycles = [2,1];
1315}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001316def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001317 "MMX_PACKSSWBirm",
1318 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001319 "VMASKMOVPDrm",
1320 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001321 "VPMASKMOVDrm",
1322 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001323
1324def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1325 let Latency = 7;
1326 let NumMicroOps = 3;
1327 let ResourceCycles = [1,2];
1328}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001329def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1330 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001331
1332def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1333 let Latency = 7;
1334 let NumMicroOps = 3;
1335 let ResourceCycles = [1,1,1];
1336}
Craig Topper5a69a002018-03-21 06:28:42 +00001337def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1338 "PSLLQrm",
1339 "PSLLWrm",
1340 "PSRADrm",
1341 "PSRAWrm",
1342 "PSRLDrm",
1343 "PSRLQrm",
1344 "PSRLWrm",
1345 "PTESTrm",
1346 "VPSLLDrm",
1347 "VPSLLQrm",
1348 "VPSLLWrm",
1349 "VPSRADrm",
1350 "VPSRAWrm",
1351 "VPSRLDrm",
1352 "VPSRLQrm",
1353 "VPSRLWrm",
1354 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001355
1356def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1357 let Latency = 7;
1358 let NumMicroOps = 3;
1359 let ResourceCycles = [1,1,1];
1360}
1361def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1362
Gadi Haber323f2e12017-10-24 20:19:47 +00001363def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1364 let Latency = 7;
1365 let NumMicroOps = 3;
1366 let ResourceCycles = [1,1,1];
1367}
Craig Topper5a69a002018-03-21 06:28:42 +00001368def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1369 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001370
Gadi Haber323f2e12017-10-24 20:19:47 +00001371def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1372 let Latency = 7;
1373 let NumMicroOps = 3;
1374 let ResourceCycles = [1,1,1];
1375}
Craig Topperf4cd9082018-01-19 05:47:32 +00001376def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001377
1378def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1379 let Latency = 7;
1380 let NumMicroOps = 5;
1381 let ResourceCycles = [1,1,1,2];
1382}
Craig Topper5a69a002018-03-21 06:28:42 +00001383def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1384 "ROL(8|16|32|64)mi",
1385 "ROR(8|16|32|64)m1",
1386 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001387
1388def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1389 let Latency = 7;
1390 let NumMicroOps = 5;
1391 let ResourceCycles = [1,1,1,2];
1392}
Craig Topper5a69a002018-03-21 06:28:42 +00001393def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001394
1395def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1396 let Latency = 7;
1397 let NumMicroOps = 5;
1398 let ResourceCycles = [1,1,1,1,1];
1399}
Craig Topper5a69a002018-03-21 06:28:42 +00001400def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1401 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001402
1403def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1404 let Latency = 7;
1405 let NumMicroOps = 7;
1406 let ResourceCycles = [2,2,1,2];
1407}
Craig Topper2d451e72018-03-18 08:38:06 +00001408def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001409
1410def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1411 let Latency = 8;
1412 let NumMicroOps = 2;
1413 let ResourceCycles = [1,1];
1414}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001415def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001416 "PDEP(32|64)rm",
1417 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001418 "(V?)ADDPDrm",
1419 "(V?)ADDPSrm",
1420 "(V?)ADDSDrm",
1421 "(V?)ADDSSrm",
1422 "(V?)ADDSUBPDrm",
1423 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001424 "(V?)CVTDQ2PSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001425 "(V?)SUBPDrm",
1426 "(V?)SUBPSrm",
1427 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001428 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001429
1430def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001431 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001432 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001433 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001434}
Craig Topperf846e2d2018-04-19 05:34:05 +00001435def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001436
Craig Topperf846e2d2018-04-19 05:34:05 +00001437def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1438 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001439 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001440 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001441}
Craig Topper5a69a002018-03-21 06:28:42 +00001442def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001443
Gadi Haber323f2e12017-10-24 20:19:47 +00001444def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1445 let Latency = 8;
1446 let NumMicroOps = 2;
1447 let ResourceCycles = [1,1];
1448}
Craig Topper5a69a002018-03-21 06:28:42 +00001449def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1450 "VPMOVSXBQYrm",
1451 "VPMOVSXBWYrm",
1452 "VPMOVSXDQYrm",
1453 "VPMOVSXWDYrm",
1454 "VPMOVSXWQYrm",
1455 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001456
1457def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1458 let Latency = 8;
1459 let NumMicroOps = 2;
1460 let ResourceCycles = [1,1];
1461}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001462def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1463 "(V?)MULPSrm",
1464 "(V?)MULSDrm",
1465 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001466
1467def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1468 let Latency = 8;
1469 let NumMicroOps = 3;
1470 let ResourceCycles = [2,1];
1471}
Craig Topper5a69a002018-03-21 06:28:42 +00001472def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1473 "VBLENDVPSYrm",
1474 "VMASKMOVPDYrm",
1475 "VMASKMOVPSYrm",
1476 "VPBLENDVBYrm",
1477 "VPMASKMOVDYrm",
1478 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001479
1480def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1481 let Latency = 8;
1482 let NumMicroOps = 4;
1483 let ResourceCycles = [2,1,1];
1484}
Craig Topper5a69a002018-03-21 06:28:42 +00001485def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1486 "VPSRAVDrm",
1487 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001488
Gadi Haber323f2e12017-10-24 20:19:47 +00001489def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1490 let Latency = 8;
1491 let NumMicroOps = 5;
1492 let ResourceCycles = [1,1,1,2];
1493}
Craig Topper5a69a002018-03-21 06:28:42 +00001494def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1495 "RCL(8|16|32|64)mi",
1496 "RCR(8|16|32|64)m1",
1497 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001498
1499def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1500 let Latency = 8;
1501 let NumMicroOps = 5;
1502 let ResourceCycles = [1,1,2,1];
1503}
Craig Topper13a16502018-03-19 00:56:09 +00001504def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001505
1506def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1507 let Latency = 8;
1508 let NumMicroOps = 6;
1509 let ResourceCycles = [1,1,1,3];
1510}
Craig Topper9f834812018-04-01 21:54:24 +00001511def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001512
1513def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1514 let Latency = 8;
1515 let NumMicroOps = 6;
1516 let ResourceCycles = [1,1,1,2,1];
1517}
Craig Topper9f834812018-04-01 21:54:24 +00001518def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001519 "CMPXCHG(8|16|32|64)rm",
1520 "ROL(8|16|32|64)mCL",
1521 "SAR(8|16|32|64)mCL",
1522 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001523 "SHL(8|16|32|64)mCL",
1524 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001525def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1526 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001527
1528def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1529 let Latency = 9;
1530 let NumMicroOps = 2;
1531 let ResourceCycles = [1,1];
1532}
Craig Topper5a69a002018-03-21 06:28:42 +00001533def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1534 "ADD_F64m",
1535 "ILD_F16m",
1536 "ILD_F32m",
1537 "ILD_F64m",
1538 "SUBR_F32m",
1539 "SUBR_F64m",
1540 "SUB_F32m",
1541 "SUB_F64m",
1542 "VADDPDYrm",
1543 "VADDPSYrm",
1544 "VADDSUBPDYrm",
1545 "VADDSUBPSYrm",
1546 "VCMPPDYrmi",
1547 "VCMPPSYrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001548 "VCVTPS2DQYrm",
1549 "VCVTTPS2DQYrm",
1550 "VMAX(C?)PDYrm",
1551 "VMAX(C?)PSYrm",
1552 "VMIN(C?)PDYrm",
1553 "VMIN(C?)PSYrm",
1554 "VSUBPDYrm",
1555 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001556
1557def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1558 let Latency = 9;
1559 let NumMicroOps = 2;
1560 let ResourceCycles = [1,1];
1561}
Craig Topper5a69a002018-03-21 06:28:42 +00001562def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1563 "VPERM2I128rm",
1564 "VPERMDYrm",
1565 "VPERMPDYmi",
1566 "VPERMPSYrm",
1567 "VPERMQYmi",
1568 "VPMOVZXBDYrm",
1569 "VPMOVZXBQYrm",
1570 "VPMOVZXBWYrm",
1571 "VPMOVZXDQYrm",
1572 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001573
1574def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1575 let Latency = 9;
1576 let NumMicroOps = 2;
1577 let ResourceCycles = [1,1];
1578}
Craig Topper5a69a002018-03-21 06:28:42 +00001579def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1580 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001581
1582def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1583 let Latency = 9;
1584 let NumMicroOps = 3;
1585 let ResourceCycles = [1,1,1];
1586}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001587def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001588
1589def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1590 let Latency = 9;
1591 let NumMicroOps = 3;
1592 let ResourceCycles = [1,1,1];
1593}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001594def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1595 "(V?)CVTSD2SIrm",
1596 "(V?)CVTSS2SI64rm",
1597 "(V?)CVTSS2SIrm",
1598 "(V?)CVTTSD2SI64rm",
1599 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001600 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001601 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001602
1603def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1604 let Latency = 9;
1605 let NumMicroOps = 3;
1606 let ResourceCycles = [1,1,1];
1607}
1608def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1609
1610def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1611 let Latency = 9;
1612 let NumMicroOps = 3;
1613 let ResourceCycles = [1,1,1];
1614}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001615def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001616def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001617 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001618 "CVTTPD2DQrm",
1619 "MMX_CVTPD2PIirm",
1620 "MMX_CVTPI2PDirm",
1621 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001622 "(V?)CVTDQ2PDrm",
1623 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001624
1625def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1626 let Latency = 9;
1627 let NumMicroOps = 3;
1628 let ResourceCycles = [1,1,1];
1629}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001630def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1631 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001632
1633def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1634 let Latency = 9;
1635 let NumMicroOps = 4;
1636 let ResourceCycles = [2,1,1];
1637}
Craig Topper5a69a002018-03-21 06:28:42 +00001638def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1639 "VPSRAVDYrm",
1640 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001641
1642def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1643 let Latency = 9;
1644 let NumMicroOps = 4;
1645 let ResourceCycles = [2,1,1];
1646}
Craig Topper5a69a002018-03-21 06:28:42 +00001647def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1648 "VPHADDSWYrm",
1649 "VPHADDWYrm",
1650 "VPHSUBDYrm",
1651 "VPHSUBSWYrm",
1652 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001653
1654def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1655 let Latency = 9;
1656 let NumMicroOps = 4;
1657 let ResourceCycles = [1,1,1,1];
1658}
Craig Topper5a69a002018-03-21 06:28:42 +00001659def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1660 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001661
1662def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1663 let Latency = 9;
1664 let NumMicroOps = 5;
1665 let ResourceCycles = [1,1,3];
1666}
1667def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1668
1669def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1670 let Latency = 9;
1671 let NumMicroOps = 5;
1672 let ResourceCycles = [1,2,1,1];
1673}
Craig Topper5a69a002018-03-21 06:28:42 +00001674def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1675 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001676
Gadi Haber323f2e12017-10-24 20:19:47 +00001677def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1678 let Latency = 10;
1679 let NumMicroOps = 2;
1680 let ResourceCycles = [1,1];
1681}
Craig Topper5a69a002018-03-21 06:28:42 +00001682def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1683 "MMX_PMADDWDirm",
1684 "MMX_PMULHRSWrm",
1685 "MMX_PMULHUWirm",
1686 "MMX_PMULHWirm",
1687 "MMX_PMULLWirm",
1688 "MMX_PMULUDQirm",
1689 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001690 "(V?)PCMPGTQrm",
1691 "(V?)PHMINPOSUWrm",
1692 "(V?)PMADDUBSWrm",
1693 "(V?)PMADDWDrm",
Simon Pilgrim091680b2018-04-22 18:09:50 +00001694 "(V?)PSADBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001695
1696def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1697 let Latency = 10;
1698 let NumMicroOps = 2;
1699 let ResourceCycles = [1,1];
1700}
Craig Topperf82867c2017-12-13 23:11:30 +00001701def: InstRW<[BWWriteResGroup116],
1702 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1703 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001704
1705def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1706 let Latency = 10;
1707 let NumMicroOps = 3;
1708 let ResourceCycles = [2,1];
1709}
Craig Topper5a69a002018-03-21 06:28:42 +00001710def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1711 "FICOM32m",
1712 "FICOMP16m",
1713 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001714
1715def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1716 let Latency = 10;
1717 let NumMicroOps = 3;
1718 let ResourceCycles = [1,1,1];
1719}
1720def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1721
Gadi Haber323f2e12017-10-24 20:19:47 +00001722def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1723 let Latency = 10;
1724 let NumMicroOps = 4;
1725 let ResourceCycles = [1,1,1,1];
1726}
1727def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1728
1729def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001730 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001731 let NumMicroOps = 4;
1732 let ResourceCycles = [1,1,1,1];
1733}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001734def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001735
Craig Topper8104f262018-04-02 05:33:28 +00001736def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001737 let Latency = 11;
1738 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001739 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001740}
Craig Topper8104f262018-04-02 05:33:28 +00001741def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1742
1743def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1744 let Latency = 11;
1745 let NumMicroOps = 1;
1746 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1747}
1748def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001749
1750def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1751 let Latency = 11;
1752 let NumMicroOps = 2;
1753 let ResourceCycles = [1,1];
1754}
Craig Topper5a69a002018-03-21 06:28:42 +00001755def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1756 "MUL_F64m",
1757 "VPCMPGTQYrm",
1758 "VPMADDUBSWYrm",
1759 "VPMADDWDYrm",
1760 "VPMULDQYrm",
1761 "VPMULHRSWYrm",
1762 "VPMULHUWYrm",
1763 "VPMULHWYrm",
1764 "VPMULLWYrm",
1765 "VPMULUDQYrm",
1766 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001767
1768def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1769 let Latency = 11;
1770 let NumMicroOps = 2;
1771 let ResourceCycles = [1,1];
1772}
Craig Topperf82867c2017-12-13 23:11:30 +00001773def: InstRW<[BWWriteResGroup124],
1774 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001775
Gadi Haber323f2e12017-10-24 20:19:47 +00001776def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1777 let Latency = 11;
1778 let NumMicroOps = 3;
1779 let ResourceCycles = [2,1];
1780}
Craig Topper5a69a002018-03-21 06:28:42 +00001781def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1782 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001783
1784def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1785 let Latency = 11;
1786 let NumMicroOps = 3;
1787 let ResourceCycles = [2,1];
1788}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001789def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1790 "(V?)ROUNDPSm",
1791 "(V?)ROUNDSDm",
1792 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001793
1794def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1795 let Latency = 11;
1796 let NumMicroOps = 3;
1797 let ResourceCycles = [1,1,1];
1798}
1799def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1800
1801def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1802 let Latency = 11;
1803 let NumMicroOps = 4;
1804 let ResourceCycles = [1,2,1];
1805}
Craig Topper5a69a002018-03-21 06:28:42 +00001806def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1807 "VHADDPSYrm",
1808 "VHSUBPDYrm",
1809 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001810
1811def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1812 let Latency = 11;
1813 let NumMicroOps = 6;
1814 let ResourceCycles = [1,1,1,1,2];
1815}
Craig Topper5a69a002018-03-21 06:28:42 +00001816def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1817 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001818
1819def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1820 let Latency = 11;
1821 let NumMicroOps = 7;
1822 let ResourceCycles = [2,2,3];
1823}
Craig Topper5a69a002018-03-21 06:28:42 +00001824def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1825 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001826
1827def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1828 let Latency = 11;
1829 let NumMicroOps = 9;
1830 let ResourceCycles = [1,4,1,3];
1831}
1832def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1833
1834def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1835 let Latency = 11;
1836 let NumMicroOps = 11;
1837 let ResourceCycles = [2,9];
1838}
Craig Topper2d451e72018-03-18 08:38:06 +00001839def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1840def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001841
Gadi Haber323f2e12017-10-24 20:19:47 +00001842def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1843 let Latency = 12;
1844 let NumMicroOps = 3;
1845 let ResourceCycles = [2,1];
1846}
Craig Topper5a69a002018-03-21 06:28:42 +00001847def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1848 "ADD_FI32m",
1849 "SUBR_FI16m",
1850 "SUBR_FI32m",
1851 "SUB_FI16m",
1852 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001853 "VROUNDPDYm",
1854 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001855
Craig Topper8104f262018-04-02 05:33:28 +00001856def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001857 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001858 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001859 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001860}
Craig Topper8104f262018-04-02 05:33:28 +00001861def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1862
1863def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1864 let Latency = 11;
1865 let NumMicroOps = 1;
1866 let ResourceCycles = [1,4];
1867}
1868def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001869
1870def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1871 let Latency = 13;
1872 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001873 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001874}
1875def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1876
Craig Topper8104f262018-04-02 05:33:28 +00001877def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001878 let Latency = 14;
1879 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001880 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001881}
Craig Topper8104f262018-04-02 05:33:28 +00001882def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1883
1884def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1885 let Latency = 14;
1886 let NumMicroOps = 1;
1887 let ResourceCycles = [1,4];
1888}
1889def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001890
Gadi Haber323f2e12017-10-24 20:19:47 +00001891def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1892 let Latency = 14;
1893 let NumMicroOps = 3;
1894 let ResourceCycles = [1,1,1];
1895}
Craig Topper5a69a002018-03-21 06:28:42 +00001896def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1897 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001898
1899def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1900 let Latency = 14;
1901 let NumMicroOps = 4;
1902 let ResourceCycles = [2,1,1];
1903}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001904def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001905
1906def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1907 let Latency = 14;
1908 let NumMicroOps = 4;
1909 let ResourceCycles = [1,1,1,1];
1910}
Craig Topper5a69a002018-03-21 06:28:42 +00001911def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001912
1913def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1914 let Latency = 14;
1915 let NumMicroOps = 8;
1916 let ResourceCycles = [2,2,1,3];
1917}
1918def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1919
1920def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1921 let Latency = 14;
1922 let NumMicroOps = 10;
1923 let ResourceCycles = [2,3,1,4];
1924}
1925def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1926
1927def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1928 let Latency = 14;
1929 let NumMicroOps = 12;
1930 let ResourceCycles = [2,1,4,5];
1931}
1932def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
1933
1934def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1935 let Latency = 15;
1936 let NumMicroOps = 1;
1937 let ResourceCycles = [1];
1938}
Craig Topper5a69a002018-03-21 06:28:42 +00001939def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1940 "DIVR_FST0r",
1941 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001942
Gadi Haber323f2e12017-10-24 20:19:47 +00001943def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1944 let Latency = 15;
1945 let NumMicroOps = 10;
1946 let ResourceCycles = [1,1,1,4,1,2];
1947}
Craig Topper13a16502018-03-19 00:56:09 +00001948def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001949
Craig Topper8104f262018-04-02 05:33:28 +00001950def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001951 let Latency = 16;
1952 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001953 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001954}
Craig Topper5a69a002018-03-21 06:28:42 +00001955def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1956 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001957
1958def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1959 let Latency = 16;
1960 let NumMicroOps = 3;
1961 let ResourceCycles = [2,1];
1962}
1963def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1964
Gadi Haber323f2e12017-10-24 20:19:47 +00001965def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1966 let Latency = 16;
1967 let NumMicroOps = 14;
1968 let ResourceCycles = [1,1,1,4,2,5];
1969}
1970def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1971
1972def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1973 let Latency = 16;
1974 let NumMicroOps = 16;
1975 let ResourceCycles = [16];
1976}
Craig Topper5a69a002018-03-21 06:28:42 +00001977def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001978
Craig Topper8104f262018-04-02 05:33:28 +00001979def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001980 let Latency = 17;
1981 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001982 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001983}
1984def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1985
1986def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1987 let Latency = 17;
1988 let NumMicroOps = 4;
1989 let ResourceCycles = [2,1,1];
1990}
Craig Topper5a69a002018-03-21 06:28:42 +00001991def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
1992 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001993
Craig Topper8104f262018-04-02 05:33:28 +00001994def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001995 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001996 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001997 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001998}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001999def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2000 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002001
Gadi Haber323f2e12017-10-24 20:19:47 +00002002def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2003 let Latency = 18;
2004 let NumMicroOps = 8;
2005 let ResourceCycles = [1,1,1,5];
2006}
Craig Topper5a69a002018-03-21 06:28:42 +00002007def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002008def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002009
2010def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2011 let Latency = 18;
2012 let NumMicroOps = 11;
2013 let ResourceCycles = [2,1,1,3,1,3];
2014}
Craig Topper13a16502018-03-19 00:56:09 +00002015def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002016
Craig Topper8104f262018-04-02 05:33:28 +00002017def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002018 let Latency = 19;
2019 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002020 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002021}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002022def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002023 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002024
Gadi Haber323f2e12017-10-24 20:19:47 +00002025def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2026 let Latency = 19;
2027 let NumMicroOps = 5;
2028 let ResourceCycles = [2,1,1,1];
2029}
Craig Topper5a69a002018-03-21 06:28:42 +00002030def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002031
Gadi Haber323f2e12017-10-24 20:19:47 +00002032def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2033 let Latency = 20;
2034 let NumMicroOps = 1;
2035 let ResourceCycles = [1];
2036}
Craig Topper5a69a002018-03-21 06:28:42 +00002037def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2038 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002039 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002040
2041def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2042 let Latency = 20;
2043 let NumMicroOps = 5;
2044 let ResourceCycles = [2,1,1,1];
2045}
2046def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2047
2048def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2049 let Latency = 20;
2050 let NumMicroOps = 8;
2051 let ResourceCycles = [1,1,1,1,1,1,2];
2052}
Craig Topper5a69a002018-03-21 06:28:42 +00002053def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2054 "INSL",
2055 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002056
Craig Topper8104f262018-04-02 05:33:28 +00002057def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002058 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002059 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002060 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002061}
Craig Topper8104f262018-04-02 05:33:28 +00002062def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2063
2064def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2065 let Latency = 16;
2066 let NumMicroOps = 1;
2067 let ResourceCycles = [1,8];
2068}
2069def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002070
2071def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2072 let Latency = 21;
2073 let NumMicroOps = 2;
2074 let ResourceCycles = [1,1];
2075}
Craig Topper5a69a002018-03-21 06:28:42 +00002076def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2077 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002078
Craig Topper8104f262018-04-02 05:33:28 +00002079def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002080 let Latency = 21;
2081 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002082 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002083}
2084def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2085
2086def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2087 let Latency = 21;
2088 let NumMicroOps = 19;
2089 let ResourceCycles = [2,1,4,1,1,4,6];
2090}
2091def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2092
2093def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2094 let Latency = 22;
2095 let NumMicroOps = 18;
2096 let ResourceCycles = [1,1,16];
2097}
2098def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2099
Craig Topper8104f262018-04-02 05:33:28 +00002100def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002101 let Latency = 23;
2102 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002103 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002104}
2105def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2106
Craig Topper8104f262018-04-02 05:33:28 +00002107def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002108 let Latency = 23;
2109 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002110 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002111}
2112def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2113
Gadi Haber323f2e12017-10-24 20:19:47 +00002114def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2115 let Latency = 23;
2116 let NumMicroOps = 19;
2117 let ResourceCycles = [3,1,15];
2118}
Craig Topper391c6f92017-12-10 01:24:08 +00002119def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002120
2121def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2122 let Latency = 24;
2123 let NumMicroOps = 3;
2124 let ResourceCycles = [1,1,1];
2125}
Craig Topper5a69a002018-03-21 06:28:42 +00002126def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2127 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002128
Craig Topper8104f262018-04-02 05:33:28 +00002129def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002130 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002131 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002132 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002133}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002134def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2135 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002136
2137def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2138 let Latency = 26;
2139 let NumMicroOps = 2;
2140 let ResourceCycles = [1,1];
2141}
Craig Topper5a69a002018-03-21 06:28:42 +00002142def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002143 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002144
Craig Topper8104f262018-04-02 05:33:28 +00002145def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002146 let Latency = 27;
2147 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002148 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002149}
2150def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2151
2152def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2153 let Latency = 29;
2154 let NumMicroOps = 3;
2155 let ResourceCycles = [1,1,1];
2156}
Craig Topper5a69a002018-03-21 06:28:42 +00002157def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2158 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002159
Craig Topper8104f262018-04-02 05:33:28 +00002160def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002161 let Latency = 29;
2162 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002163 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002164}
2165def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2166
2167def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2168 let Latency = 22;
2169 let NumMicroOps = 7;
2170 let ResourceCycles = [1,3,2,1];
2171}
Craig Topper17a31182017-12-16 18:35:29 +00002172def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002173
2174def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2175 let Latency = 23;
2176 let NumMicroOps = 9;
2177 let ResourceCycles = [1,3,4,1];
2178}
Craig Topper17a31182017-12-16 18:35:29 +00002179def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002180
2181def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2182 let Latency = 24;
2183 let NumMicroOps = 9;
2184 let ResourceCycles = [1,5,2,1];
2185}
Craig Topper17a31182017-12-16 18:35:29 +00002186def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002187
2188def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2189 let Latency = 25;
2190 let NumMicroOps = 7;
2191 let ResourceCycles = [1,3,2,1];
2192}
Craig Topper17a31182017-12-16 18:35:29 +00002193def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2194 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002195
2196def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2197 let Latency = 26;
2198 let NumMicroOps = 9;
2199 let ResourceCycles = [1,5,2,1];
2200}
Craig Topper17a31182017-12-16 18:35:29 +00002201def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002202
2203def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2204 let Latency = 26;
2205 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002206 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002207}
Craig Topper17a31182017-12-16 18:35:29 +00002208def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002209
2210def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2211 let Latency = 27;
2212 let NumMicroOps = 9;
2213 let ResourceCycles = [1,5,2,1];
2214}
Craig Topper17a31182017-12-16 18:35:29 +00002215def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002216
Gadi Haber323f2e12017-10-24 20:19:47 +00002217def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2218 let Latency = 29;
2219 let NumMicroOps = 27;
2220 let ResourceCycles = [1,5,1,1,19];
2221}
2222def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2223
2224def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2225 let Latency = 30;
2226 let NumMicroOps = 28;
2227 let ResourceCycles = [1,6,1,1,19];
2228}
Craig Topper2d451e72018-03-18 08:38:06 +00002229def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002230
2231def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2232 let Latency = 31;
2233 let NumMicroOps = 31;
2234 let ResourceCycles = [8,1,21,1];
2235}
2236def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2237
Craig Topper8104f262018-04-02 05:33:28 +00002238def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2239 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002240 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002241 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002242}
2243def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2244
2245def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2246 let Latency = 34;
2247 let NumMicroOps = 8;
2248 let ResourceCycles = [2,2,2,1,1];
2249}
Craig Topper13a16502018-03-19 00:56:09 +00002250def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002251
2252def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2253 let Latency = 34;
2254 let NumMicroOps = 23;
2255 let ResourceCycles = [1,5,3,4,10];
2256}
Craig Topper5a69a002018-03-21 06:28:42 +00002257def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2258 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002259
2260def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2261 let Latency = 35;
2262 let NumMicroOps = 8;
2263 let ResourceCycles = [2,2,2,1,1];
2264}
Craig Topper13a16502018-03-19 00:56:09 +00002265def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002266
2267def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2268 let Latency = 35;
2269 let NumMicroOps = 23;
2270 let ResourceCycles = [1,5,2,1,4,10];
2271}
Craig Topper5a69a002018-03-21 06:28:42 +00002272def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2273 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002274
Craig Topper8104f262018-04-02 05:33:28 +00002275def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2276 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002277 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002278 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002279}
2280def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2281
2282def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2283 let Latency = 42;
2284 let NumMicroOps = 22;
2285 let ResourceCycles = [2,20];
2286}
Craig Topper2d451e72018-03-18 08:38:06 +00002287def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002288
2289def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2290 let Latency = 60;
2291 let NumMicroOps = 64;
2292 let ResourceCycles = [2,2,8,1,10,2,39];
2293}
2294def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002295
2296def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2297 let Latency = 63;
2298 let NumMicroOps = 88;
2299 let ResourceCycles = [4,4,31,1,2,1,45];
2300}
Craig Topper2d451e72018-03-18 08:38:06 +00002301def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002302
2303def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2304 let Latency = 63;
2305 let NumMicroOps = 90;
2306 let ResourceCycles = [4,2,33,1,2,1,47];
2307}
Craig Topper2d451e72018-03-18 08:38:06 +00002308def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002309
2310def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2311 let Latency = 75;
2312 let NumMicroOps = 15;
2313 let ResourceCycles = [6,3,6];
2314}
2315def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2316
2317def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2318 let Latency = 80;
2319 let NumMicroOps = 32;
2320 let ResourceCycles = [7,7,3,3,1,11];
2321}
2322def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2323
2324def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2325 let Latency = 115;
2326 let NumMicroOps = 100;
2327 let ResourceCycles = [9,9,11,8,1,11,21,30];
2328}
2329def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002330
2331} // SchedModel
2332