blob: 45d055ec4eab2fc46cafc0b20961a811f54182eb [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 Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : BWWriteResPair<WriteBlend, [BWPort15], 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 Pilgrim30c38c32018-03-19 14:46:07 +0000317defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
318defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Remaining instrs.
321
322def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
323 let Latency = 1;
324 let NumMicroOps = 1;
325 let ResourceCycles = [1];
326}
Craig Topper5a69a002018-03-21 06:28:42 +0000327def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
328 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000329 "(V?)MOVPDI2DIrr",
330 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000331 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000332 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000333 "VTESTPD(Y?)rr",
334 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000335
336def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
337 let Latency = 1;
338 let NumMicroOps = 1;
339 let ResourceCycles = [1];
340}
Craig Topper5a69a002018-03-21 06:28:42 +0000341def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
342 "COM_FST0r",
343 "UCOM_FPr",
344 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000345
346def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
347 let Latency = 1;
348 let NumMicroOps = 1;
349 let ResourceCycles = [1];
350}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000351def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000352 "MMX_MOVD64to64rr",
353 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000354 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000355 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000356 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000357 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000358 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000359
360def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
361 let Latency = 1;
362 let NumMicroOps = 1;
363 let ResourceCycles = [1];
364}
365def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
366
367def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Craig Topper5a69a002018-03-21 06:28:42 +0000372def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
373 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000374
375def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
376 let Latency = 1;
377 let NumMicroOps = 1;
378 let ResourceCycles = [1];
379}
Craig Topperfbe31322018-04-05 21:56:19 +0000380def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000381def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
382 "ADC(16|32|64)i",
383 "ADC(8|16|32|64)rr",
384 "ADCX(32|64)rr",
385 "ADOX(32|64)rr",
386 "BT(16|32|64)ri8",
387 "BT(16|32|64)rr",
388 "BTC(16|32|64)ri8",
389 "BTC(16|32|64)rr",
390 "BTR(16|32|64)ri8",
391 "BTR(16|32|64)rr",
392 "BTS(16|32|64)ri8",
393 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000394 "SBB(16|32|64)ri",
395 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000396 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000397
398def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
399 let Latency = 1;
400 let NumMicroOps = 1;
401 let ResourceCycles = [1];
402}
Craig Topper5a69a002018-03-21 06:28:42 +0000403def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
404 "BLSI(32|64)rr",
405 "BLSMSK(32|64)rr",
406 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000407 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000408
409def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
410 let Latency = 1;
411 let NumMicroOps = 1;
412 let ResourceCycles = [1];
413}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000414def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000415 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000416
417def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
418 let Latency = 1;
419 let NumMicroOps = 1;
420 let ResourceCycles = [1];
421}
Craig Topperdfccafe2018-04-18 06:41:25 +0000422def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000423 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000424 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000425 "SGDT64m",
426 "SIDT64m",
427 "SLDT64m",
428 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000429 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000430 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000431
432def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
433 let Latency = 1;
434 let NumMicroOps = 2;
435 let ResourceCycles = [1,1];
436}
Craig Topper5a69a002018-03-21 06:28:42 +0000437def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
438 "MMX_MOVD64from64rm",
439 "MMX_MOVD64mr",
440 "MMX_MOVNTQmr",
441 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000442 "MOVNTI_64mr",
443 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000444 "ST_FP32m",
445 "ST_FP64m",
446 "ST_FP80m",
447 "VEXTRACTF128mr",
448 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000449 "(V?)MOVAPD(Y?)mr",
450 "(V?)MOVAPS(Y?)mr",
451 "(V?)MOVDQA(Y?)mr",
452 "(V?)MOVDQU(Y?)mr",
453 "(V?)MOVHPDmr",
454 "(V?)MOVHPSmr",
455 "(V?)MOVLPDmr",
456 "(V?)MOVLPSmr",
457 "(V?)MOVNTDQ(V?)mr",
458 "(V?)MOVNTPD(V?)mr",
459 "(V?)MOVNTPS(V?)mr",
460 "(V?)MOVPDI2DImr",
461 "(V?)MOVPQI2QImr",
462 "(V?)MOVPQIto64mr",
463 "(V?)MOVSDmr",
464 "(V?)MOVSSmr",
465 "(V?)MOVUPD(Y?)mr",
466 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000467
468def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
469 let Latency = 2;
470 let NumMicroOps = 2;
471 let ResourceCycles = [2];
472}
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000473def: InstRW<[BWWriteResGroup11], (instregex "MMX_PINSRWrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000474 "(V?)PINSRBrr",
475 "(V?)PINSRDrr",
476 "(V?)PINSRQrr",
477 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000478
479def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
480 let Latency = 2;
481 let NumMicroOps = 2;
482 let ResourceCycles = [2];
483}
484def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
485
486def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
487 let Latency = 2;
488 let NumMicroOps = 2;
489 let ResourceCycles = [2];
490}
Craig Topper5a69a002018-03-21 06:28:42 +0000491def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
492 "ROL(8|16|32|64)ri",
493 "ROR(8|16|32|64)r1",
494 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000495
496def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
497 let Latency = 2;
498 let NumMicroOps = 2;
499 let ResourceCycles = [2];
500}
Craig Topper5a69a002018-03-21 06:28:42 +0000501def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
502 "MFENCE",
503 "WAIT",
504 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000505
506def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
507 let Latency = 2;
508 let NumMicroOps = 2;
509 let ResourceCycles = [1,1];
510}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000511def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
512 "VCVTPH2PS(Y?)rr",
513 "(V?)CVTPS2PDrr",
514 "(V?)CVTSS2SDrr",
515 "(V?)EXTRACTPSrr",
516 "(V?)PEXTRBrr",
517 "(V?)PEXTRDrr",
518 "(V?)PEXTRQrr",
519 "(V?)PEXTRWrr",
520 "(V?)PSLLDrr",
521 "(V?)PSLLQrr",
522 "(V?)PSLLWrr",
523 "(V?)PSRADrr",
524 "(V?)PSRAWrr",
525 "(V?)PSRLDrr",
526 "(V?)PSRLQrr",
527 "(V?)PSRLWrr",
528 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000529
530def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
531 let Latency = 2;
532 let NumMicroOps = 2;
533 let ResourceCycles = [1,1];
534}
535def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
536
537def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
538 let Latency = 2;
539 let NumMicroOps = 2;
540 let ResourceCycles = [1,1];
541}
542def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
543
544def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
545 let Latency = 2;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
549def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
550
551def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
552 let Latency = 2;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
Craig Topper498875f2018-04-04 17:54:19 +0000556def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
557
558def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
559 let Latency = 1;
560 let NumMicroOps = 1;
561 let ResourceCycles = [1];
562}
563def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000564
565def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
566 let Latency = 2;
567 let NumMicroOps = 2;
568 let ResourceCycles = [1,1];
569}
Craig Topper2d451e72018-03-18 08:38:06 +0000570def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000571def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000572def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
573 "ADC8ri",
574 "CMOV(A|BE)(16|32|64)rr",
575 "SBB8i8",
576 "SBB8ri",
577 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000578
579def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
580 let Latency = 2;
581 let NumMicroOps = 3;
582 let ResourceCycles = [1,1,1];
583}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000584def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
585 "(V?)PEXTRBmr",
586 "(V?)PEXTRDmr",
587 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000588 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000589
590def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
591 let Latency = 2;
592 let NumMicroOps = 3;
593 let ResourceCycles = [1,1,1];
594}
595def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
596
Gadi Haber323f2e12017-10-24 20:19:47 +0000597def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
598 let Latency = 2;
599 let NumMicroOps = 3;
600 let ResourceCycles = [1,1,1];
601}
602def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
603
604def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
605 let Latency = 2;
606 let NumMicroOps = 3;
607 let ResourceCycles = [1,1,1];
608}
Craig Topper2d451e72018-03-18 08:38:06 +0000609def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000610def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
611 "PUSH64i8",
612 "STOSB",
613 "STOSL",
614 "STOSQ",
615 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000616
Gadi Haber323f2e12017-10-24 20:19:47 +0000617def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
618 let Latency = 3;
619 let NumMicroOps = 1;
620 let ResourceCycles = [1];
621}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000622def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000623 "PDEP(32|64)rr",
624 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000625 "SHLD(16|32|64)rri8",
626 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000627 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000628
629def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000630 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Clement Courbet327fac42018-03-07 08:14:02 +0000634def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000635
636def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
637 let Latency = 3;
638 let NumMicroOps = 1;
639 let ResourceCycles = [1];
640}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000641def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
642 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000643 "VPMOVSXBDYrr",
644 "VPMOVSXBQYrr",
645 "VPMOVSXBWYrr",
646 "VPMOVSXDQYrr",
647 "VPMOVSXWDYrr",
648 "VPMOVSXWQYrr",
649 "VPMOVZXBDYrr",
650 "VPMOVZXBQYrr",
651 "VPMOVZXBWYrr",
652 "VPMOVZXDQYrr",
653 "VPMOVZXWDYrr",
654 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000655
656def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
657 let Latency = 3;
658 let NumMicroOps = 1;
659 let ResourceCycles = [1];
660}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000661def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
662 "(V?)MULPS(Y?)rr",
663 "(V?)MULSDrr",
664 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000665
666def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000667 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000668 let NumMicroOps = 3;
669 let ResourceCycles = [3];
670}
Craig Topperb5f26592018-04-19 18:00:17 +0000671def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
672 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
673 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000674
675def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
676 let Latency = 3;
677 let NumMicroOps = 3;
678 let ResourceCycles = [2,1];
679}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000680def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
681 "VPSRAVD(Y?)rr",
682 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000683
684def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
685 let Latency = 3;
686 let NumMicroOps = 3;
687 let ResourceCycles = [2,1];
688}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000689def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000690 "(V?)PHADDD(Y?)rr",
691 "(V?)PHADDSW(Y?)rr",
692 "(V?)PHADDW(Y?)rr",
693 "(V?)PHSUBD(Y?)rr",
694 "(V?)PHSUBSW(Y?)rr",
695 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000696
697def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
698 let Latency = 3;
699 let NumMicroOps = 3;
700 let ResourceCycles = [2,1];
701}
Craig Topper5a69a002018-03-21 06:28:42 +0000702def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
703 "MMX_PACKSSWBirr",
704 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000705
706def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
707 let Latency = 3;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,2];
710}
711def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
712
713def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
714 let Latency = 3;
715 let NumMicroOps = 3;
716 let ResourceCycles = [1,2];
717}
Craig Topper5a69a002018-03-21 06:28:42 +0000718def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
719 "RCL(8|16|32|64)ri",
720 "RCR(8|16|32|64)r1",
721 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000722
723def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
724 let Latency = 3;
725 let NumMicroOps = 3;
726 let ResourceCycles = [2,1];
727}
Craig Topper5a69a002018-03-21 06:28:42 +0000728def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
729 "ROR(8|16|32|64)rCL",
730 "SAR(8|16|32|64)rCL",
731 "SHL(8|16|32|64)rCL",
732 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000733
734def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
735 let Latency = 3;
736 let NumMicroOps = 4;
737 let ResourceCycles = [1,1,1,1];
738}
739def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
740
741def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
742 let Latency = 3;
743 let NumMicroOps = 4;
744 let ResourceCycles = [1,1,1,1];
745}
Craig Topper5a69a002018-03-21 06:28:42 +0000746def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
747 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000748
749def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
750 let Latency = 4;
751 let NumMicroOps = 2;
752 let ResourceCycles = [1,1];
753}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000754def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
755 "(V?)CVTSD2SIrr",
756 "(V?)CVTSS2SI64rr",
757 "(V?)CVTSS2SIrr",
758 "(V?)CVTTSD2SI64rr",
759 "(V?)CVTTSD2SIrr",
760 "(V?)CVTTSS2SI64rr",
761 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000762
763def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
764 let Latency = 4;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
Craig Topper5a69a002018-03-21 06:28:42 +0000768def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
769 "VPSLLDYrr",
770 "VPSLLQYrr",
771 "VPSLLWYrr",
772 "VPSRADYrr",
773 "VPSRAWYrr",
774 "VPSRLDYrr",
775 "VPSRLQYrr",
776 "VPSRLWYrr",
777 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000778
779def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
780 let Latency = 4;
781 let NumMicroOps = 2;
782 let ResourceCycles = [1,1];
783}
784def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
785
786def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
787 let Latency = 4;
788 let NumMicroOps = 2;
789 let ResourceCycles = [1,1];
790}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000791def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000792def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000793 "MMX_CVTPI2PDirr",
794 "MMX_CVTPS2PIirr",
795 "MMX_CVTTPD2PIirr",
796 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000797 "(V?)CVTDQ2PDrr",
798 "(V?)CVTPD2DQrr",
799 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000800 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000801 "(V?)CVTSD2SSrr",
802 "(V?)CVTSI642SDrr",
803 "(V?)CVTSI2SDrr",
804 "(V?)CVTSI2SSrr",
805 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000806
807def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
808 let Latency = 4;
809 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000810 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000811}
Craig Topper5a69a002018-03-21 06:28:42 +0000812def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000813
814def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
815 let Latency = 4;
816 let NumMicroOps = 3;
817 let ResourceCycles = [1,1,1];
818}
819def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
820
821def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
822 let Latency = 4;
823 let NumMicroOps = 3;
824 let ResourceCycles = [1,1,1];
825}
Craig Topper5a69a002018-03-21 06:28:42 +0000826def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
827 "ISTT_FP32m",
828 "ISTT_FP64m",
829 "IST_F16m",
830 "IST_F32m",
831 "IST_FP16m",
832 "IST_FP32m",
833 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000834 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000835
836def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
837 let Latency = 4;
838 let NumMicroOps = 4;
839 let ResourceCycles = [4];
840}
841def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
842
843def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
844 let Latency = 4;
845 let NumMicroOps = 4;
846 let ResourceCycles = [1,3];
847}
848def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
849
850def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
851 let Latency = 5;
852 let NumMicroOps = 1;
853 let ResourceCycles = [1];
854}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000855def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000856
Gadi Haber323f2e12017-10-24 20:19:47 +0000857def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
858 let Latency = 5;
859 let NumMicroOps = 1;
860 let ResourceCycles = [1];
861}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000862def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000863 "MOVSX(16|32|64)rm32",
864 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000865 "MOVZX(16|32|64)rm16",
866 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000867 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000868 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000869 "(V?)MOVSHDUPrm",
870 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000871 "VPBROADCASTDrm",
872 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000873
874def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
875 let Latency = 5;
876 let NumMicroOps = 3;
877 let ResourceCycles = [1,2];
878}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000879def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
880 "(V?)HADDPD(Y?)rr",
881 "(V?)HADDPS(Y?)rr",
882 "(V?)HSUBPD(Y?)rr",
883 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000884
885def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
886 let Latency = 5;
887 let NumMicroOps = 3;
888 let ResourceCycles = [1,1,1];
889}
890def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
891
892def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000893 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000894 let NumMicroOps = 3;
895 let ResourceCycles = [1,1,1];
896}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000897def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000898
899def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
900 let Latency = 5;
901 let NumMicroOps = 4;
902 let ResourceCycles = [1,1,1,1];
903}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000904def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
905 "VMASKMOVPS(Y?)mr",
906 "VPMASKMOVD(Y?)mr",
907 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
910 let Latency = 5;
911 let NumMicroOps = 5;
912 let ResourceCycles = [1,4];
913}
914def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
915
916def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
917 let Latency = 5;
918 let NumMicroOps = 5;
919 let ResourceCycles = [1,4];
920}
921def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
922
923def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
924 let Latency = 5;
925 let NumMicroOps = 5;
926 let ResourceCycles = [2,3];
927}
Craig Topper5a69a002018-03-21 06:28:42 +0000928def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000929
930def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
931 let Latency = 5;
932 let NumMicroOps = 6;
933 let ResourceCycles = [1,1,4];
934}
Craig Topper5a69a002018-03-21 06:28:42 +0000935def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000936
937def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
938 let Latency = 6;
939 let NumMicroOps = 1;
940 let ResourceCycles = [1];
941}
Craig Topper5a69a002018-03-21 06:28:42 +0000942def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
943 "LD_F64m",
944 "LD_F80m",
945 "VBROADCASTF128",
946 "VBROADCASTI128",
947 "VBROADCASTSDYrm",
948 "VBROADCASTSSYrm",
949 "VLDDQUYrm",
950 "VMOVAPDYrm",
951 "VMOVAPSYrm",
952 "VMOVDDUPYrm",
953 "VMOVDQAYrm",
954 "VMOVDQUYrm",
955 "VMOVNTDQAYrm",
956 "VMOVSHDUPYrm",
957 "VMOVSLDUPYrm",
958 "VMOVUPDYrm",
959 "VMOVUPSYrm",
960 "VPBROADCASTDYrm",
961 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000962 "(V?)ROUNDPD(Y?)r",
963 "(V?)ROUNDPS(Y?)r",
964 "(V?)ROUNDSDr",
965 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000966
967def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
968 let Latency = 6;
969 let NumMicroOps = 2;
970 let ResourceCycles = [1,1];
971}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000972def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000973 "MMX_PSLLQrm",
974 "MMX_PSLLWrm",
975 "MMX_PSRADrm",
976 "MMX_PSRAWrm",
977 "MMX_PSRLDrm",
978 "MMX_PSRLQrm",
979 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000980 "VCVTPH2PS(Y?)rm",
981 "(V?)CVTPS2PDrm",
982 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000983 "VPSLLVQrm",
984 "VPSRLVQrm",
985 "VTESTPDrm",
986 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000987
988def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
989 let Latency = 6;
990 let NumMicroOps = 2;
991 let ResourceCycles = [1,1];
992}
Craig Topper5a69a002018-03-21 06:28:42 +0000993def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
994 "VCVTPD2DQYrr",
995 "VCVTPD2PSYrr",
996 "VCVTPS2PHYrr",
997 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000998
999def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1000 let Latency = 6;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001004def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001005 "MMX_PINSRWrm",
1006 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001007 "MMX_PUNPCKHBWirm",
1008 "MMX_PUNPCKHDQirm",
1009 "MMX_PUNPCKHWDirm",
1010 "MMX_PUNPCKLBWirm",
1011 "MMX_PUNPCKLDQirm",
1012 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001013 "(V?)INSERTPSrm",
1014 "(V?)MOVHPDrm",
1015 "(V?)MOVHPSrm",
1016 "(V?)MOVLPDrm",
1017 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001018 "(V?)PACKSSDWrm",
1019 "(V?)PACKSSWBrm",
1020 "(V?)PACKUSDWrm",
1021 "(V?)PACKUSWBrm",
1022 "(V?)PALIGNRrmi",
1023 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001024 "VPERMILPDmi",
1025 "VPERMILPDrm",
1026 "VPERMILPSmi",
1027 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001028 "(V?)PINSRBrm",
1029 "(V?)PINSRDrm",
1030 "(V?)PINSRQrm",
1031 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001032 "(V?)PSHUFBrm",
1033 "(V?)PSHUFDmi",
1034 "(V?)PSHUFHWmi",
1035 "(V?)PSHUFLWmi",
1036 "(V?)PUNPCKHBWrm",
1037 "(V?)PUNPCKHDQrm",
1038 "(V?)PUNPCKHQDQrm",
1039 "(V?)PUNPCKHWDrm",
1040 "(V?)PUNPCKLBWrm",
1041 "(V?)PUNPCKLDQrm",
1042 "(V?)PUNPCKLQDQrm",
1043 "(V?)PUNPCKLWDrm",
1044 "(V?)SHUFPDrmi",
1045 "(V?)SHUFPSrmi",
1046 "(V?)UNPCKHPDrm",
1047 "(V?)UNPCKHPSrm",
1048 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001049 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001050
1051def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1052 let Latency = 6;
1053 let NumMicroOps = 2;
1054 let ResourceCycles = [1,1];
1055}
Craig Topper5a69a002018-03-21 06:28:42 +00001056def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1057 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001058
1059def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1060 let Latency = 6;
1061 let NumMicroOps = 2;
1062 let ResourceCycles = [1,1];
1063}
Craig Topperdfccafe2018-04-18 06:41:25 +00001064def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001065def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1066 ADCX32rm, ADCX64rm,
1067 ADOX32rm, ADOX64rm,
1068 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001069
1070def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1071 let Latency = 6;
1072 let NumMicroOps = 2;
1073 let ResourceCycles = [1,1];
1074}
Craig Topper5a69a002018-03-21 06:28:42 +00001075def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1076 "BLSI(32|64)rm",
1077 "BLSMSK(32|64)rm",
1078 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001079 "MMX_PADD(B|D|Q|W)irm",
1080 "MMX_PADDS(B|W)irm",
1081 "MMX_PADDUS(B|W)irm",
1082 "MMX_PAVG(B|W)irm",
1083 "MMX_PCMPEQ(B|D|W)irm",
1084 "MMX_PCMPGT(B|D|W)irm",
1085 "MMX_P(MAX|MIN)SWirm",
1086 "MMX_P(MAX|MIN)UBirm",
1087 "MMX_PSIGN(B|D|W)rm",
1088 "MMX_PSUB(B|D|Q|W)irm",
1089 "MMX_PSUBS(B|W)irm",
1090 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001091 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001092 "(V?)PABSBrm",
1093 "(V?)PABSDrm",
1094 "(V?)PABSWrm",
1095 "(V?)PADDBrm",
1096 "(V?)PADDDrm",
1097 "(V?)PADDQrm",
1098 "(V?)PADDSBrm",
1099 "(V?)PADDSWrm",
1100 "(V?)PADDUSBrm",
1101 "(V?)PADDUSWrm",
1102 "(V?)PADDWrm",
1103 "(V?)PAVGBrm",
1104 "(V?)PAVGWrm",
1105 "(V?)PCMPEQBrm",
1106 "(V?)PCMPEQDrm",
1107 "(V?)PCMPEQQrm",
1108 "(V?)PCMPEQWrm",
1109 "(V?)PCMPGTBrm",
1110 "(V?)PCMPGTDrm",
1111 "(V?)PCMPGTWrm",
1112 "(V?)PMAXSBrm",
1113 "(V?)PMAXSDrm",
1114 "(V?)PMAXSWrm",
1115 "(V?)PMAXUBrm",
1116 "(V?)PMAXUDrm",
1117 "(V?)PMAXUWrm",
1118 "(V?)PMINSBrm",
1119 "(V?)PMINSDrm",
1120 "(V?)PMINSWrm",
1121 "(V?)PMINUBrm",
1122 "(V?)PMINUDrm",
1123 "(V?)PMINUWrm",
1124 "(V?)PSIGNBrm",
1125 "(V?)PSIGNDrm",
1126 "(V?)PSIGNWrm",
1127 "(V?)PSUBBrm",
1128 "(V?)PSUBDrm",
1129 "(V?)PSUBQrm",
1130 "(V?)PSUBSBrm",
1131 "(V?)PSUBSWrm",
1132 "(V?)PSUBUSBrm",
1133 "(V?)PSUBUSWrm",
1134 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001135
1136def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1137 let Latency = 6;
1138 let NumMicroOps = 2;
1139 let ResourceCycles = [1,1];
1140}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001141def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001142 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001143 "VINSERTF128rm",
1144 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001145 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001146
1147def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1148 let Latency = 6;
1149 let NumMicroOps = 2;
1150 let ResourceCycles = [1,1];
1151}
Craig Topper2d451e72018-03-18 08:38:06 +00001152def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001153def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001154
1155def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1156 let Latency = 6;
1157 let NumMicroOps = 4;
1158 let ResourceCycles = [1,1,2];
1159}
Craig Topper5a69a002018-03-21 06:28:42 +00001160def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1161 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001162
1163def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1164 let Latency = 6;
1165 let NumMicroOps = 4;
1166 let ResourceCycles = [1,1,1,1];
1167}
1168def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1169
1170def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1171 let Latency = 6;
1172 let NumMicroOps = 4;
1173 let ResourceCycles = [1,1,1,1];
1174}
Craig Topper5a69a002018-03-21 06:28:42 +00001175def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1176 "BTR(16|32|64)mi8",
1177 "BTS(16|32|64)mi8",
1178 "SAR(8|16|32|64)m1",
1179 "SAR(8|16|32|64)mi",
1180 "SHL(8|16|32|64)m1",
1181 "SHL(8|16|32|64)mi",
1182 "SHR(8|16|32|64)m1",
1183 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001184
1185def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1186 let Latency = 6;
1187 let NumMicroOps = 4;
1188 let ResourceCycles = [1,1,1,1];
1189}
Craig Topperf0d04262018-04-06 16:16:48 +00001190def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1191 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001192
1193def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1194 let Latency = 6;
1195 let NumMicroOps = 6;
1196 let ResourceCycles = [1,5];
1197}
1198def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1199
Gadi Haber323f2e12017-10-24 20:19:47 +00001200def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1201 let Latency = 7;
1202 let NumMicroOps = 2;
1203 let ResourceCycles = [1,1];
1204}
Craig Topper5a69a002018-03-21 06:28:42 +00001205def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1206 "VPSLLQYrm",
1207 "VPSLLVQYrm",
1208 "VPSLLWYrm",
1209 "VPSRADYrm",
1210 "VPSRAWYrm",
1211 "VPSRLDYrm",
1212 "VPSRLQYrm",
1213 "VPSRLVQYrm",
1214 "VPSRLWYrm",
1215 "VTESTPDYrm",
1216 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001217
1218def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1219 let Latency = 7;
1220 let NumMicroOps = 2;
1221 let ResourceCycles = [1,1];
1222}
Craig Topper5a69a002018-03-21 06:28:42 +00001223def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1224 "FCOM64m",
1225 "FCOMP32m",
1226 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001227
1228def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1229 let Latency = 7;
1230 let NumMicroOps = 2;
1231 let ResourceCycles = [1,1];
1232}
Craig Topper5a69a002018-03-21 06:28:42 +00001233def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1234 "VANDNPSYrm",
1235 "VANDPDYrm",
1236 "VANDPSYrm",
1237 "VORPDYrm",
1238 "VORPSYrm",
1239 "VPACKSSDWYrm",
1240 "VPACKSSWBYrm",
1241 "VPACKUSDWYrm",
1242 "VPACKUSWBYrm",
1243 "VPALIGNRYrmi",
1244 "VPBLENDWYrmi",
1245 "VPERMILPDYmi",
1246 "VPERMILPDYrm",
1247 "VPERMILPSYmi",
1248 "VPERMILPSYrm",
1249 "VPSHUFBYrm",
1250 "VPSHUFDYmi",
1251 "VPSHUFHWYmi",
1252 "VPSHUFLWYmi",
1253 "VPUNPCKHBWYrm",
1254 "VPUNPCKHDQYrm",
1255 "VPUNPCKHQDQYrm",
1256 "VPUNPCKHWDYrm",
1257 "VPUNPCKLBWYrm",
1258 "VPUNPCKLDQYrm",
1259 "VPUNPCKLQDQYrm",
1260 "VPUNPCKLWDYrm",
1261 "VSHUFPDYrmi",
1262 "VSHUFPSYrmi",
1263 "VUNPCKHPDYrm",
1264 "VUNPCKHPSYrm",
1265 "VUNPCKLPDYrm",
1266 "VUNPCKLPSYrm",
1267 "VXORPDYrm",
1268 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001269
1270def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1271 let Latency = 7;
1272 let NumMicroOps = 2;
1273 let ResourceCycles = [1,1];
1274}
Craig Topper5a69a002018-03-21 06:28:42 +00001275def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1276 "VPABSDYrm",
1277 "VPABSWYrm",
1278 "VPADDBYrm",
1279 "VPADDDYrm",
1280 "VPADDQYrm",
1281 "VPADDSBYrm",
1282 "VPADDSWYrm",
1283 "VPADDUSBYrm",
1284 "VPADDUSWYrm",
1285 "VPADDWYrm",
1286 "VPAVGBYrm",
1287 "VPAVGWYrm",
1288 "VPCMPEQBYrm",
1289 "VPCMPEQDYrm",
1290 "VPCMPEQQYrm",
1291 "VPCMPEQWYrm",
1292 "VPCMPGTBYrm",
1293 "VPCMPGTDYrm",
1294 "VPCMPGTWYrm",
1295 "VPMAXSBYrm",
1296 "VPMAXSDYrm",
1297 "VPMAXSWYrm",
1298 "VPMAXUBYrm",
1299 "VPMAXUDYrm",
1300 "VPMAXUWYrm",
1301 "VPMINSBYrm",
1302 "VPMINSDYrm",
1303 "VPMINSWYrm",
1304 "VPMINUBYrm",
1305 "VPMINUDYrm",
1306 "VPMINUWYrm",
1307 "VPSIGNBYrm",
1308 "VPSIGNDYrm",
1309 "VPSIGNWYrm",
1310 "VPSUBBYrm",
1311 "VPSUBDYrm",
1312 "VPSUBQYrm",
1313 "VPSUBSBYrm",
1314 "VPSUBSWYrm",
1315 "VPSUBUSBYrm",
1316 "VPSUBUSWYrm",
1317 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001318
1319def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1320 let Latency = 7;
1321 let NumMicroOps = 2;
1322 let ResourceCycles = [1,1];
1323}
Craig Topper5a69a002018-03-21 06:28:42 +00001324def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1325 "VBLENDPSYrmi",
1326 "VPANDNYrm",
1327 "VPANDYrm",
1328 "VPBLENDDYrmi",
1329 "VPORYrm",
1330 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001331
Gadi Haber323f2e12017-10-24 20:19:47 +00001332def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1333 let Latency = 7;
1334 let NumMicroOps = 3;
1335 let ResourceCycles = [2,1];
1336}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001337def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001338 "MMX_PACKSSWBirm",
1339 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001340 "VMASKMOVPDrm",
1341 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001342 "VPMASKMOVDrm",
1343 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001344
1345def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1346 let Latency = 7;
1347 let NumMicroOps = 3;
1348 let ResourceCycles = [1,2];
1349}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001350def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1351 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001352
1353def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1354 let Latency = 7;
1355 let NumMicroOps = 3;
1356 let ResourceCycles = [1,1,1];
1357}
Craig Topper5a69a002018-03-21 06:28:42 +00001358def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1359 "PSLLQrm",
1360 "PSLLWrm",
1361 "PSRADrm",
1362 "PSRAWrm",
1363 "PSRLDrm",
1364 "PSRLQrm",
1365 "PSRLWrm",
1366 "PTESTrm",
1367 "VPSLLDrm",
1368 "VPSLLQrm",
1369 "VPSLLWrm",
1370 "VPSRADrm",
1371 "VPSRAWrm",
1372 "VPSRLDrm",
1373 "VPSRLQrm",
1374 "VPSRLWrm",
1375 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001376
1377def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1378 let Latency = 7;
1379 let NumMicroOps = 3;
1380 let ResourceCycles = [1,1,1];
1381}
1382def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1383
Gadi Haber323f2e12017-10-24 20:19:47 +00001384def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1385 let Latency = 7;
1386 let NumMicroOps = 3;
1387 let ResourceCycles = [1,1,1];
1388}
Craig Topper5a69a002018-03-21 06:28:42 +00001389def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1390 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001391
Gadi Haber323f2e12017-10-24 20:19:47 +00001392def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1393 let Latency = 7;
1394 let NumMicroOps = 3;
1395 let ResourceCycles = [1,1,1];
1396}
Craig Topperf4cd9082018-01-19 05:47:32 +00001397def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001398
1399def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1400 let Latency = 7;
1401 let NumMicroOps = 5;
1402 let ResourceCycles = [1,1,1,2];
1403}
Craig Topper5a69a002018-03-21 06:28:42 +00001404def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1405 "ROL(8|16|32|64)mi",
1406 "ROR(8|16|32|64)m1",
1407 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001408
1409def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1410 let Latency = 7;
1411 let NumMicroOps = 5;
1412 let ResourceCycles = [1,1,1,2];
1413}
Craig Topper5a69a002018-03-21 06:28:42 +00001414def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001415
1416def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1417 let Latency = 7;
1418 let NumMicroOps = 5;
1419 let ResourceCycles = [1,1,1,1,1];
1420}
Craig Topper5a69a002018-03-21 06:28:42 +00001421def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1422 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001423
1424def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1425 let Latency = 7;
1426 let NumMicroOps = 7;
1427 let ResourceCycles = [2,2,1,2];
1428}
Craig Topper2d451e72018-03-18 08:38:06 +00001429def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001430
1431def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1432 let Latency = 8;
1433 let NumMicroOps = 2;
1434 let ResourceCycles = [1,1];
1435}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001436def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001437 "PDEP(32|64)rm",
1438 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001439 "(V?)ADDPDrm",
1440 "(V?)ADDPSrm",
1441 "(V?)ADDSDrm",
1442 "(V?)ADDSSrm",
1443 "(V?)ADDSUBPDrm",
1444 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001445 "(V?)CVTDQ2PSrm",
1446 "(V?)CVTPS2DQrm",
1447 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001448 "(V?)SUBPDrm",
1449 "(V?)SUBPSrm",
1450 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001451 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001452
1453def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001454 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001455 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001456 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001457}
Craig Topperf846e2d2018-04-19 05:34:05 +00001458def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001459
Craig Topperf846e2d2018-04-19 05:34:05 +00001460def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1461 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001462 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001463 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001464}
Craig Topper5a69a002018-03-21 06:28:42 +00001465def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001466
Gadi Haber323f2e12017-10-24 20:19:47 +00001467def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1468 let Latency = 8;
1469 let NumMicroOps = 2;
1470 let ResourceCycles = [1,1];
1471}
Craig Topper5a69a002018-03-21 06:28:42 +00001472def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1473 "VPMOVSXBQYrm",
1474 "VPMOVSXBWYrm",
1475 "VPMOVSXDQYrm",
1476 "VPMOVSXWDYrm",
1477 "VPMOVSXWQYrm",
1478 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001479
1480def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1481 let Latency = 8;
1482 let NumMicroOps = 2;
1483 let ResourceCycles = [1,1];
1484}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001485def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1486 "(V?)MULPSrm",
1487 "(V?)MULSDrm",
1488 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001489
1490def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1491 let Latency = 8;
1492 let NumMicroOps = 3;
1493 let ResourceCycles = [2,1];
1494}
Craig Topper5a69a002018-03-21 06:28:42 +00001495def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1496 "VBLENDVPSYrm",
1497 "VMASKMOVPDYrm",
1498 "VMASKMOVPSYrm",
1499 "VPBLENDVBYrm",
1500 "VPMASKMOVDYrm",
1501 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001502
1503def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1504 let Latency = 8;
1505 let NumMicroOps = 4;
1506 let ResourceCycles = [2,1,1];
1507}
Craig Topper5a69a002018-03-21 06:28:42 +00001508def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1509 "VPSRAVDrm",
1510 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001511
1512def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1513 let Latency = 8;
1514 let NumMicroOps = 4;
1515 let ResourceCycles = [2,1,1];
1516}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001517def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001518 "(V?)PHADDDrm",
1519 "(V?)PHADDSWrm",
1520 "(V?)PHADDWrm",
1521 "(V?)PHSUBDrm",
1522 "(V?)PHSUBSWrm",
1523 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001524
1525def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1526 let Latency = 8;
1527 let NumMicroOps = 5;
1528 let ResourceCycles = [1,1,1,2];
1529}
Craig Topper5a69a002018-03-21 06:28:42 +00001530def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1531 "RCL(8|16|32|64)mi",
1532 "RCR(8|16|32|64)m1",
1533 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001534
1535def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1536 let Latency = 8;
1537 let NumMicroOps = 5;
1538 let ResourceCycles = [1,1,2,1];
1539}
Craig Topper13a16502018-03-19 00:56:09 +00001540def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001541
1542def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1543 let Latency = 8;
1544 let NumMicroOps = 6;
1545 let ResourceCycles = [1,1,1,3];
1546}
Craig Topper9f834812018-04-01 21:54:24 +00001547def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001548
1549def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1550 let Latency = 8;
1551 let NumMicroOps = 6;
1552 let ResourceCycles = [1,1,1,2,1];
1553}
Craig Topper9f834812018-04-01 21:54:24 +00001554def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001555 "CMPXCHG(8|16|32|64)rm",
1556 "ROL(8|16|32|64)mCL",
1557 "SAR(8|16|32|64)mCL",
1558 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001559 "SHL(8|16|32|64)mCL",
1560 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001561def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1562 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001563
1564def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1565 let Latency = 9;
1566 let NumMicroOps = 2;
1567 let ResourceCycles = [1,1];
1568}
Craig Topper5a69a002018-03-21 06:28:42 +00001569def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1570 "ADD_F64m",
1571 "ILD_F16m",
1572 "ILD_F32m",
1573 "ILD_F64m",
1574 "SUBR_F32m",
1575 "SUBR_F64m",
1576 "SUB_F32m",
1577 "SUB_F64m",
1578 "VADDPDYrm",
1579 "VADDPSYrm",
1580 "VADDSUBPDYrm",
1581 "VADDSUBPSYrm",
1582 "VCMPPDYrmi",
1583 "VCMPPSYrmi",
1584 "VCVTDQ2PSYrm",
1585 "VCVTPS2DQYrm",
1586 "VCVTTPS2DQYrm",
1587 "VMAX(C?)PDYrm",
1588 "VMAX(C?)PSYrm",
1589 "VMIN(C?)PDYrm",
1590 "VMIN(C?)PSYrm",
1591 "VSUBPDYrm",
1592 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001593
1594def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1595 let Latency = 9;
1596 let NumMicroOps = 2;
1597 let ResourceCycles = [1,1];
1598}
Craig Topper5a69a002018-03-21 06:28:42 +00001599def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1600 "VPERM2I128rm",
1601 "VPERMDYrm",
1602 "VPERMPDYmi",
1603 "VPERMPSYrm",
1604 "VPERMQYmi",
1605 "VPMOVZXBDYrm",
1606 "VPMOVZXBQYrm",
1607 "VPMOVZXBWYrm",
1608 "VPMOVZXDQYrm",
1609 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001610
1611def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1612 let Latency = 9;
1613 let NumMicroOps = 2;
1614 let ResourceCycles = [1,1];
1615}
Craig Topper5a69a002018-03-21 06:28:42 +00001616def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1617 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001618
1619def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1620 let Latency = 9;
1621 let NumMicroOps = 3;
1622 let ResourceCycles = [1,1,1];
1623}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001624def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001625
1626def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1627 let Latency = 9;
1628 let NumMicroOps = 3;
1629 let ResourceCycles = [1,1,1];
1630}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001631def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1632 "(V?)CVTSD2SIrm",
1633 "(V?)CVTSS2SI64rm",
1634 "(V?)CVTSS2SIrm",
1635 "(V?)CVTTSD2SI64rm",
1636 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001637 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001638 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001639
1640def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1641 let Latency = 9;
1642 let NumMicroOps = 3;
1643 let ResourceCycles = [1,1,1];
1644}
1645def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1646
1647def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1648 let Latency = 9;
1649 let NumMicroOps = 3;
1650 let ResourceCycles = [1,1,1];
1651}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001652def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001653def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001654 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001655 "CVTTPD2DQrm",
1656 "MMX_CVTPD2PIirm",
1657 "MMX_CVTPI2PDirm",
1658 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001659 "(V?)CVTDQ2PDrm",
1660 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001661
1662def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1663 let Latency = 9;
1664 let NumMicroOps = 3;
1665 let ResourceCycles = [1,1,1];
1666}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001667def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1668 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001669
1670def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1671 let Latency = 9;
1672 let NumMicroOps = 4;
1673 let ResourceCycles = [2,1,1];
1674}
Craig Topper5a69a002018-03-21 06:28:42 +00001675def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1676 "VPSRAVDYrm",
1677 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001678
1679def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1680 let Latency = 9;
1681 let NumMicroOps = 4;
1682 let ResourceCycles = [2,1,1];
1683}
Craig Topper5a69a002018-03-21 06:28:42 +00001684def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1685 "VPHADDSWYrm",
1686 "VPHADDWYrm",
1687 "VPHSUBDYrm",
1688 "VPHSUBSWYrm",
1689 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001690
1691def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1692 let Latency = 9;
1693 let NumMicroOps = 4;
1694 let ResourceCycles = [1,1,1,1];
1695}
Craig Topper5a69a002018-03-21 06:28:42 +00001696def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1697 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001698
1699def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1700 let Latency = 9;
1701 let NumMicroOps = 5;
1702 let ResourceCycles = [1,1,3];
1703}
1704def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1705
1706def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1707 let Latency = 9;
1708 let NumMicroOps = 5;
1709 let ResourceCycles = [1,2,1,1];
1710}
Craig Topper5a69a002018-03-21 06:28:42 +00001711def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1712 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001713
Gadi Haber323f2e12017-10-24 20:19:47 +00001714def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1715 let Latency = 10;
1716 let NumMicroOps = 2;
1717 let ResourceCycles = [1,1];
1718}
Craig Topper5a69a002018-03-21 06:28:42 +00001719def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1720 "MMX_PMADDWDirm",
1721 "MMX_PMULHRSWrm",
1722 "MMX_PMULHUWirm",
1723 "MMX_PMULHWirm",
1724 "MMX_PMULLWirm",
1725 "MMX_PMULUDQirm",
1726 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001727 "(V?)PCMPGTQrm",
1728 "(V?)PHMINPOSUWrm",
1729 "(V?)PMADDUBSWrm",
1730 "(V?)PMADDWDrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001731 "(V?)PSADBWrm",
1732 "(V?)RCPPSm",
1733 "(V?)RCPSSm",
1734 "(V?)RSQRTPSm",
1735 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001736
1737def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1738 let Latency = 10;
1739 let NumMicroOps = 2;
1740 let ResourceCycles = [1,1];
1741}
Craig Topperf82867c2017-12-13 23:11:30 +00001742def: InstRW<[BWWriteResGroup116],
1743 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1744 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001745
1746def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1747 let Latency = 10;
1748 let NumMicroOps = 3;
1749 let ResourceCycles = [2,1];
1750}
Craig Topper5a69a002018-03-21 06:28:42 +00001751def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1752 "FICOM32m",
1753 "FICOMP16m",
1754 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001755
1756def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1757 let Latency = 10;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
1761def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1762
1763def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1764 let Latency = 10;
1765 let NumMicroOps = 4;
1766 let ResourceCycles = [1,2,1];
1767}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001768def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
1769 "(V?)HADDPSrm",
1770 "(V?)HSUBPDrm",
1771 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001772
1773def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1774 let Latency = 10;
1775 let NumMicroOps = 4;
1776 let ResourceCycles = [1,1,1,1];
1777}
1778def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1779
1780def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001781 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001782 let NumMicroOps = 4;
1783 let ResourceCycles = [1,1,1,1];
1784}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001785def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001786
Craig Topper8104f262018-04-02 05:33:28 +00001787def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001788 let Latency = 11;
1789 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001790 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001791}
Craig Topper8104f262018-04-02 05:33:28 +00001792def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1793
1794def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1795 let Latency = 11;
1796 let NumMicroOps = 1;
1797 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1798}
1799def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001800
1801def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1802 let Latency = 11;
1803 let NumMicroOps = 2;
1804 let ResourceCycles = [1,1];
1805}
Craig Topper5a69a002018-03-21 06:28:42 +00001806def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1807 "MUL_F64m",
1808 "VPCMPGTQYrm",
1809 "VPMADDUBSWYrm",
1810 "VPMADDWDYrm",
1811 "VPMULDQYrm",
1812 "VPMULHRSWYrm",
1813 "VPMULHUWYrm",
1814 "VPMULHWYrm",
1815 "VPMULLWYrm",
1816 "VPMULUDQYrm",
1817 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001818
1819def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1820 let Latency = 11;
1821 let NumMicroOps = 2;
1822 let ResourceCycles = [1,1];
1823}
Craig Topperf82867c2017-12-13 23:11:30 +00001824def: InstRW<[BWWriteResGroup124],
1825 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001826
Gadi Haber323f2e12017-10-24 20:19:47 +00001827def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1828 let Latency = 11;
1829 let NumMicroOps = 3;
1830 let ResourceCycles = [2,1];
1831}
Craig Topper5a69a002018-03-21 06:28:42 +00001832def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1833 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001834
1835def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1836 let Latency = 11;
1837 let NumMicroOps = 3;
1838 let ResourceCycles = [2,1];
1839}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001840def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1841 "(V?)ROUNDPSm",
1842 "(V?)ROUNDSDm",
1843 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001844
1845def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1846 let Latency = 11;
1847 let NumMicroOps = 3;
1848 let ResourceCycles = [1,1,1];
1849}
1850def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1851
1852def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1853 let Latency = 11;
1854 let NumMicroOps = 4;
1855 let ResourceCycles = [1,2,1];
1856}
Craig Topper5a69a002018-03-21 06:28:42 +00001857def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1858 "VHADDPSYrm",
1859 "VHSUBPDYrm",
1860 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001861
1862def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1863 let Latency = 11;
1864 let NumMicroOps = 6;
1865 let ResourceCycles = [1,1,1,1,2];
1866}
Craig Topper5a69a002018-03-21 06:28:42 +00001867def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1868 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001869
1870def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1871 let Latency = 11;
1872 let NumMicroOps = 7;
1873 let ResourceCycles = [2,2,3];
1874}
Craig Topper5a69a002018-03-21 06:28:42 +00001875def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1876 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001877
1878def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1879 let Latency = 11;
1880 let NumMicroOps = 9;
1881 let ResourceCycles = [1,4,1,3];
1882}
1883def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1884
1885def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1886 let Latency = 11;
1887 let NumMicroOps = 11;
1888 let ResourceCycles = [2,9];
1889}
Craig Topper2d451e72018-03-18 08:38:06 +00001890def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1891def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001892
Gadi Haber323f2e12017-10-24 20:19:47 +00001893def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1894 let Latency = 12;
1895 let NumMicroOps = 3;
1896 let ResourceCycles = [2,1];
1897}
Craig Topper5a69a002018-03-21 06:28:42 +00001898def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1899 "ADD_FI32m",
1900 "SUBR_FI16m",
1901 "SUBR_FI32m",
1902 "SUB_FI16m",
1903 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001904 "VROUNDPDYm",
1905 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001906
Craig Topper8104f262018-04-02 05:33:28 +00001907def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001908 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001909 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001910 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001911}
Craig Topper8104f262018-04-02 05:33:28 +00001912def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1913
1914def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1915 let Latency = 11;
1916 let NumMicroOps = 1;
1917 let ResourceCycles = [1,4];
1918}
1919def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001920
1921def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1922 let Latency = 13;
1923 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001924 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001925}
1926def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1927
Craig Topper8104f262018-04-02 05:33:28 +00001928def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001929 let Latency = 14;
1930 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001931 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001932}
Craig Topper8104f262018-04-02 05:33:28 +00001933def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1934
1935def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1936 let Latency = 14;
1937 let NumMicroOps = 1;
1938 let ResourceCycles = [1,4];
1939}
1940def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001941
Gadi Haber323f2e12017-10-24 20:19:47 +00001942def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1943 let Latency = 14;
1944 let NumMicroOps = 3;
1945 let ResourceCycles = [1,1,1];
1946}
Craig Topper5a69a002018-03-21 06:28:42 +00001947def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1948 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001949
1950def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1951 let Latency = 14;
1952 let NumMicroOps = 4;
1953 let ResourceCycles = [2,1,1];
1954}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001955def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001956
1957def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1958 let Latency = 14;
1959 let NumMicroOps = 4;
1960 let ResourceCycles = [1,1,1,1];
1961}
Craig Topper5a69a002018-03-21 06:28:42 +00001962def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001963
1964def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1965 let Latency = 14;
1966 let NumMicroOps = 8;
1967 let ResourceCycles = [2,2,1,3];
1968}
1969def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1970
1971def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1972 let Latency = 14;
1973 let NumMicroOps = 10;
1974 let ResourceCycles = [2,3,1,4];
1975}
1976def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1977
1978def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1979 let Latency = 14;
1980 let NumMicroOps = 12;
1981 let ResourceCycles = [2,1,4,5];
1982}
1983def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
1984
1985def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1986 let Latency = 15;
1987 let NumMicroOps = 1;
1988 let ResourceCycles = [1];
1989}
Craig Topper5a69a002018-03-21 06:28:42 +00001990def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1991 "DIVR_FST0r",
1992 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001993
Gadi Haber323f2e12017-10-24 20:19:47 +00001994def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1995 let Latency = 15;
1996 let NumMicroOps = 10;
1997 let ResourceCycles = [1,1,1,4,1,2];
1998}
Craig Topper13a16502018-03-19 00:56:09 +00001999def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002000
Craig Topper8104f262018-04-02 05:33:28 +00002001def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002002 let Latency = 16;
2003 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002004 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002005}
Craig Topper5a69a002018-03-21 06:28:42 +00002006def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2007 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002008
2009def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2010 let Latency = 16;
2011 let NumMicroOps = 3;
2012 let ResourceCycles = [2,1];
2013}
2014def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2015
Gadi Haber323f2e12017-10-24 20:19:47 +00002016def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2017 let Latency = 16;
2018 let NumMicroOps = 14;
2019 let ResourceCycles = [1,1,1,4,2,5];
2020}
2021def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2022
2023def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2024 let Latency = 16;
2025 let NumMicroOps = 16;
2026 let ResourceCycles = [16];
2027}
Craig Topper5a69a002018-03-21 06:28:42 +00002028def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002029
Craig Topper8104f262018-04-02 05:33:28 +00002030def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002031 let Latency = 17;
2032 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002033 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002034}
2035def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2036
2037def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2038 let Latency = 17;
2039 let NumMicroOps = 4;
2040 let ResourceCycles = [2,1,1];
2041}
Craig Topper5a69a002018-03-21 06:28:42 +00002042def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2043 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002044
Craig Topper8104f262018-04-02 05:33:28 +00002045def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002046 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002047 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002048 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002049}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002050def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2051 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002052
Gadi Haber323f2e12017-10-24 20:19:47 +00002053def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2054 let Latency = 18;
2055 let NumMicroOps = 8;
2056 let ResourceCycles = [1,1,1,5];
2057}
Craig Topper5a69a002018-03-21 06:28:42 +00002058def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002059def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002060
2061def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2062 let Latency = 18;
2063 let NumMicroOps = 11;
2064 let ResourceCycles = [2,1,1,3,1,3];
2065}
Craig Topper13a16502018-03-19 00:56:09 +00002066def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002067
Craig Topper8104f262018-04-02 05:33:28 +00002068def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002069 let Latency = 19;
2070 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002071 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002072}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002073def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002074 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002075
Gadi Haber323f2e12017-10-24 20:19:47 +00002076def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2077 let Latency = 19;
2078 let NumMicroOps = 5;
2079 let ResourceCycles = [2,1,1,1];
2080}
Craig Topper5a69a002018-03-21 06:28:42 +00002081def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002082
Gadi Haber323f2e12017-10-24 20:19:47 +00002083def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2084 let Latency = 20;
2085 let NumMicroOps = 1;
2086 let ResourceCycles = [1];
2087}
Craig Topper5a69a002018-03-21 06:28:42 +00002088def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2089 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002090 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002091
2092def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2093 let Latency = 20;
2094 let NumMicroOps = 5;
2095 let ResourceCycles = [2,1,1,1];
2096}
2097def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2098
2099def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2100 let Latency = 20;
2101 let NumMicroOps = 8;
2102 let ResourceCycles = [1,1,1,1,1,1,2];
2103}
Craig Topper5a69a002018-03-21 06:28:42 +00002104def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2105 "INSL",
2106 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002107
Craig Topper8104f262018-04-02 05:33:28 +00002108def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002109 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002110 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002111 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002112}
Craig Topper8104f262018-04-02 05:33:28 +00002113def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2114
2115def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2116 let Latency = 16;
2117 let NumMicroOps = 1;
2118 let ResourceCycles = [1,8];
2119}
2120def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002121
2122def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2123 let Latency = 21;
2124 let NumMicroOps = 2;
2125 let ResourceCycles = [1,1];
2126}
Craig Topper5a69a002018-03-21 06:28:42 +00002127def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2128 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002129
Craig Topper8104f262018-04-02 05:33:28 +00002130def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002131 let Latency = 21;
2132 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002133 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002134}
2135def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2136
2137def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2138 let Latency = 21;
2139 let NumMicroOps = 19;
2140 let ResourceCycles = [2,1,4,1,1,4,6];
2141}
2142def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2143
2144def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2145 let Latency = 22;
2146 let NumMicroOps = 18;
2147 let ResourceCycles = [1,1,16];
2148}
2149def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2150
Craig Topper8104f262018-04-02 05:33:28 +00002151def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002152 let Latency = 23;
2153 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002154 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002155}
2156def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2157
Craig Topper8104f262018-04-02 05:33:28 +00002158def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002159 let Latency = 23;
2160 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002161 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002162}
2163def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2164
Gadi Haber323f2e12017-10-24 20:19:47 +00002165def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2166 let Latency = 23;
2167 let NumMicroOps = 19;
2168 let ResourceCycles = [3,1,15];
2169}
Craig Topper391c6f92017-12-10 01:24:08 +00002170def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002171
2172def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2173 let Latency = 24;
2174 let NumMicroOps = 3;
2175 let ResourceCycles = [1,1,1];
2176}
Craig Topper5a69a002018-03-21 06:28:42 +00002177def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2178 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002179
Craig Topper8104f262018-04-02 05:33:28 +00002180def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002181 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002182 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002183 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002184}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002185def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2186 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002187
2188def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2189 let Latency = 26;
2190 let NumMicroOps = 2;
2191 let ResourceCycles = [1,1];
2192}
Craig Topper5a69a002018-03-21 06:28:42 +00002193def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002194 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002195
Craig Topper8104f262018-04-02 05:33:28 +00002196def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002197 let Latency = 27;
2198 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002199 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002200}
2201def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2202
2203def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2204 let Latency = 29;
2205 let NumMicroOps = 3;
2206 let ResourceCycles = [1,1,1];
2207}
Craig Topper5a69a002018-03-21 06:28:42 +00002208def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2209 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002210
Craig Topper8104f262018-04-02 05:33:28 +00002211def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002212 let Latency = 29;
2213 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002214 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002215}
2216def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2217
2218def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2219 let Latency = 22;
2220 let NumMicroOps = 7;
2221 let ResourceCycles = [1,3,2,1];
2222}
Craig Topper17a31182017-12-16 18:35:29 +00002223def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002224
2225def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2226 let Latency = 23;
2227 let NumMicroOps = 9;
2228 let ResourceCycles = [1,3,4,1];
2229}
Craig Topper17a31182017-12-16 18:35:29 +00002230def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002231
2232def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2233 let Latency = 24;
2234 let NumMicroOps = 9;
2235 let ResourceCycles = [1,5,2,1];
2236}
Craig Topper17a31182017-12-16 18:35:29 +00002237def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002238
2239def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2240 let Latency = 25;
2241 let NumMicroOps = 7;
2242 let ResourceCycles = [1,3,2,1];
2243}
Craig Topper17a31182017-12-16 18:35:29 +00002244def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2245 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002246
2247def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2248 let Latency = 26;
2249 let NumMicroOps = 9;
2250 let ResourceCycles = [1,5,2,1];
2251}
Craig Topper17a31182017-12-16 18:35:29 +00002252def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002253
2254def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2255 let Latency = 26;
2256 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002257 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002258}
Craig Topper17a31182017-12-16 18:35:29 +00002259def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002260
2261def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2262 let Latency = 27;
2263 let NumMicroOps = 9;
2264 let ResourceCycles = [1,5,2,1];
2265}
Craig Topper17a31182017-12-16 18:35:29 +00002266def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002267
Gadi Haber323f2e12017-10-24 20:19:47 +00002268def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2269 let Latency = 29;
2270 let NumMicroOps = 27;
2271 let ResourceCycles = [1,5,1,1,19];
2272}
2273def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2274
2275def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2276 let Latency = 30;
2277 let NumMicroOps = 28;
2278 let ResourceCycles = [1,6,1,1,19];
2279}
Craig Topper2d451e72018-03-18 08:38:06 +00002280def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002281
2282def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2283 let Latency = 31;
2284 let NumMicroOps = 31;
2285 let ResourceCycles = [8,1,21,1];
2286}
2287def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2288
Craig Topper8104f262018-04-02 05:33:28 +00002289def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2290 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002291 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002292 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002293}
2294def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2295
2296def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2297 let Latency = 34;
2298 let NumMicroOps = 8;
2299 let ResourceCycles = [2,2,2,1,1];
2300}
Craig Topper13a16502018-03-19 00:56:09 +00002301def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002302
2303def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2304 let Latency = 34;
2305 let NumMicroOps = 23;
2306 let ResourceCycles = [1,5,3,4,10];
2307}
Craig Topper5a69a002018-03-21 06:28:42 +00002308def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2309 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002310
2311def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2312 let Latency = 35;
2313 let NumMicroOps = 8;
2314 let ResourceCycles = [2,2,2,1,1];
2315}
Craig Topper13a16502018-03-19 00:56:09 +00002316def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002317
2318def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2319 let Latency = 35;
2320 let NumMicroOps = 23;
2321 let ResourceCycles = [1,5,2,1,4,10];
2322}
Craig Topper5a69a002018-03-21 06:28:42 +00002323def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2324 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002325
Craig Topper8104f262018-04-02 05:33:28 +00002326def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2327 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002328 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002329 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002330}
2331def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2332
2333def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2334 let Latency = 42;
2335 let NumMicroOps = 22;
2336 let ResourceCycles = [2,20];
2337}
Craig Topper2d451e72018-03-18 08:38:06 +00002338def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002339
2340def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2341 let Latency = 60;
2342 let NumMicroOps = 64;
2343 let ResourceCycles = [2,2,8,1,10,2,39];
2344}
2345def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002346
2347def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2348 let Latency = 63;
2349 let NumMicroOps = 88;
2350 let ResourceCycles = [4,4,31,1,2,1,45];
2351}
Craig Topper2d451e72018-03-18 08:38:06 +00002352def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002353
2354def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2355 let Latency = 63;
2356 let NumMicroOps = 90;
2357 let ResourceCycles = [4,2,33,1,2,1,47];
2358}
Craig Topper2d451e72018-03-18 08:38:06 +00002359def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002360
2361def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2362 let Latency = 75;
2363 let NumMicroOps = 15;
2364 let ResourceCycles = [6,3,6];
2365}
2366def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2367
2368def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2369 let Latency = 80;
2370 let NumMicroOps = 32;
2371 let ResourceCycles = [7,7,3,3,1,11];
2372}
2373def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2374
2375def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2376 let Latency = 115;
2377 let NumMicroOps = 100;
2378 let ResourceCycles = [9,9,11,8,1,11,21,30];
2379}
2380def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002381
2382} // SchedModel
2383