blob: 6760ad048edef92691333a2e8df1d330e71fe523 [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
15 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
16 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
165defm : BWWriteResPair<WriteFMA, [BWPort01], 5>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000166defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
167defm : BWWriteResPair<WriteFLogic, [BWPort5], 1>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Andrea Di Biagio486358c2018-04-10 10:49:41 +0000171defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000172
173// FMA Scheduling helper class.
174// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
175
176// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000177def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
178def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
179def : WriteRes<WriteVecMove, [BWPort015]>;
180
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000181defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000182defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
184defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000185defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000187defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : BWWriteResPair<WriteBlend, [BWPort15], 1>; // Vector blends.
189defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2]>; // Vector variable blends.
190defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000191defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
Gadi Haber323f2e12017-10-24 20:19:47 +0000192
Gadi Haber323f2e12017-10-24 20:19:47 +0000193// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000194defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
195defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
196defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000197
198// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000199
Gadi Haber323f2e12017-10-24 20:19:47 +0000200// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000201def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 11;
203 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000204 let ResourceCycles = [3];
205}
206def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207 let Latency = 16;
208 let NumMicroOps = 4;
209 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000210}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000211
212// Packed Compare Explicit Length Strings, Return Mask
213def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
214 let Latency = 19;
215 let NumMicroOps = 9;
216 let ResourceCycles = [4,3,1,1];
217}
218def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
219 let Latency = 24;
220 let NumMicroOps = 10;
221 let ResourceCycles = [4,3,1,1,1];
222}
223
224// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000225def : WriteRes<WritePCmpIStrI, [BWPort0]> {
226 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000227 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000228 let ResourceCycles = [3];
229}
230def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 16;
232 let NumMicroOps = 4;
233 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000234}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000235
236// Packed Compare Explicit Length Strings, Return Index
237def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
238 let Latency = 18;
239 let NumMicroOps = 8;
240 let ResourceCycles = [4,3,1];
241}
242def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
243 let Latency = 23;
244 let NumMicroOps = 9;
245 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000246}
247
Simon Pilgrima2f26782018-03-27 20:38:54 +0000248// MOVMSK Instructions.
249def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
250def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
251def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
252
Gadi Haber323f2e12017-10-24 20:19:47 +0000253// AES instructions.
254def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
255 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000257 let ResourceCycles = [1];
258}
259def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260 let Latency = 12;
261 let NumMicroOps = 2;
262 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000263}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000264
Gadi Haber323f2e12017-10-24 20:19:47 +0000265def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
266 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000268 let ResourceCycles = [2];
269}
270def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000271 let Latency = 19;
272 let NumMicroOps = 3;
273 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275
276def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
277 let Latency = 29;
278 let NumMicroOps = 11;
279 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000280}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000281def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
282 let Latency = 33;
283 let NumMicroOps = 11;
284 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000285}
286
287// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000289
290// Catch-all for expensive system instructions.
291def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
292
293// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000295defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000296defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000297defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000298defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000299
300// Old microcoded instructions that nobody use.
301def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
302
303// Fence instructions.
304def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
305
Craig Topper05242bf2018-04-21 18:07:36 +0000306// Load/store MXCSR.
307def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
308def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
309
Gadi Haber323f2e12017-10-24 20:19:47 +0000310// Nop, not very useful expect it provides a model for nops!
311def : WriteRes<WriteNop, []>;
312
313////////////////////////////////////////////////////////////////////////////////
314// Horizontal add/sub instructions.
315////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000316
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000317defm : BWWriteResPair<WriteFHAdd, [BWPort1], 3>;
318defm : BWWriteResPair<WritePHAdd, [BWPort15], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Remaining instrs.
321
322def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
323 let Latency = 1;
324 let NumMicroOps = 1;
325 let ResourceCycles = [1];
326}
Craig Topper5a69a002018-03-21 06:28:42 +0000327def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
328 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000329 "(V?)MOVPDI2DIrr",
330 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000331 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000332 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000333 "VTESTPD(Y?)rr",
334 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000335
336def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
337 let Latency = 1;
338 let NumMicroOps = 1;
339 let ResourceCycles = [1];
340}
Craig Topper5a69a002018-03-21 06:28:42 +0000341def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
342 "COM_FST0r",
343 "UCOM_FPr",
344 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000345
346def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
347 let Latency = 1;
348 let NumMicroOps = 1;
349 let ResourceCycles = [1];
350}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000351def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000352 "MMX_MOVD64to64rr",
353 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000354 "(V?)MOV64toPQIrr",
355 "(V?)MOVAPD(Y?)rr",
356 "(V?)MOVAPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000357 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000358 "(V?)MOVUPD(Y?)rr",
359 "(V?)MOVUPS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000360 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000361 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000362 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000363
364def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
365 let Latency = 1;
366 let NumMicroOps = 1;
367 let ResourceCycles = [1];
368}
369def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
370
371def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
372 let Latency = 1;
373 let NumMicroOps = 1;
374 let ResourceCycles = [1];
375}
Craig Topper5a69a002018-03-21 06:28:42 +0000376def: InstRW<[BWWriteResGroup5], (instregex "FINCSTP",
377 "FNOP")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000378
379def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
380 let Latency = 1;
381 let NumMicroOps = 1;
382 let ResourceCycles = [1];
383}
Craig Topperfbe31322018-04-05 21:56:19 +0000384def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000385def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
386 "ADC(16|32|64)i",
387 "ADC(8|16|32|64)rr",
388 "ADCX(32|64)rr",
389 "ADOX(32|64)rr",
390 "BT(16|32|64)ri8",
391 "BT(16|32|64)rr",
392 "BTC(16|32|64)ri8",
393 "BTC(16|32|64)rr",
394 "BTR(16|32|64)ri8",
395 "BTR(16|32|64)rr",
396 "BTS(16|32|64)ri8",
397 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000398 "SBB(16|32|64)ri",
399 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000400 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000401
402def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Craig Topper5a69a002018-03-21 06:28:42 +0000407def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
408 "BLSI(32|64)rr",
409 "BLSMSK(32|64)rr",
410 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000411 "LEA(16|32|64)(_32)?r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000412
413def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
414 let Latency = 1;
415 let NumMicroOps = 1;
416 let ResourceCycles = [1];
417}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000418def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000419 "(V?)MOVDQA(Y?)rr",
420 "(V?)MOVDQU(Y?)rr",
421 "(V?)MOVPQI2QIrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000422 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000423 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000424
425def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
426 let Latency = 1;
427 let NumMicroOps = 1;
428 let ResourceCycles = [1];
429}
Craig Topperdfccafe2018-04-18 06:41:25 +0000430def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000431 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000432 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000433 "SGDT64m",
434 "SIDT64m",
435 "SLDT64m",
436 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000437 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000438 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000439
440def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
441 let Latency = 1;
442 let NumMicroOps = 2;
443 let ResourceCycles = [1,1];
444}
Craig Topper5a69a002018-03-21 06:28:42 +0000445def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
446 "MMX_MOVD64from64rm",
447 "MMX_MOVD64mr",
448 "MMX_MOVNTQmr",
449 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000450 "MOVNTI_64mr",
451 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000452 "ST_FP32m",
453 "ST_FP64m",
454 "ST_FP80m",
455 "VEXTRACTF128mr",
456 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000457 "(V?)MOVAPD(Y?)mr",
458 "(V?)MOVAPS(Y?)mr",
459 "(V?)MOVDQA(Y?)mr",
460 "(V?)MOVDQU(Y?)mr",
461 "(V?)MOVHPDmr",
462 "(V?)MOVHPSmr",
463 "(V?)MOVLPDmr",
464 "(V?)MOVLPSmr",
465 "(V?)MOVNTDQ(V?)mr",
466 "(V?)MOVNTPD(V?)mr",
467 "(V?)MOVNTPS(V?)mr",
468 "(V?)MOVPDI2DImr",
469 "(V?)MOVPQI2QImr",
470 "(V?)MOVPQIto64mr",
471 "(V?)MOVSDmr",
472 "(V?)MOVSSmr",
473 "(V?)MOVUPD(Y?)mr",
474 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000475
476def BWWriteResGroup11 : SchedWriteRes<[BWPort5]> {
477 let Latency = 2;
478 let NumMicroOps = 2;
479 let ResourceCycles = [2];
480}
Craig Topper5a69a002018-03-21 06:28:42 +0000481def: InstRW<[BWWriteResGroup11], (instregex "BLENDVPDrr0",
482 "BLENDVPSrr0",
483 "MMX_PINSRWrr",
484 "PBLENDVBrr0",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000485 "VBLENDVPD(Y?)rr",
486 "VBLENDVPS(Y?)rr",
487 "VPBLENDVB(Y?)rr",
488 "(V?)PINSRBrr",
489 "(V?)PINSRDrr",
490 "(V?)PINSRQrr",
491 "(V?)PINSRWrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000492
493def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
494 let Latency = 2;
495 let NumMicroOps = 2;
496 let ResourceCycles = [2];
497}
498def: InstRW<[BWWriteResGroup12], (instregex "FDECSTP")>;
499
500def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
501 let Latency = 2;
502 let NumMicroOps = 2;
503 let ResourceCycles = [2];
504}
Craig Topper5a69a002018-03-21 06:28:42 +0000505def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
506 "ROL(8|16|32|64)ri",
507 "ROR(8|16|32|64)r1",
508 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000509
510def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
511 let Latency = 2;
512 let NumMicroOps = 2;
513 let ResourceCycles = [2];
514}
Craig Topper5a69a002018-03-21 06:28:42 +0000515def: InstRW<[BWWriteResGroup14], (instregex "LFENCE",
516 "MFENCE",
517 "WAIT",
518 "XGETBV")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000519
520def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
521 let Latency = 2;
522 let NumMicroOps = 2;
523 let ResourceCycles = [1,1];
524}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000525def: InstRW<[BWWriteResGroup15], (instregex "MMX_PEXTRWrr",
526 "VCVTPH2PS(Y?)rr",
527 "(V?)CVTPS2PDrr",
528 "(V?)CVTSS2SDrr",
529 "(V?)EXTRACTPSrr",
530 "(V?)PEXTRBrr",
531 "(V?)PEXTRDrr",
532 "(V?)PEXTRQrr",
533 "(V?)PEXTRWrr",
534 "(V?)PSLLDrr",
535 "(V?)PSLLQrr",
536 "(V?)PSLLWrr",
537 "(V?)PSRADrr",
538 "(V?)PSRAWrr",
539 "(V?)PSRLDrr",
540 "(V?)PSRLQrr",
541 "(V?)PSRLWrr",
542 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000543
544def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
545 let Latency = 2;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
549def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
550
551def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
552 let Latency = 2;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
556def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
557
558def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
559 let Latency = 2;
560 let NumMicroOps = 2;
561 let ResourceCycles = [1,1];
562}
563def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
564
565def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
566 let Latency = 2;
567 let NumMicroOps = 2;
568 let ResourceCycles = [1,1];
569}
Craig Topper498875f2018-04-04 17:54:19 +0000570def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
571
572def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
573 let Latency = 1;
574 let NumMicroOps = 1;
575 let ResourceCycles = [1];
576}
577def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000578
579def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
580 let Latency = 2;
581 let NumMicroOps = 2;
582 let ResourceCycles = [1,1];
583}
Craig Topper2d451e72018-03-18 08:38:06 +0000584def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000585def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000586def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
587 "ADC8ri",
588 "CMOV(A|BE)(16|32|64)rr",
589 "SBB8i8",
590 "SBB8ri",
591 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000592
593def BWWriteResGroup21 : SchedWriteRes<[BWPort4,BWPort5,BWPort237]> {
594 let Latency = 2;
595 let NumMicroOps = 3;
596 let ResourceCycles = [1,1,1];
597}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000598def: InstRW<[BWWriteResGroup21], (instregex "(V?)EXTRACTPSmr",
599 "(V?)PEXTRBmr",
600 "(V?)PEXTRDmr",
601 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000602 "(V?)PEXTRWmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000603
604def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
605 let Latency = 2;
606 let NumMicroOps = 3;
607 let ResourceCycles = [1,1,1];
608}
609def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
610
Gadi Haber323f2e12017-10-24 20:19:47 +0000611def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
612 let Latency = 2;
613 let NumMicroOps = 3;
614 let ResourceCycles = [1,1,1];
615}
616def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
617
618def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
619 let Latency = 2;
620 let NumMicroOps = 3;
621 let ResourceCycles = [1,1,1];
622}
Craig Topper2d451e72018-03-18 08:38:06 +0000623def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000624def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
625 "PUSH64i8",
626 "STOSB",
627 "STOSL",
628 "STOSQ",
629 "STOSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000630
Gadi Haber323f2e12017-10-24 20:19:47 +0000631def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
632 let Latency = 3;
633 let NumMicroOps = 1;
634 let ResourceCycles = [1];
635}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000636def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000637 "PDEP(32|64)rr",
638 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000639 "SHLD(16|32|64)rri8",
640 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000641 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000642
643def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000644 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000645 let NumMicroOps = 2;
646 let ResourceCycles = [1,1];
647}
Clement Courbet327fac42018-03-07 08:14:02 +0000648def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000649
650def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
651 let Latency = 3;
652 let NumMicroOps = 1;
653 let ResourceCycles = [1];
654}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000655def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
656 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000657 "VPMOVSXBDYrr",
658 "VPMOVSXBQYrr",
659 "VPMOVSXBWYrr",
660 "VPMOVSXDQYrr",
661 "VPMOVSXWDYrr",
662 "VPMOVSXWQYrr",
663 "VPMOVZXBDYrr",
664 "VPMOVZXBQYrr",
665 "VPMOVZXBWYrr",
666 "VPMOVZXDQYrr",
667 "VPMOVZXWDYrr",
668 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000669
670def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
671 let Latency = 3;
672 let NumMicroOps = 1;
673 let ResourceCycles = [1];
674}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000675def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
676 "(V?)MULPS(Y?)rr",
677 "(V?)MULSDrr",
678 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000679
680def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000681 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000682 let NumMicroOps = 3;
683 let ResourceCycles = [3];
684}
Craig Topperb5f26592018-04-19 18:00:17 +0000685def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
686 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
687 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000688
689def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
690 let Latency = 3;
691 let NumMicroOps = 3;
692 let ResourceCycles = [2,1];
693}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000694def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
695 "VPSRAVD(Y?)rr",
696 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000697
698def BWWriteResGroup32 : SchedWriteRes<[BWPort5,BWPort15]> {
699 let Latency = 3;
700 let NumMicroOps = 3;
701 let ResourceCycles = [2,1];
702}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000703def: InstRW<[BWWriteResGroup32], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000704 "(V?)PHADDD(Y?)rr",
705 "(V?)PHADDSW(Y?)rr",
706 "(V?)PHADDW(Y?)rr",
707 "(V?)PHSUBD(Y?)rr",
708 "(V?)PHSUBSW(Y?)rr",
709 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000710
711def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
712 let Latency = 3;
713 let NumMicroOps = 3;
714 let ResourceCycles = [2,1];
715}
Craig Topper5a69a002018-03-21 06:28:42 +0000716def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
717 "MMX_PACKSSWBirr",
718 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000719
720def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
721 let Latency = 3;
722 let NumMicroOps = 3;
723 let ResourceCycles = [1,2];
724}
725def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
726
727def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
728 let Latency = 3;
729 let NumMicroOps = 3;
730 let ResourceCycles = [1,2];
731}
Craig Topper5a69a002018-03-21 06:28:42 +0000732def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
733 "RCL(8|16|32|64)ri",
734 "RCR(8|16|32|64)r1",
735 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000736
737def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
738 let Latency = 3;
739 let NumMicroOps = 3;
740 let ResourceCycles = [2,1];
741}
Craig Topper5a69a002018-03-21 06:28:42 +0000742def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
743 "ROR(8|16|32|64)rCL",
744 "SAR(8|16|32|64)rCL",
745 "SHL(8|16|32|64)rCL",
746 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000747
748def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
749 let Latency = 3;
750 let NumMicroOps = 4;
751 let ResourceCycles = [1,1,1,1];
752}
753def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
754
755def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
756 let Latency = 3;
757 let NumMicroOps = 4;
758 let ResourceCycles = [1,1,1,1];
759}
Craig Topper5a69a002018-03-21 06:28:42 +0000760def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
761 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000762
763def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
764 let Latency = 4;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000768def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
769 "(V?)CVTSD2SIrr",
770 "(V?)CVTSS2SI64rr",
771 "(V?)CVTSS2SIrr",
772 "(V?)CVTTSD2SI64rr",
773 "(V?)CVTTSD2SIrr",
774 "(V?)CVTTSS2SI64rr",
775 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000776
777def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
778 let Latency = 4;
779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
Craig Topper5a69a002018-03-21 06:28:42 +0000782def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
783 "VPSLLDYrr",
784 "VPSLLQYrr",
785 "VPSLLWYrr",
786 "VPSRADYrr",
787 "VPSRAWYrr",
788 "VPSRLDYrr",
789 "VPSRLQYrr",
790 "VPSRLWYrr",
791 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000792
793def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
794 let Latency = 4;
795 let NumMicroOps = 2;
796 let ResourceCycles = [1,1];
797}
798def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
799
800def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
801 let Latency = 4;
802 let NumMicroOps = 2;
803 let ResourceCycles = [1,1];
804}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000805def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000806def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000807 "MMX_CVTPI2PDirr",
808 "MMX_CVTPS2PIirr",
809 "MMX_CVTTPD2PIirr",
810 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000811 "(V?)CVTDQ2PDrr",
812 "(V?)CVTPD2DQrr",
813 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000814 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000815 "(V?)CVTSD2SSrr",
816 "(V?)CVTSI642SDrr",
817 "(V?)CVTSI2SDrr",
818 "(V?)CVTSI2SSrr",
819 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000820
821def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
822 let Latency = 4;
823 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000824 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000825}
Craig Topper5a69a002018-03-21 06:28:42 +0000826def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000827
828def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
829 let Latency = 4;
830 let NumMicroOps = 3;
831 let ResourceCycles = [1,1,1];
832}
833def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
834
835def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
836 let Latency = 4;
837 let NumMicroOps = 3;
838 let ResourceCycles = [1,1,1];
839}
Craig Topper5a69a002018-03-21 06:28:42 +0000840def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
841 "ISTT_FP32m",
842 "ISTT_FP64m",
843 "IST_F16m",
844 "IST_F32m",
845 "IST_FP16m",
846 "IST_FP32m",
847 "IST_FP64m",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000848 "VCVTPS2PH(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000849
850def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
851 let Latency = 4;
852 let NumMicroOps = 4;
853 let ResourceCycles = [4];
854}
855def: InstRW<[BWWriteResGroup45], (instregex "FNCLEX")>;
856
857def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
858 let Latency = 4;
859 let NumMicroOps = 4;
860 let ResourceCycles = [1,3];
861}
862def: InstRW<[BWWriteResGroup46], (instregex "VZEROUPPER")>;
863
864def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
865 let Latency = 5;
866 let NumMicroOps = 1;
867 let ResourceCycles = [1];
868}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000869def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000870
Gadi Haber323f2e12017-10-24 20:19:47 +0000871def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
872 let Latency = 5;
873 let NumMicroOps = 1;
874 let ResourceCycles = [1];
875}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000876def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000877 "MOVSX(16|32|64)rm32",
878 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000879 "MOVZX(16|32|64)rm16",
880 "MOVZX(16|32|64)rm8",
881 "PREFETCHNTA",
882 "PREFETCHT0",
883 "PREFETCHT1",
884 "PREFETCHT2",
885 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000886 "(V?)LDDQUrm",
887 "(V?)MOV64toPQIrm",
888 "(V?)MOVAPDrm",
889 "(V?)MOVAPSrm",
890 "(V?)MOVDDUPrm",
891 "(V?)MOVDI2PDIrm",
892 "(V?)MOVDQArm",
893 "(V?)MOVDQUrm",
894 "(V?)MOVNTDQArm",
895 "(V?)MOVQI2PQIrm",
896 "(V?)MOVSDrm",
897 "(V?)MOVSHDUPrm",
898 "(V?)MOVSLDUPrm",
899 "(V?)MOVSSrm",
900 "(V?)MOVUPDrm",
901 "(V?)MOVUPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000902 "VPBROADCASTDrm",
903 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000904
905def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
906 let Latency = 5;
907 let NumMicroOps = 3;
908 let ResourceCycles = [1,2];
909}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000910def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr",
911 "(V?)HADDPD(Y?)rr",
912 "(V?)HADDPS(Y?)rr",
913 "(V?)HSUBPD(Y?)rr",
914 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000915
916def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
917 let Latency = 5;
918 let NumMicroOps = 3;
919 let ResourceCycles = [1,1,1];
920}
921def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
922
923def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000924 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000925 let NumMicroOps = 3;
926 let ResourceCycles = [1,1,1];
927}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000928def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000929
930def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
931 let Latency = 5;
932 let NumMicroOps = 4;
933 let ResourceCycles = [1,1,1,1];
934}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000935def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
936 "VMASKMOVPS(Y?)mr",
937 "VPMASKMOVD(Y?)mr",
938 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000939
940def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
941 let Latency = 5;
942 let NumMicroOps = 5;
943 let ResourceCycles = [1,4];
944}
945def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
946
947def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
948 let Latency = 5;
949 let NumMicroOps = 5;
950 let ResourceCycles = [1,4];
951}
952def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
953
954def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
955 let Latency = 5;
956 let NumMicroOps = 5;
957 let ResourceCycles = [2,3];
958}
Craig Topper5a69a002018-03-21 06:28:42 +0000959def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000960
961def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
962 let Latency = 5;
963 let NumMicroOps = 6;
964 let ResourceCycles = [1,1,4];
965}
Craig Topper5a69a002018-03-21 06:28:42 +0000966def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000967
968def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
969 let Latency = 6;
970 let NumMicroOps = 1;
971 let ResourceCycles = [1];
972}
Craig Topper5a69a002018-03-21 06:28:42 +0000973def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
974 "LD_F64m",
975 "LD_F80m",
976 "VBROADCASTF128",
977 "VBROADCASTI128",
978 "VBROADCASTSDYrm",
979 "VBROADCASTSSYrm",
980 "VLDDQUYrm",
981 "VMOVAPDYrm",
982 "VMOVAPSYrm",
983 "VMOVDDUPYrm",
984 "VMOVDQAYrm",
985 "VMOVDQUYrm",
986 "VMOVNTDQAYrm",
987 "VMOVSHDUPYrm",
988 "VMOVSLDUPYrm",
989 "VMOVUPDYrm",
990 "VMOVUPSYrm",
991 "VPBROADCASTDYrm",
992 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000993 "(V?)ROUNDPD(Y?)r",
994 "(V?)ROUNDPS(Y?)r",
995 "(V?)ROUNDSDr",
996 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000997
998def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
999 let Latency = 6;
1000 let NumMicroOps = 2;
1001 let ResourceCycles = [1,1];
1002}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001003def: InstRW<[BWWriteResGroup59], (instregex "MMX_PSLLDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001004 "MMX_PSLLQrm",
1005 "MMX_PSLLWrm",
1006 "MMX_PSRADrm",
1007 "MMX_PSRAWrm",
1008 "MMX_PSRLDrm",
1009 "MMX_PSRLQrm",
1010 "MMX_PSRLWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001011 "VCVTPH2PS(Y?)rm",
1012 "(V?)CVTPS2PDrm",
1013 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001014 "VPSLLVQrm",
1015 "VPSRLVQrm",
1016 "VTESTPDrm",
1017 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001018
1019def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
1020 let Latency = 6;
1021 let NumMicroOps = 2;
1022 let ResourceCycles = [1,1];
1023}
Craig Topper5a69a002018-03-21 06:28:42 +00001024def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
1025 "VCVTPD2DQYrr",
1026 "VCVTPD2PSYrr",
1027 "VCVTPS2PHYrr",
1028 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001029
1030def BWWriteResGroup61 : SchedWriteRes<[BWPort5,BWPort23]> {
1031 let Latency = 6;
1032 let NumMicroOps = 2;
1033 let ResourceCycles = [1,1];
1034}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001035def: InstRW<[BWWriteResGroup61], (instregex "MMX_PALIGNRrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001036 "MMX_PINSRWrm",
1037 "MMX_PSHUFBrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001038 "MMX_PUNPCKHBWirm",
1039 "MMX_PUNPCKHDQirm",
1040 "MMX_PUNPCKHWDirm",
1041 "MMX_PUNPCKLBWirm",
1042 "MMX_PUNPCKLDQirm",
1043 "MMX_PUNPCKLWDirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001044 "(V?)INSERTPSrm",
1045 "(V?)MOVHPDrm",
1046 "(V?)MOVHPSrm",
1047 "(V?)MOVLPDrm",
1048 "(V?)MOVLPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001049 "(V?)PACKSSDWrm",
1050 "(V?)PACKSSWBrm",
1051 "(V?)PACKUSDWrm",
1052 "(V?)PACKUSWBrm",
1053 "(V?)PALIGNRrmi",
1054 "(V?)PBLENDWrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001055 "VPERMILPDmi",
1056 "VPERMILPDrm",
1057 "VPERMILPSmi",
1058 "VPERMILPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001059 "(V?)PINSRBrm",
1060 "(V?)PINSRDrm",
1061 "(V?)PINSRQrm",
1062 "(V?)PINSRWrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001063 "(V?)PSHUFBrm",
1064 "(V?)PSHUFDmi",
1065 "(V?)PSHUFHWmi",
1066 "(V?)PSHUFLWmi",
1067 "(V?)PUNPCKHBWrm",
1068 "(V?)PUNPCKHDQrm",
1069 "(V?)PUNPCKHQDQrm",
1070 "(V?)PUNPCKHWDrm",
1071 "(V?)PUNPCKLBWrm",
1072 "(V?)PUNPCKLDQrm",
1073 "(V?)PUNPCKLQDQrm",
1074 "(V?)PUNPCKLWDrm",
1075 "(V?)SHUFPDrmi",
1076 "(V?)SHUFPSrmi",
1077 "(V?)UNPCKHPDrm",
1078 "(V?)UNPCKHPSrm",
1079 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001080 "(V?)UNPCKLPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001081
1082def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
1083 let Latency = 6;
1084 let NumMicroOps = 2;
1085 let ResourceCycles = [1,1];
1086}
Craig Topper5a69a002018-03-21 06:28:42 +00001087def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
1088 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001089
1090def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
1091 let Latency = 6;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Craig Topperdfccafe2018-04-18 06:41:25 +00001095def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001096def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1097 ADCX32rm, ADCX64rm,
1098 ADOX32rm, ADOX64rm,
1099 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001100
1101def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
1102 let Latency = 6;
1103 let NumMicroOps = 2;
1104 let ResourceCycles = [1,1];
1105}
Craig Topper5a69a002018-03-21 06:28:42 +00001106def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
1107 "BLSI(32|64)rm",
1108 "BLSMSK(32|64)rm",
1109 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001110 "MMX_PADD(B|D|Q|W)irm",
1111 "MMX_PADDS(B|W)irm",
1112 "MMX_PADDUS(B|W)irm",
1113 "MMX_PAVG(B|W)irm",
1114 "MMX_PCMPEQ(B|D|W)irm",
1115 "MMX_PCMPGT(B|D|W)irm",
1116 "MMX_P(MAX|MIN)SWirm",
1117 "MMX_P(MAX|MIN)UBirm",
1118 "MMX_PSIGN(B|D|W)rm",
1119 "MMX_PSUB(B|D|Q|W)irm",
1120 "MMX_PSUBS(B|W)irm",
1121 "MMX_PSUBUS(B|W)irm",
Craig Topper5a69a002018-03-21 06:28:42 +00001122 "MOVBE(16|32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001123 "(V?)PABSBrm",
1124 "(V?)PABSDrm",
1125 "(V?)PABSWrm",
1126 "(V?)PADDBrm",
1127 "(V?)PADDDrm",
1128 "(V?)PADDQrm",
1129 "(V?)PADDSBrm",
1130 "(V?)PADDSWrm",
1131 "(V?)PADDUSBrm",
1132 "(V?)PADDUSWrm",
1133 "(V?)PADDWrm",
1134 "(V?)PAVGBrm",
1135 "(V?)PAVGWrm",
1136 "(V?)PCMPEQBrm",
1137 "(V?)PCMPEQDrm",
1138 "(V?)PCMPEQQrm",
1139 "(V?)PCMPEQWrm",
1140 "(V?)PCMPGTBrm",
1141 "(V?)PCMPGTDrm",
1142 "(V?)PCMPGTWrm",
1143 "(V?)PMAXSBrm",
1144 "(V?)PMAXSDrm",
1145 "(V?)PMAXSWrm",
1146 "(V?)PMAXUBrm",
1147 "(V?)PMAXUDrm",
1148 "(V?)PMAXUWrm",
1149 "(V?)PMINSBrm",
1150 "(V?)PMINSDrm",
1151 "(V?)PMINSWrm",
1152 "(V?)PMINUBrm",
1153 "(V?)PMINUDrm",
1154 "(V?)PMINUWrm",
1155 "(V?)PSIGNBrm",
1156 "(V?)PSIGNDrm",
1157 "(V?)PSIGNWrm",
1158 "(V?)PSUBBrm",
1159 "(V?)PSUBDrm",
1160 "(V?)PSUBQrm",
1161 "(V?)PSUBSBrm",
1162 "(V?)PSUBSWrm",
1163 "(V?)PSUBUSBrm",
1164 "(V?)PSUBUSWrm",
1165 "(V?)PSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001166
1167def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1168 let Latency = 6;
1169 let NumMicroOps = 2;
1170 let ResourceCycles = [1,1];
1171}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001172def: InstRW<[BWWriteResGroup65], (instregex "(V?)BLENDPDrmi",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001173 "(V?)BLENDPSrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001174 "VINSERTF128rm",
1175 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001176 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001177
1178def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1179 let Latency = 6;
1180 let NumMicroOps = 2;
1181 let ResourceCycles = [1,1];
1182}
Craig Topper2d451e72018-03-18 08:38:06 +00001183def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001184def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001185
1186def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1187 let Latency = 6;
1188 let NumMicroOps = 4;
1189 let ResourceCycles = [1,1,2];
1190}
Craig Topper5a69a002018-03-21 06:28:42 +00001191def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1192 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001193
1194def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1195 let Latency = 6;
1196 let NumMicroOps = 4;
1197 let ResourceCycles = [1,1,1,1];
1198}
1199def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1200
1201def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1202 let Latency = 6;
1203 let NumMicroOps = 4;
1204 let ResourceCycles = [1,1,1,1];
1205}
Craig Topper5a69a002018-03-21 06:28:42 +00001206def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1207 "BTR(16|32|64)mi8",
1208 "BTS(16|32|64)mi8",
1209 "SAR(8|16|32|64)m1",
1210 "SAR(8|16|32|64)mi",
1211 "SHL(8|16|32|64)m1",
1212 "SHL(8|16|32|64)mi",
1213 "SHR(8|16|32|64)m1",
1214 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001215
1216def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1217 let Latency = 6;
1218 let NumMicroOps = 4;
1219 let ResourceCycles = [1,1,1,1];
1220}
Craig Topperf0d04262018-04-06 16:16:48 +00001221def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1222 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001223
1224def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1225 let Latency = 6;
1226 let NumMicroOps = 6;
1227 let ResourceCycles = [1,5];
1228}
1229def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1230
Gadi Haber323f2e12017-10-24 20:19:47 +00001231def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1232 let Latency = 7;
1233 let NumMicroOps = 2;
1234 let ResourceCycles = [1,1];
1235}
Craig Topper5a69a002018-03-21 06:28:42 +00001236def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1237 "VPSLLQYrm",
1238 "VPSLLVQYrm",
1239 "VPSLLWYrm",
1240 "VPSRADYrm",
1241 "VPSRAWYrm",
1242 "VPSRLDYrm",
1243 "VPSRLQYrm",
1244 "VPSRLVQYrm",
1245 "VPSRLWYrm",
1246 "VTESTPDYrm",
1247 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001248
1249def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1250 let Latency = 7;
1251 let NumMicroOps = 2;
1252 let ResourceCycles = [1,1];
1253}
Craig Topper5a69a002018-03-21 06:28:42 +00001254def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1255 "FCOM64m",
1256 "FCOMP32m",
1257 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001258
1259def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1260 let Latency = 7;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
Craig Topper5a69a002018-03-21 06:28:42 +00001264def: InstRW<[BWWriteResGroup75], (instregex "VANDNPDYrm",
1265 "VANDNPSYrm",
1266 "VANDPDYrm",
1267 "VANDPSYrm",
1268 "VORPDYrm",
1269 "VORPSYrm",
1270 "VPACKSSDWYrm",
1271 "VPACKSSWBYrm",
1272 "VPACKUSDWYrm",
1273 "VPACKUSWBYrm",
1274 "VPALIGNRYrmi",
1275 "VPBLENDWYrmi",
1276 "VPERMILPDYmi",
1277 "VPERMILPDYrm",
1278 "VPERMILPSYmi",
1279 "VPERMILPSYrm",
1280 "VPSHUFBYrm",
1281 "VPSHUFDYmi",
1282 "VPSHUFHWYmi",
1283 "VPSHUFLWYmi",
1284 "VPUNPCKHBWYrm",
1285 "VPUNPCKHDQYrm",
1286 "VPUNPCKHQDQYrm",
1287 "VPUNPCKHWDYrm",
1288 "VPUNPCKLBWYrm",
1289 "VPUNPCKLDQYrm",
1290 "VPUNPCKLQDQYrm",
1291 "VPUNPCKLWDYrm",
1292 "VSHUFPDYrmi",
1293 "VSHUFPSYrmi",
1294 "VUNPCKHPDYrm",
1295 "VUNPCKHPSYrm",
1296 "VUNPCKLPDYrm",
1297 "VUNPCKLPSYrm",
1298 "VXORPDYrm",
1299 "VXORPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001300
1301def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1302 let Latency = 7;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Craig Topper5a69a002018-03-21 06:28:42 +00001306def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1307 "VPABSDYrm",
1308 "VPABSWYrm",
1309 "VPADDBYrm",
1310 "VPADDDYrm",
1311 "VPADDQYrm",
1312 "VPADDSBYrm",
1313 "VPADDSWYrm",
1314 "VPADDUSBYrm",
1315 "VPADDUSWYrm",
1316 "VPADDWYrm",
1317 "VPAVGBYrm",
1318 "VPAVGWYrm",
1319 "VPCMPEQBYrm",
1320 "VPCMPEQDYrm",
1321 "VPCMPEQQYrm",
1322 "VPCMPEQWYrm",
1323 "VPCMPGTBYrm",
1324 "VPCMPGTDYrm",
1325 "VPCMPGTWYrm",
1326 "VPMAXSBYrm",
1327 "VPMAXSDYrm",
1328 "VPMAXSWYrm",
1329 "VPMAXUBYrm",
1330 "VPMAXUDYrm",
1331 "VPMAXUWYrm",
1332 "VPMINSBYrm",
1333 "VPMINSDYrm",
1334 "VPMINSWYrm",
1335 "VPMINUBYrm",
1336 "VPMINUDYrm",
1337 "VPMINUWYrm",
1338 "VPSIGNBYrm",
1339 "VPSIGNDYrm",
1340 "VPSIGNWYrm",
1341 "VPSUBBYrm",
1342 "VPSUBDYrm",
1343 "VPSUBQYrm",
1344 "VPSUBSBYrm",
1345 "VPSUBSWYrm",
1346 "VPSUBUSBYrm",
1347 "VPSUBUSWYrm",
1348 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001349
1350def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1351 let Latency = 7;
1352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
Craig Topper5a69a002018-03-21 06:28:42 +00001355def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1356 "VBLENDPSYrmi",
1357 "VPANDNYrm",
1358 "VPANDYrm",
1359 "VPBLENDDYrmi",
1360 "VPORYrm",
1361 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001362
1363def BWWriteResGroup78 : SchedWriteRes<[BWPort0,BWPort5]> {
1364 let Latency = 7;
1365 let NumMicroOps = 3;
1366 let ResourceCycles = [1,2];
1367}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001368def: InstRW<[BWWriteResGroup78], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001369
1370def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1371 let Latency = 7;
1372 let NumMicroOps = 3;
1373 let ResourceCycles = [2,1];
1374}
Craig Topper5a69a002018-03-21 06:28:42 +00001375def: InstRW<[BWWriteResGroup79], (instregex "BLENDVPDrm0",
1376 "BLENDVPSrm0",
1377 "MMX_PACKSSDWirm",
1378 "MMX_PACKSSWBirm",
1379 "MMX_PACKUSWBirm",
1380 "PBLENDVBrm0",
1381 "VBLENDVPDrm",
1382 "VBLENDVPSrm",
1383 "VMASKMOVPDrm",
1384 "VMASKMOVPSrm",
1385 "VPBLENDVBrm",
1386 "VPMASKMOVDrm",
1387 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001388
1389def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1390 let Latency = 7;
1391 let NumMicroOps = 3;
1392 let ResourceCycles = [1,2];
1393}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001394def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1395 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001396
1397def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1398 let Latency = 7;
1399 let NumMicroOps = 3;
1400 let ResourceCycles = [1,1,1];
1401}
Craig Topper5a69a002018-03-21 06:28:42 +00001402def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1403 "PSLLQrm",
1404 "PSLLWrm",
1405 "PSRADrm",
1406 "PSRAWrm",
1407 "PSRLDrm",
1408 "PSRLQrm",
1409 "PSRLWrm",
1410 "PTESTrm",
1411 "VPSLLDrm",
1412 "VPSLLQrm",
1413 "VPSLLWrm",
1414 "VPSRADrm",
1415 "VPSRAWrm",
1416 "VPSRLDrm",
1417 "VPSRLQrm",
1418 "VPSRLWrm",
1419 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001420
1421def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1422 let Latency = 7;
1423 let NumMicroOps = 3;
1424 let ResourceCycles = [1,1,1];
1425}
1426def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1427
Gadi Haber323f2e12017-10-24 20:19:47 +00001428def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1429 let Latency = 7;
1430 let NumMicroOps = 3;
1431 let ResourceCycles = [1,1,1];
1432}
Craig Topper5a69a002018-03-21 06:28:42 +00001433def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1434 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001435
Gadi Haber323f2e12017-10-24 20:19:47 +00001436def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1437 let Latency = 7;
1438 let NumMicroOps = 3;
1439 let ResourceCycles = [1,1,1];
1440}
Craig Topperf4cd9082018-01-19 05:47:32 +00001441def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001442
1443def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1444 let Latency = 7;
1445 let NumMicroOps = 5;
1446 let ResourceCycles = [1,1,1,2];
1447}
Craig Topper5a69a002018-03-21 06:28:42 +00001448def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1449 "ROL(8|16|32|64)mi",
1450 "ROR(8|16|32|64)m1",
1451 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001452
1453def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1454 let Latency = 7;
1455 let NumMicroOps = 5;
1456 let ResourceCycles = [1,1,1,2];
1457}
Craig Topper5a69a002018-03-21 06:28:42 +00001458def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001459
1460def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1461 let Latency = 7;
1462 let NumMicroOps = 5;
1463 let ResourceCycles = [1,1,1,1,1];
1464}
Craig Topper5a69a002018-03-21 06:28:42 +00001465def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1466 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001467
1468def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1469 let Latency = 7;
1470 let NumMicroOps = 7;
1471 let ResourceCycles = [2,2,1,2];
1472}
Craig Topper2d451e72018-03-18 08:38:06 +00001473def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001474
1475def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1476 let Latency = 8;
1477 let NumMicroOps = 2;
1478 let ResourceCycles = [1,1];
1479}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001480def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001481 "PDEP(32|64)rm",
1482 "PEXT(32|64)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001483 "(V?)ADDPDrm",
1484 "(V?)ADDPSrm",
1485 "(V?)ADDSDrm",
1486 "(V?)ADDSSrm",
1487 "(V?)ADDSUBPDrm",
1488 "(V?)ADDSUBPSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001489 "(V?)CVTDQ2PSrm",
1490 "(V?)CVTPS2DQrm",
1491 "(V?)CVTTPS2DQrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001492 "(V?)SUBPDrm",
1493 "(V?)SUBPSrm",
1494 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001495 "(V?)SUBSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001496
1497def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001498 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001499 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001500 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001501}
Craig Topperf846e2d2018-04-19 05:34:05 +00001502def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001503
Craig Topperf846e2d2018-04-19 05:34:05 +00001504def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1505 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001506 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001507 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001508}
Craig Topper5a69a002018-03-21 06:28:42 +00001509def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001510
Gadi Haber323f2e12017-10-24 20:19:47 +00001511def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1512 let Latency = 8;
1513 let NumMicroOps = 2;
1514 let ResourceCycles = [1,1];
1515}
Craig Topper5a69a002018-03-21 06:28:42 +00001516def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1517 "VPMOVSXBQYrm",
1518 "VPMOVSXBWYrm",
1519 "VPMOVSXDQYrm",
1520 "VPMOVSXWDYrm",
1521 "VPMOVSXWQYrm",
1522 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001523
1524def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1525 let Latency = 8;
1526 let NumMicroOps = 2;
1527 let ResourceCycles = [1,1];
1528}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001529def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1530 "(V?)MULPSrm",
1531 "(V?)MULSDrm",
1532 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001533
1534def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1535 let Latency = 8;
1536 let NumMicroOps = 3;
1537 let ResourceCycles = [2,1];
1538}
Craig Topper5a69a002018-03-21 06:28:42 +00001539def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1540 "VBLENDVPSYrm",
1541 "VMASKMOVPDYrm",
1542 "VMASKMOVPSYrm",
1543 "VPBLENDVBYrm",
1544 "VPMASKMOVDYrm",
1545 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001546
1547def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1548 let Latency = 8;
1549 let NumMicroOps = 4;
1550 let ResourceCycles = [2,1,1];
1551}
Craig Topper5a69a002018-03-21 06:28:42 +00001552def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1553 "VPSRAVDrm",
1554 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001555
1556def BWWriteResGroup96 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1557 let Latency = 8;
1558 let NumMicroOps = 4;
1559 let ResourceCycles = [2,1,1];
1560}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001561def: InstRW<[BWWriteResGroup96], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001562 "(V?)PHADDDrm",
1563 "(V?)PHADDSWrm",
1564 "(V?)PHADDWrm",
1565 "(V?)PHSUBDrm",
1566 "(V?)PHSUBSWrm",
1567 "(V?)PHSUBWrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001568
1569def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1570 let Latency = 8;
1571 let NumMicroOps = 5;
1572 let ResourceCycles = [1,1,1,2];
1573}
Craig Topper5a69a002018-03-21 06:28:42 +00001574def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1575 "RCL(8|16|32|64)mi",
1576 "RCR(8|16|32|64)m1",
1577 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001578
1579def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1580 let Latency = 8;
1581 let NumMicroOps = 5;
1582 let ResourceCycles = [1,1,2,1];
1583}
Craig Topper13a16502018-03-19 00:56:09 +00001584def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001585
1586def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1587 let Latency = 8;
1588 let NumMicroOps = 6;
1589 let ResourceCycles = [1,1,1,3];
1590}
Craig Topper9f834812018-04-01 21:54:24 +00001591def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001592
1593def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1594 let Latency = 8;
1595 let NumMicroOps = 6;
1596 let ResourceCycles = [1,1,1,2,1];
1597}
Craig Topper9f834812018-04-01 21:54:24 +00001598def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001599 "CMPXCHG(8|16|32|64)rm",
1600 "ROL(8|16|32|64)mCL",
1601 "SAR(8|16|32|64)mCL",
1602 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001603 "SHL(8|16|32|64)mCL",
1604 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001605def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1606 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001607
1608def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1609 let Latency = 9;
1610 let NumMicroOps = 2;
1611 let ResourceCycles = [1,1];
1612}
Craig Topper5a69a002018-03-21 06:28:42 +00001613def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1614 "ADD_F64m",
1615 "ILD_F16m",
1616 "ILD_F32m",
1617 "ILD_F64m",
1618 "SUBR_F32m",
1619 "SUBR_F64m",
1620 "SUB_F32m",
1621 "SUB_F64m",
1622 "VADDPDYrm",
1623 "VADDPSYrm",
1624 "VADDSUBPDYrm",
1625 "VADDSUBPSYrm",
1626 "VCMPPDYrmi",
1627 "VCMPPSYrmi",
1628 "VCVTDQ2PSYrm",
1629 "VCVTPS2DQYrm",
1630 "VCVTTPS2DQYrm",
1631 "VMAX(C?)PDYrm",
1632 "VMAX(C?)PSYrm",
1633 "VMIN(C?)PDYrm",
1634 "VMIN(C?)PSYrm",
1635 "VSUBPDYrm",
1636 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001637
1638def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1639 let Latency = 9;
1640 let NumMicroOps = 2;
1641 let ResourceCycles = [1,1];
1642}
Craig Topper5a69a002018-03-21 06:28:42 +00001643def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1644 "VPERM2I128rm",
1645 "VPERMDYrm",
1646 "VPERMPDYmi",
1647 "VPERMPSYrm",
1648 "VPERMQYmi",
1649 "VPMOVZXBDYrm",
1650 "VPMOVZXBQYrm",
1651 "VPMOVZXBWYrm",
1652 "VPMOVZXDQYrm",
1653 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001654
1655def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1656 let Latency = 9;
1657 let NumMicroOps = 2;
1658 let ResourceCycles = [1,1];
1659}
Craig Topper5a69a002018-03-21 06:28:42 +00001660def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1661 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001662
1663def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1664 let Latency = 9;
1665 let NumMicroOps = 3;
1666 let ResourceCycles = [1,1,1];
1667}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001668def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001669
1670def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1671 let Latency = 9;
1672 let NumMicroOps = 3;
1673 let ResourceCycles = [1,1,1];
1674}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001675def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1676 "(V?)CVTSD2SIrm",
1677 "(V?)CVTSS2SI64rm",
1678 "(V?)CVTSS2SIrm",
1679 "(V?)CVTTSD2SI64rm",
1680 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001681 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001682 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001683
1684def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1685 let Latency = 9;
1686 let NumMicroOps = 3;
1687 let ResourceCycles = [1,1,1];
1688}
1689def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1690
1691def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1692 let Latency = 9;
1693 let NumMicroOps = 3;
1694 let ResourceCycles = [1,1,1];
1695}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001696def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001697def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001698 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001699 "CVTTPD2DQrm",
1700 "MMX_CVTPD2PIirm",
1701 "MMX_CVTPI2PDirm",
1702 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001703 "(V?)CVTDQ2PDrm",
1704 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001705
1706def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1707 let Latency = 9;
1708 let NumMicroOps = 3;
1709 let ResourceCycles = [1,1,1];
1710}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001711def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1712 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001713
1714def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1715 let Latency = 9;
1716 let NumMicroOps = 4;
1717 let ResourceCycles = [2,1,1];
1718}
Craig Topper5a69a002018-03-21 06:28:42 +00001719def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1720 "VPSRAVDYrm",
1721 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001722
1723def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1724 let Latency = 9;
1725 let NumMicroOps = 4;
1726 let ResourceCycles = [2,1,1];
1727}
Craig Topper5a69a002018-03-21 06:28:42 +00001728def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1729 "VPHADDSWYrm",
1730 "VPHADDWYrm",
1731 "VPHSUBDYrm",
1732 "VPHSUBSWYrm",
1733 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001734
1735def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1736 let Latency = 9;
1737 let NumMicroOps = 4;
1738 let ResourceCycles = [1,1,1,1];
1739}
Craig Topper5a69a002018-03-21 06:28:42 +00001740def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1741 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001742
1743def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1744 let Latency = 9;
1745 let NumMicroOps = 5;
1746 let ResourceCycles = [1,1,3];
1747}
1748def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1749
1750def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1751 let Latency = 9;
1752 let NumMicroOps = 5;
1753 let ResourceCycles = [1,2,1,1];
1754}
Craig Topper5a69a002018-03-21 06:28:42 +00001755def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1756 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001757
Gadi Haber323f2e12017-10-24 20:19:47 +00001758def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1759 let Latency = 10;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
1762}
Craig Topper5a69a002018-03-21 06:28:42 +00001763def: InstRW<[BWWriteResGroup115], (instregex "MMX_PMADDUBSWrm",
1764 "MMX_PMADDWDirm",
1765 "MMX_PMULHRSWrm",
1766 "MMX_PMULHUWirm",
1767 "MMX_PMULHWirm",
1768 "MMX_PMULLWirm",
1769 "MMX_PMULUDQirm",
1770 "MMX_PSADBWirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001771 "(V?)PCMPGTQrm",
1772 "(V?)PHMINPOSUWrm",
1773 "(V?)PMADDUBSWrm",
1774 "(V?)PMADDWDrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001775 "(V?)PSADBWrm",
1776 "(V?)RCPPSm",
1777 "(V?)RCPSSm",
1778 "(V?)RSQRTPSm",
1779 "(V?)RSQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001780
1781def BWWriteResGroup116 : SchedWriteRes<[BWPort01,BWPort23]> {
1782 let Latency = 10;
1783 let NumMicroOps = 2;
1784 let ResourceCycles = [1,1];
1785}
Craig Topperf82867c2017-12-13 23:11:30 +00001786def: InstRW<[BWWriteResGroup116],
1787 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m",
1788 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001789
1790def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1791 let Latency = 10;
1792 let NumMicroOps = 3;
1793 let ResourceCycles = [2,1];
1794}
Craig Topper5a69a002018-03-21 06:28:42 +00001795def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1796 "FICOM32m",
1797 "FICOMP16m",
1798 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001799
1800def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1801 let Latency = 10;
1802 let NumMicroOps = 3;
1803 let ResourceCycles = [1,1,1];
1804}
1805def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1806
1807def BWWriteResGroup119 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1808 let Latency = 10;
1809 let NumMicroOps = 4;
1810 let ResourceCycles = [1,2,1];
1811}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001812def: InstRW<[BWWriteResGroup119], (instregex "(V?)HADDPDrm",
1813 "(V?)HADDPSrm",
1814 "(V?)HSUBPDrm",
1815 "(V?)HSUBPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001816
1817def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1818 let Latency = 10;
1819 let NumMicroOps = 4;
1820 let ResourceCycles = [1,1,1,1];
1821}
1822def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1823
1824def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001825 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001826 let NumMicroOps = 4;
1827 let ResourceCycles = [1,1,1,1];
1828}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001829def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001830
Craig Topper8104f262018-04-02 05:33:28 +00001831def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001832 let Latency = 11;
1833 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001834 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001835}
Craig Topper8104f262018-04-02 05:33:28 +00001836def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1837
1838def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1839 let Latency = 11;
1840 let NumMicroOps = 1;
1841 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1842}
1843def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001844
1845def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1846 let Latency = 11;
1847 let NumMicroOps = 2;
1848 let ResourceCycles = [1,1];
1849}
Craig Topper5a69a002018-03-21 06:28:42 +00001850def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1851 "MUL_F64m",
1852 "VPCMPGTQYrm",
1853 "VPMADDUBSWYrm",
1854 "VPMADDWDYrm",
1855 "VPMULDQYrm",
1856 "VPMULHRSWYrm",
1857 "VPMULHUWYrm",
1858 "VPMULHWYrm",
1859 "VPMULLWYrm",
1860 "VPMULUDQYrm",
1861 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001862
1863def BWWriteResGroup124 : SchedWriteRes<[BWPort01,BWPort23]> {
1864 let Latency = 11;
1865 let NumMicroOps = 2;
1866 let ResourceCycles = [1,1];
1867}
Craig Topperf82867c2017-12-13 23:11:30 +00001868def: InstRW<[BWWriteResGroup124],
1869 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001870
Gadi Haber323f2e12017-10-24 20:19:47 +00001871def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1872 let Latency = 11;
1873 let NumMicroOps = 3;
1874 let ResourceCycles = [2,1];
1875}
Craig Topper5a69a002018-03-21 06:28:42 +00001876def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1877 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001878
1879def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1880 let Latency = 11;
1881 let NumMicroOps = 3;
1882 let ResourceCycles = [2,1];
1883}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001884def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1885 "(V?)ROUNDPSm",
1886 "(V?)ROUNDSDm",
1887 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001888
1889def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1890 let Latency = 11;
1891 let NumMicroOps = 3;
1892 let ResourceCycles = [1,1,1];
1893}
1894def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1895
1896def BWWriteResGroup129 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1897 let Latency = 11;
1898 let NumMicroOps = 4;
1899 let ResourceCycles = [1,2,1];
1900}
Craig Topper5a69a002018-03-21 06:28:42 +00001901def: InstRW<[BWWriteResGroup129], (instregex "VHADDPDYrm",
1902 "VHADDPSYrm",
1903 "VHSUBPDYrm",
1904 "VHSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001905
1906def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1907 let Latency = 11;
1908 let NumMicroOps = 6;
1909 let ResourceCycles = [1,1,1,1,2];
1910}
Craig Topper5a69a002018-03-21 06:28:42 +00001911def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1912 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001913
1914def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1915 let Latency = 11;
1916 let NumMicroOps = 7;
1917 let ResourceCycles = [2,2,3];
1918}
Craig Topper5a69a002018-03-21 06:28:42 +00001919def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1920 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001921
1922def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1923 let Latency = 11;
1924 let NumMicroOps = 9;
1925 let ResourceCycles = [1,4,1,3];
1926}
1927def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1928
1929def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1930 let Latency = 11;
1931 let NumMicroOps = 11;
1932 let ResourceCycles = [2,9];
1933}
Craig Topper2d451e72018-03-18 08:38:06 +00001934def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1935def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001936
Gadi Haber323f2e12017-10-24 20:19:47 +00001937def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1938 let Latency = 12;
1939 let NumMicroOps = 3;
1940 let ResourceCycles = [2,1];
1941}
Craig Topper5a69a002018-03-21 06:28:42 +00001942def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1943 "ADD_FI32m",
1944 "SUBR_FI16m",
1945 "SUBR_FI32m",
1946 "SUB_FI16m",
1947 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001948 "VROUNDPDYm",
1949 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001950
1951def BWWriteResGroup136 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1952 let Latency = 12;
1953 let NumMicroOps = 4;
1954 let ResourceCycles = [1,2,1];
1955}
Craig Topper5a69a002018-03-21 06:28:42 +00001956def: InstRW<[BWWriteResGroup136], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001957
Craig Topper8104f262018-04-02 05:33:28 +00001958def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001959 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001960 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001961 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001962}
Craig Topper8104f262018-04-02 05:33:28 +00001963def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1964
1965def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1966 let Latency = 11;
1967 let NumMicroOps = 1;
1968 let ResourceCycles = [1,4];
1969}
1970def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001971
1972def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1973 let Latency = 13;
1974 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001975 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001976}
1977def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1978
Craig Topper8104f262018-04-02 05:33:28 +00001979def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001980 let Latency = 14;
1981 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001982 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001983}
Craig Topper8104f262018-04-02 05:33:28 +00001984def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1985
1986def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1987 let Latency = 14;
1988 let NumMicroOps = 1;
1989 let ResourceCycles = [1,4];
1990}
1991def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001992
Gadi Haber323f2e12017-10-24 20:19:47 +00001993def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1994 let Latency = 14;
1995 let NumMicroOps = 3;
1996 let ResourceCycles = [1,1,1];
1997}
Craig Topper5a69a002018-03-21 06:28:42 +00001998def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1999 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002000
2001def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
2002 let Latency = 14;
2003 let NumMicroOps = 4;
2004 let ResourceCycles = [2,1,1];
2005}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002006def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002007
2008def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2009 let Latency = 14;
2010 let NumMicroOps = 4;
2011 let ResourceCycles = [1,1,1,1];
2012}
Craig Topper5a69a002018-03-21 06:28:42 +00002013def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002014
2015def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
2016 let Latency = 14;
2017 let NumMicroOps = 8;
2018 let ResourceCycles = [2,2,1,3];
2019}
2020def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
2021
2022def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
2023 let Latency = 14;
2024 let NumMicroOps = 10;
2025 let ResourceCycles = [2,3,1,4];
2026}
2027def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
2028
2029def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
2030 let Latency = 14;
2031 let NumMicroOps = 12;
2032 let ResourceCycles = [2,1,4,5];
2033}
2034def: InstRW<[BWWriteResGroup146], (instregex "XCH_F")>;
2035
2036def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
2037 let Latency = 15;
2038 let NumMicroOps = 1;
2039 let ResourceCycles = [1];
2040}
Craig Topper5a69a002018-03-21 06:28:42 +00002041def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
2042 "DIVR_FST0r",
2043 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002044
Gadi Haber323f2e12017-10-24 20:19:47 +00002045def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2046 let Latency = 15;
2047 let NumMicroOps = 10;
2048 let ResourceCycles = [1,1,1,4,1,2];
2049}
Craig Topper13a16502018-03-19 00:56:09 +00002050def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002051
Craig Topper8104f262018-04-02 05:33:28 +00002052def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002053 let Latency = 16;
2054 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002055 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00002056}
Craig Topper5a69a002018-03-21 06:28:42 +00002057def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
2058 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002059
2060def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
2061 let Latency = 16;
2062 let NumMicroOps = 3;
2063 let ResourceCycles = [2,1];
2064}
2065def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
2066
Gadi Haber323f2e12017-10-24 20:19:47 +00002067def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2068 let Latency = 16;
2069 let NumMicroOps = 14;
2070 let ResourceCycles = [1,1,1,4,2,5];
2071}
2072def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
2073
2074def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
2075 let Latency = 16;
2076 let NumMicroOps = 16;
2077 let ResourceCycles = [16];
2078}
Craig Topper5a69a002018-03-21 06:28:42 +00002079def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002080
Craig Topper8104f262018-04-02 05:33:28 +00002081def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002082 let Latency = 17;
2083 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002084 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002085}
2086def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
2087
2088def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
2089 let Latency = 17;
2090 let NumMicroOps = 4;
2091 let ResourceCycles = [2,1,1];
2092}
Craig Topper5a69a002018-03-21 06:28:42 +00002093def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
2094 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002095
Craig Topper8104f262018-04-02 05:33:28 +00002096def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002097 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002098 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002099 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00002100}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002101def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
2102 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002103
Gadi Haber323f2e12017-10-24 20:19:47 +00002104def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
2105 let Latency = 18;
2106 let NumMicroOps = 8;
2107 let ResourceCycles = [1,1,1,5];
2108}
Craig Topper5a69a002018-03-21 06:28:42 +00002109def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00002110def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002111
2112def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
2113 let Latency = 18;
2114 let NumMicroOps = 11;
2115 let ResourceCycles = [2,1,1,3,1,3];
2116}
Craig Topper13a16502018-03-19 00:56:09 +00002117def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002118
Craig Topper8104f262018-04-02 05:33:28 +00002119def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002120 let Latency = 19;
2121 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002122 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00002123}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002124def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002125 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002126
Gadi Haber323f2e12017-10-24 20:19:47 +00002127def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2128 let Latency = 19;
2129 let NumMicroOps = 5;
2130 let ResourceCycles = [2,1,1,1];
2131}
Craig Topper5a69a002018-03-21 06:28:42 +00002132def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002133
Gadi Haber323f2e12017-10-24 20:19:47 +00002134def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
2135 let Latency = 20;
2136 let NumMicroOps = 1;
2137 let ResourceCycles = [1];
2138}
Craig Topper5a69a002018-03-21 06:28:42 +00002139def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
2140 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002141 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002142
2143def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
2144 let Latency = 20;
2145 let NumMicroOps = 5;
2146 let ResourceCycles = [2,1,1,1];
2147}
2148def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
2149
2150def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2151 let Latency = 20;
2152 let NumMicroOps = 8;
2153 let ResourceCycles = [1,1,1,1,1,1,2];
2154}
Craig Topper5a69a002018-03-21 06:28:42 +00002155def: InstRW<[BWWriteResGroup167], (instregex "INSB",
2156 "INSL",
2157 "INSW")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002158
Craig Topper8104f262018-04-02 05:33:28 +00002159def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002160 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00002161 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002162 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002163}
Craig Topper8104f262018-04-02 05:33:28 +00002164def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
2165
2166def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
2167 let Latency = 16;
2168 let NumMicroOps = 1;
2169 let ResourceCycles = [1,8];
2170}
2171def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002172
2173def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
2174 let Latency = 21;
2175 let NumMicroOps = 2;
2176 let ResourceCycles = [1,1];
2177}
Craig Topper5a69a002018-03-21 06:28:42 +00002178def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
2179 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002180
Craig Topper8104f262018-04-02 05:33:28 +00002181def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002182 let Latency = 21;
2183 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002184 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002185}
2186def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
2187
2188def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2189 let Latency = 21;
2190 let NumMicroOps = 19;
2191 let ResourceCycles = [2,1,4,1,1,4,6];
2192}
2193def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
2194
2195def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2196 let Latency = 22;
2197 let NumMicroOps = 18;
2198 let ResourceCycles = [1,1,16];
2199}
2200def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
2201
Craig Topper8104f262018-04-02 05:33:28 +00002202def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002203 let Latency = 23;
2204 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002205 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002206}
2207def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
2208
Craig Topper8104f262018-04-02 05:33:28 +00002209def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002210 let Latency = 23;
2211 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002212 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00002213}
2214def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
2215
Gadi Haber323f2e12017-10-24 20:19:47 +00002216def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
2217 let Latency = 23;
2218 let NumMicroOps = 19;
2219 let ResourceCycles = [3,1,15];
2220}
Craig Topper391c6f92017-12-10 01:24:08 +00002221def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002222
2223def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2224 let Latency = 24;
2225 let NumMicroOps = 3;
2226 let ResourceCycles = [1,1,1];
2227}
Craig Topper5a69a002018-03-21 06:28:42 +00002228def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
2229 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002230
Craig Topper8104f262018-04-02 05:33:28 +00002231def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002232 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00002233 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002234 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002235}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002236def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
2237 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002238
2239def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
2240 let Latency = 26;
2241 let NumMicroOps = 2;
2242 let ResourceCycles = [1,1];
2243}
Craig Topper5a69a002018-03-21 06:28:42 +00002244def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002245 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002246
Craig Topper8104f262018-04-02 05:33:28 +00002247def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002248 let Latency = 27;
2249 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002250 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00002251}
2252def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
2253
2254def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
2255 let Latency = 29;
2256 let NumMicroOps = 3;
2257 let ResourceCycles = [1,1,1];
2258}
Craig Topper5a69a002018-03-21 06:28:42 +00002259def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
2260 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002261
Craig Topper8104f262018-04-02 05:33:28 +00002262def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00002263 let Latency = 29;
2264 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002265 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00002266}
2267def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
2268
2269def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2270 let Latency = 22;
2271 let NumMicroOps = 7;
2272 let ResourceCycles = [1,3,2,1];
2273}
Craig Topper17a31182017-12-16 18:35:29 +00002274def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002275
2276def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2277 let Latency = 23;
2278 let NumMicroOps = 9;
2279 let ResourceCycles = [1,3,4,1];
2280}
Craig Topper17a31182017-12-16 18:35:29 +00002281def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002282
2283def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2284 let Latency = 24;
2285 let NumMicroOps = 9;
2286 let ResourceCycles = [1,5,2,1];
2287}
Craig Topper17a31182017-12-16 18:35:29 +00002288def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002289
2290def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2291 let Latency = 25;
2292 let NumMicroOps = 7;
2293 let ResourceCycles = [1,3,2,1];
2294}
Craig Topper17a31182017-12-16 18:35:29 +00002295def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2296 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002297
2298def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2299 let Latency = 26;
2300 let NumMicroOps = 9;
2301 let ResourceCycles = [1,5,2,1];
2302}
Craig Topper17a31182017-12-16 18:35:29 +00002303def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002304
2305def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2306 let Latency = 26;
2307 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002308 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002309}
Craig Topper17a31182017-12-16 18:35:29 +00002310def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002311
2312def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2313 let Latency = 27;
2314 let NumMicroOps = 9;
2315 let ResourceCycles = [1,5,2,1];
2316}
Craig Topper17a31182017-12-16 18:35:29 +00002317def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002318
Gadi Haber323f2e12017-10-24 20:19:47 +00002319def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2320 let Latency = 29;
2321 let NumMicroOps = 27;
2322 let ResourceCycles = [1,5,1,1,19];
2323}
2324def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2325
2326def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2327 let Latency = 30;
2328 let NumMicroOps = 28;
2329 let ResourceCycles = [1,6,1,1,19];
2330}
Craig Topper2d451e72018-03-18 08:38:06 +00002331def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002332
2333def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2334 let Latency = 31;
2335 let NumMicroOps = 31;
2336 let ResourceCycles = [8,1,21,1];
2337}
2338def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2339
Craig Topper8104f262018-04-02 05:33:28 +00002340def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2341 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002342 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002343 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002344}
2345def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2346
2347def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2348 let Latency = 34;
2349 let NumMicroOps = 8;
2350 let ResourceCycles = [2,2,2,1,1];
2351}
Craig Topper13a16502018-03-19 00:56:09 +00002352def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002353
2354def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2355 let Latency = 34;
2356 let NumMicroOps = 23;
2357 let ResourceCycles = [1,5,3,4,10];
2358}
Craig Topper5a69a002018-03-21 06:28:42 +00002359def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2360 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002361
2362def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2363 let Latency = 35;
2364 let NumMicroOps = 8;
2365 let ResourceCycles = [2,2,2,1,1];
2366}
Craig Topper13a16502018-03-19 00:56:09 +00002367def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002368
2369def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2370 let Latency = 35;
2371 let NumMicroOps = 23;
2372 let ResourceCycles = [1,5,2,1,4,10];
2373}
Craig Topper5a69a002018-03-21 06:28:42 +00002374def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2375 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002376
Craig Topper8104f262018-04-02 05:33:28 +00002377def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2378 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002379 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002380 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002381}
2382def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2383
2384def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2385 let Latency = 42;
2386 let NumMicroOps = 22;
2387 let ResourceCycles = [2,20];
2388}
Craig Topper2d451e72018-03-18 08:38:06 +00002389def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002390
2391def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2392 let Latency = 60;
2393 let NumMicroOps = 64;
2394 let ResourceCycles = [2,2,8,1,10,2,39];
2395}
2396def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002397
2398def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2399 let Latency = 63;
2400 let NumMicroOps = 88;
2401 let ResourceCycles = [4,4,31,1,2,1,45];
2402}
Craig Topper2d451e72018-03-18 08:38:06 +00002403def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002404
2405def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2406 let Latency = 63;
2407 let NumMicroOps = 90;
2408 let ResourceCycles = [4,2,33,1,2,1,47];
2409}
Craig Topper2d451e72018-03-18 08:38:06 +00002410def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002411
2412def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2413 let Latency = 75;
2414 let NumMicroOps = 15;
2415 let ResourceCycles = [6,3,6];
2416}
2417def: InstRW<[BWWriteResGroup200], (instregex "FNINIT")>;
2418
2419def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2420 let Latency = 80;
2421 let NumMicroOps = 32;
2422 let ResourceCycles = [7,7,3,3,1,11];
2423}
2424def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2425
2426def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2427 let Latency = 115;
2428 let NumMicroOps = 100;
2429 let ResourceCycles = [9,9,11,8,1,11,21,30];
2430}
2431def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002432
2433} // SchedModel
2434