blob: 2c180f557cf26ad8ea9f9da0cb9180fdbd0caba7 [file] [log] [blame]
Gadi Haber323f2e12017-10-24 20:19:47 +00001//=- X86SchedBroadwell.td - X86 Broadwell Scheduling ---------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Broadwell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14def BroadwellModel : SchedMachineModel {
Simon Pilgrimf7d2a932018-04-24 13:21:41 +000015 // All x86 instructions are modeled as a single micro-op, and BW can decode 4
Gadi Haber323f2e12017-10-24 20:19:47 +000016 // instructions per cycle.
17 let IssueWidth = 4;
18 let MicroOpBufferSize = 192; // Based on the reorder buffer.
19 let LoadLatency = 5;
20 let MispredictPenalty = 16;
21
22 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
23 let LoopMicroOpBufferSize = 50;
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000024
Simon Pilgrimc21deec2018-03-24 19:37:28 +000025 // This flag is set to allow the scheduler to assign a default model to
Simon Pilgrim68f9acc2017-12-12 16:12:53 +000026 // unrecognized opcodes.
27 let CompleteModel = 0;
Gadi Haber323f2e12017-10-24 20:19:47 +000028}
29
30let SchedModel = BroadwellModel in {
31
32// Broadwell can issue micro-ops to 8 different ports in one cycle.
33
34// Ports 0, 1, 5, and 6 handle all computation.
35// Port 4 gets the data half of stores. Store data can be available later than
36// the store address, but since we don't model the latency of stores, we can
37// ignore that.
38// Ports 2 and 3 are identical. They handle loads and the address half of
39// stores. Port 7 can handle address calculations.
40def BWPort0 : ProcResource<1>;
41def BWPort1 : ProcResource<1>;
42def BWPort2 : ProcResource<1>;
43def BWPort3 : ProcResource<1>;
44def BWPort4 : ProcResource<1>;
45def BWPort5 : ProcResource<1>;
46def BWPort6 : ProcResource<1>;
47def BWPort7 : ProcResource<1>;
48
49// Many micro-ops are capable of issuing on multiple ports.
50def BWPort01 : ProcResGroup<[BWPort0, BWPort1]>;
51def BWPort23 : ProcResGroup<[BWPort2, BWPort3]>;
52def BWPort237 : ProcResGroup<[BWPort2, BWPort3, BWPort7]>;
53def BWPort04 : ProcResGroup<[BWPort0, BWPort4]>;
54def BWPort05 : ProcResGroup<[BWPort0, BWPort5]>;
55def BWPort06 : ProcResGroup<[BWPort0, BWPort6]>;
56def BWPort15 : ProcResGroup<[BWPort1, BWPort5]>;
57def BWPort16 : ProcResGroup<[BWPort1, BWPort6]>;
58def BWPort56 : ProcResGroup<[BWPort5, BWPort6]>;
59def BWPort015 : ProcResGroup<[BWPort0, BWPort1, BWPort5]>;
60def BWPort056 : ProcResGroup<[BWPort0, BWPort5, BWPort6]>;
61def BWPort0156: ProcResGroup<[BWPort0, BWPort1, BWPort5, BWPort6]>;
62
63// 60 Entry Unified Scheduler
64def BWPortAny : ProcResGroup<[BWPort0, BWPort1, BWPort2, BWPort3, BWPort4,
65 BWPort5, BWPort6, BWPort7]> {
66 let BufferSize=60;
67}
68
Simon Pilgrim30c38c32018-03-19 14:46:07 +000069// Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000070def BWDivider : ProcResource<1>;
71// FP division and sqrt on port 0.
72def BWFPDivider : ProcResource<1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +000073
Gadi Haber323f2e12017-10-24 20:19:47 +000074// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass BWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber323f2e12017-10-24 20:19:47 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber323f2e12017-10-24 20:19:47 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([BWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber323f2e12017-10-24 20:19:47 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [BWPort237,BWPort4]>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : BWWriteResPair<WriteALU, [BWPort0156], 1>; // Simple integer ALU op.
109defm : BWWriteResPair<WriteIMul, [BWPort1], 3>; // Integer multiplication.
110defm : BWWriteResPair<WriteIDiv, [BWPort0, BWDivider], 25, [1, 10]>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : BWWriteResPair<WriteCRC32, [BWPort1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000112def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber323f2e12017-10-24 20:19:47 +0000113
114def : WriteRes<WriteLEA, [BWPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : BWWriteResPair<WriteCMOV, [BWPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [BWPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [BWPort06,BWPort4,BWPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : BWWriteResPair<WriteBitScan, [BWPort1], 3>;
125defm : BWWriteResPair<WriteLZCNT, [BWPort1], 3>;
126defm : BWWriteResPair<WriteTZCNT, [BWPort1], 3>;
127defm : BWWriteResPair<WritePOPCNT, [BWPort1], 3>;
128
Gadi Haber323f2e12017-10-24 20:19:47 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : BWWriteResPair<WriteShift, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : BWWriteResPair<WriteBEXTR, [BWPort06,BWPort15], 2, [1,1], 2>;
134defm : BWWriteResPair<WriteBZHI, [BWPort15], 1>;
135
Gadi Haber323f2e12017-10-24 20:19:47 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [BWPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [BWPort237, BWPort4]>;
139def : WriteRes<WriteMove, [BWPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
Sanjoy Das1074eb22017-12-12 19:11:31 +0000145// Treat misc copies as a move.
146def : InstRW<[WriteMove], (instrs COPY)>;
147
Gadi Haber323f2e12017-10-24 20:19:47 +0000148// Branches don't produce values, so they have no latency, but they still
149// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000150defm : BWWriteResPair<WriteJump, [BWPort06], 1>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000151
152// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000153def : WriteRes<WriteFLoad, [BWPort23]> { let Latency = 5; }
154def : WriteRes<WriteFStore, [BWPort237, BWPort4]>;
155def : WriteRes<WriteFMove, [BWPort5]>;
156
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000157defm : BWWriteResPair<WriteFAdd, [BWPort1], 3>; // Floating point add/sub.
158defm : BWWriteResPair<WriteFCmp, [BWPort1], 3>; // Floating point compare.
159defm : BWWriteResPair<WriteFCom, [BWPort1], 3>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : BWWriteResPair<WriteFMul, [BWPort0], 5>; // Floating point multiplication.
161defm : BWWriteResPair<WriteFDiv, [BWPort0], 12>; // 10-14 cycles. // Floating point division.
162defm : BWWriteResPair<WriteFSqrt, [BWPort0], 15>; // Floating point square root.
163defm : BWWriteResPair<WriteFRcp, [BWPort0], 5>; // Floating point reciprocal estimate.
164defm : BWWriteResPair<WriteFRsqrt, [BWPort0], 5>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000165defm : BWWriteResPair<WriteFMA, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add.
166defm : BWWriteResPair<WriteFMAS, [BWPort01], 5, [1], 1, 5>; // Fused Multiply Add (Scalar).
167defm : BWWriteResPair<WriteFMAY, [BWPort01], 5, [1], 1, 6>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000168defm : BWWriteResPair<WriteFSign, [BWPort5], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000169defm : BWWriteResPair<WriteFLogic, [BWPort5], 1, [1], 1, 5>; // Floating point and/or/xor logicals.
170defm : BWWriteResPair<WriteFLogicY, [BWPort5], 1, [1], 1, 6>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000171defm : BWWriteResPair<WriteFShuffle, [BWPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000172defm : BWWriteResPair<WriteFVarShuffle, [BWPort5], 1>; // Floating point vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : BWWriteResPair<WriteFBlend, [BWPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000174defm : BWWriteResPair<WriteFVarBlend, [BWPort5], 2, [2], 2, 5>; // Fp vector variable blends.
Gadi Haber323f2e12017-10-24 20:19:47 +0000175
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000176def : WriteRes<WriteCvtF2FSt, [BWPort1,BWPort4,BWPort237]> {
177 let Latency = 4;
178 let NumMicroOps = 3;
179 let ResourceCycles = [1,1,1];
180}
181
Gadi Haber323f2e12017-10-24 20:19:47 +0000182// FMA Scheduling helper class.
183// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
184
185// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000186def : WriteRes<WriteVecLoad, [BWPort23]> { let Latency = 5; }
187def : WriteRes<WriteVecStore, [BWPort237, BWPort4]>;
188def : WriteRes<WriteVecMove, [BWPort015]>;
189
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000190defm : BWWriteResPair<WriteVecALU, [BWPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000191defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : BWWriteResPair<WriteVecShift, [BWPort0], 1>; // Vector integer shifts.
193defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000194defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // PMULLD
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : BWWriteResPair<WriteShuffle, [BWPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000196defm : BWWriteResPair<WriteVarShuffle, [BWPort5], 1>; // Vector variable shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000197defm : BWWriteResPair<WriteBlend, [BWPort5], 1>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000198defm : BWWriteResPair<WriteVarBlend, [BWPort5], 2, [2], 2, 5>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000199defm : BWWriteResPair<WriteMPSAD, [BWPort0, BWPort5], 7, [1, 2], 3, 5>; // Vector MPSAD.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000200defm : BWWriteResPair<WritePSADBW, [BWPort0], 5>; // Vector PSADBW.
201defm : BWWriteResPair<WritePHMINPOS, [BWPort0], 5>; // Vector PHMINPOS.
Gadi Haber323f2e12017-10-24 20:19:47 +0000202
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000203// Vector insert/extract operations.
204def : WriteRes<WriteVecInsert, [BWPort5]> {
205 let Latency = 2;
206 let NumMicroOps = 2;
207 let ResourceCycles = [2];
208}
209def : WriteRes<WriteVecInsertLd, [BWPort5,BWPort23]> {
210 let Latency = 6;
211 let NumMicroOps = 2;
212}
213
214def : WriteRes<WriteVecExtract, [BWPort0,BWPort5]> {
215 let Latency = 2;
216 let NumMicroOps = 2;
217}
218def : WriteRes<WriteVecExtractSt, [BWPort4,BWPort5,BWPort237]> {
219 let Latency = 2;
220 let NumMicroOps = 3;
221}
222
Gadi Haber323f2e12017-10-24 20:19:47 +0000223// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000224defm : BWWriteResPair<WriteCvtF2I, [BWPort1], 3>; // Float -> Integer.
225defm : BWWriteResPair<WriteCvtI2F, [BWPort1], 4>; // Integer -> Float.
226defm : BWWriteResPair<WriteCvtF2F, [BWPort1], 3>; // Float -> Float size conversion.
Gadi Haber323f2e12017-10-24 20:19:47 +0000227
228// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229
Gadi Haber323f2e12017-10-24 20:19:47 +0000230// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber323f2e12017-10-24 20:19:47 +0000231def : WriteRes<WritePCmpIStrM, [BWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232 let Latency = 11;
233 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000234 let ResourceCycles = [3];
235}
236def : WriteRes<WritePCmpIStrMLd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237 let Latency = 16;
238 let NumMicroOps = 4;
239 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000240}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241
242// Packed Compare Explicit Length Strings, Return Mask
243def : WriteRes<WritePCmpEStrM, [BWPort0, BWPort5, BWPort015, BWPort0156]> {
244 let Latency = 19;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
247}
248def : WriteRes<WritePCmpEStrMLd, [BWPort0, BWPort5, BWPort23, BWPort015, BWPort0156]> {
249 let Latency = 24;
250 let NumMicroOps = 10;
251 let ResourceCycles = [4,3,1,1,1];
252}
253
254// Packed Compare Implicit Length Strings, Return Index
Gadi Haber323f2e12017-10-24 20:19:47 +0000255def : WriteRes<WritePCmpIStrI, [BWPort0]> {
256 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000257 let NumMicroOps = 3;
Gadi Haber323f2e12017-10-24 20:19:47 +0000258 let ResourceCycles = [3];
259}
260def : WriteRes<WritePCmpIStrILd, [BWPort0, BWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let Latency = 16;
262 let NumMicroOps = 4;
263 let ResourceCycles = [3,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000264}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265
266// Packed Compare Explicit Length Strings, Return Index
267def : WriteRes<WritePCmpEStrI, [BWPort0, BWPort5, BWPort0156]> {
268 let Latency = 18;
269 let NumMicroOps = 8;
270 let ResourceCycles = [4,3,1];
271}
272def : WriteRes<WritePCmpEStrILd, [BWPort0, BWPort5, BWPort23, BWPort0156]> {
273 let Latency = 23;
274 let NumMicroOps = 9;
275 let ResourceCycles = [4,3,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000276}
277
Simon Pilgrima2f26782018-03-27 20:38:54 +0000278// MOVMSK Instructions.
279def : WriteRes<WriteFMOVMSK, [BWPort0]> { let Latency = 3; }
280def : WriteRes<WriteVecMOVMSK, [BWPort0]> { let Latency = 3; }
281def : WriteRes<WriteMMXMOVMSK, [BWPort0]> { let Latency = 1; }
282
Gadi Haber323f2e12017-10-24 20:19:47 +0000283// AES instructions.
284def : WriteRes<WriteAESDecEnc, [BWPort5]> { // Decryption, encryption.
285 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000286 let NumMicroOps = 1;
Gadi Haber323f2e12017-10-24 20:19:47 +0000287 let ResourceCycles = [1];
288}
289def : WriteRes<WriteAESDecEncLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000290 let Latency = 12;
291 let NumMicroOps = 2;
292 let ResourceCycles = [1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294
Gadi Haber323f2e12017-10-24 20:19:47 +0000295def : WriteRes<WriteAESIMC, [BWPort5]> { // InvMixColumn.
296 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000297 let NumMicroOps = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000298 let ResourceCycles = [2];
299}
300def : WriteRes<WriteAESIMCLd, [BWPort5, BWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301 let Latency = 19;
302 let NumMicroOps = 3;
303 let ResourceCycles = [2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305
306def : WriteRes<WriteAESKeyGen, [BWPort0, BWPort5, BWPort015]> { // Key Generation.
307 let Latency = 29;
308 let NumMicroOps = 11;
309 let ResourceCycles = [2,7,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000310}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000311def : WriteRes<WriteAESKeyGenLd, [BWPort0, BWPort5, BWPort23, BWPort015]> {
312 let Latency = 33;
313 let NumMicroOps = 11;
314 let ResourceCycles = [2,7,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +0000315}
316
317// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000318defm : BWWriteResPair<WriteCLMul, [BWPort0], 5>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000319
320// Catch-all for expensive system instructions.
321def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
322
323// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000324defm : BWWriteResPair<WriteFShuffle256, [BWPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000325defm : BWWriteResPair<WriteFVarShuffle256, [BWPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000326defm : BWWriteResPair<WriteShuffle256, [BWPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000327defm : BWWriteResPair<WriteVarShuffle256, [BWPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000328defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber323f2e12017-10-24 20:19:47 +0000329
330// Old microcoded instructions that nobody use.
331def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
332
333// Fence instructions.
334def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
335
Craig Topper05242bf2018-04-21 18:07:36 +0000336// Load/store MXCSR.
337def : WriteRes<WriteLDMXCSR, [BWPort0,BWPort23,BWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
338def : WriteRes<WriteSTMXCSR, [BWPort4,BWPort5,BWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
339
Gadi Haber323f2e12017-10-24 20:19:47 +0000340// Nop, not very useful expect it provides a model for nops!
341def : WriteRes<WriteNop, []>;
342
343////////////////////////////////////////////////////////////////////////////////
344// Horizontal add/sub instructions.
345////////////////////////////////////////////////////////////////////////////////
Gadi Haber323f2e12017-10-24 20:19:47 +0000346
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000347defm : BWWriteResPair<WriteFHAdd, [BWPort1,BWPort5], 5, [1,2], 3>;
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000348defm : BWWriteResPair<WriteFHAddY, [BWPort1,BWPort5], 5, [1,2], 3, 6>;
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000349defm : BWWriteResPair<WritePHAdd, [BWPort5,BWPort15], 3, [2,1], 3>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000350
351// Remaining instrs.
352
353def BWWriteResGroup1 : SchedWriteRes<[BWPort0]> {
354 let Latency = 1;
355 let NumMicroOps = 1;
356 let ResourceCycles = [1];
357}
Craig Topper5a69a002018-03-21 06:28:42 +0000358def: InstRW<[BWWriteResGroup1], (instregex "MMX_MOVD64from64rr",
359 "MMX_MOVD64grr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000360 "(V?)MOVPDI2DIrr",
361 "(V?)MOVPQIto64rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000362 "VPSLLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000363 "VPSRLVQ(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000364 "VTESTPD(Y?)rr",
365 "VTESTPS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000366
367def BWWriteResGroup2 : SchedWriteRes<[BWPort1]> {
368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Craig Topper5a69a002018-03-21 06:28:42 +0000372def: InstRW<[BWWriteResGroup2], (instregex "COMP_FST0r",
373 "COM_FST0r",
374 "UCOM_FPr",
375 "UCOM_Fr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000376
377def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> {
378 let Latency = 1;
379 let NumMicroOps = 1;
380 let ResourceCycles = [1];
381}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000382def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVD64rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000383 "MMX_MOVD64to64rr",
384 "MMX_MOVQ2DQrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000385 "(V?)MOV64toPQIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000386 "(V?)MOVDI2PDIrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000387 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000388 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000389
390def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> {
391 let Latency = 1;
392 let NumMicroOps = 1;
393 let ResourceCycles = [1];
394}
395def: InstRW<[BWWriteResGroup4], (instregex "JMP(16|32|64)r")>;
396
397def BWWriteResGroup5 : SchedWriteRes<[BWPort01]> {
398 let Latency = 1;
399 let NumMicroOps = 1;
400 let ResourceCycles = [1];
401}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000402def: InstRW<[BWWriteResGroup5], (instrs FINCSTP, FNOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000403
404def BWWriteResGroup6 : SchedWriteRes<[BWPort06]> {
405 let Latency = 1;
406 let NumMicroOps = 1;
407 let ResourceCycles = [1];
408}
Craig Topperfbe31322018-04-05 21:56:19 +0000409def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000410def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
411 "ADC(16|32|64)i",
412 "ADC(8|16|32|64)rr",
413 "ADCX(32|64)rr",
414 "ADOX(32|64)rr",
415 "BT(16|32|64)ri8",
416 "BT(16|32|64)rr",
417 "BTC(16|32|64)ri8",
418 "BTC(16|32|64)rr",
419 "BTR(16|32|64)ri8",
420 "BTR(16|32|64)rr",
421 "BTS(16|32|64)ri8",
422 "BTS(16|32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000423 "SBB(16|32|64)ri",
424 "SBB(16|32|64)i",
Craig Topperdfccafe2018-04-18 06:41:25 +0000425 "SBB(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000426
427def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
428 let Latency = 1;
429 let NumMicroOps = 1;
430 let ResourceCycles = [1];
431}
Craig Topper5a69a002018-03-21 06:28:42 +0000432def: InstRW<[BWWriteResGroup7], (instregex "ANDN(32|64)rr",
433 "BLSI(32|64)rr",
434 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000435 "BLSR(32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000436
437def BWWriteResGroup8 : SchedWriteRes<[BWPort015]> {
438 let Latency = 1;
439 let NumMicroOps = 1;
440 let ResourceCycles = [1];
441}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000442def: InstRW<[BWWriteResGroup8], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000443 "VPBLENDD(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000444
445def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> {
446 let Latency = 1;
447 let NumMicroOps = 1;
448 let ResourceCycles = [1];
449}
Craig Topperdfccafe2018-04-18 06:41:25 +0000450def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000451 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000452 "SAHF", // TODO: This doesn't match Agner's data
Craig Topper5a69a002018-03-21 06:28:42 +0000453 "SGDT64m",
454 "SIDT64m",
455 "SLDT64m",
456 "SMSW16m",
Craig Topper5a69a002018-03-21 06:28:42 +0000457 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000458 "SYSCALL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000459
460def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
461 let Latency = 1;
462 let NumMicroOps = 2;
463 let ResourceCycles = [1,1];
464}
Craig Topper5a69a002018-03-21 06:28:42 +0000465def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm",
466 "MMX_MOVD64from64rm",
467 "MMX_MOVD64mr",
468 "MMX_MOVNTQmr",
469 "MMX_MOVQ64mr",
Craig Topper5a69a002018-03-21 06:28:42 +0000470 "MOVNTI_64mr",
471 "MOVNTImr",
Craig Topper5a69a002018-03-21 06:28:42 +0000472 "ST_FP32m",
473 "ST_FP64m",
474 "ST_FP80m",
475 "VEXTRACTF128mr",
476 "VEXTRACTI128mr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000477 "(V?)MOVAPD(Y?)mr",
478 "(V?)MOVAPS(Y?)mr",
479 "(V?)MOVDQA(Y?)mr",
480 "(V?)MOVDQU(Y?)mr",
481 "(V?)MOVHPDmr",
482 "(V?)MOVHPSmr",
483 "(V?)MOVLPDmr",
484 "(V?)MOVLPSmr",
485 "(V?)MOVNTDQ(V?)mr",
486 "(V?)MOVNTPD(V?)mr",
487 "(V?)MOVNTPS(V?)mr",
488 "(V?)MOVPDI2DImr",
489 "(V?)MOVPQI2QImr",
490 "(V?)MOVPQIto64mr",
491 "(V?)MOVSDmr",
492 "(V?)MOVSSmr",
493 "(V?)MOVUPD(Y?)mr",
494 "(V?)MOVUPS(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000495
Gadi Haber323f2e12017-10-24 20:19:47 +0000496def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> {
497 let Latency = 2;
498 let NumMicroOps = 2;
499 let ResourceCycles = [2];
500}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000501def: InstRW<[BWWriteResGroup12], (instrs FDECSTP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000502
503def BWWriteResGroup13 : SchedWriteRes<[BWPort06]> {
504 let Latency = 2;
505 let NumMicroOps = 2;
506 let ResourceCycles = [2];
507}
Craig Topper5a69a002018-03-21 06:28:42 +0000508def: InstRW<[BWWriteResGroup13], (instregex "ROL(8|16|32|64)r1",
509 "ROL(8|16|32|64)ri",
510 "ROR(8|16|32|64)r1",
511 "ROR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000512
513def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
514 let Latency = 2;
515 let NumMicroOps = 2;
516 let ResourceCycles = [2];
517}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000518def: InstRW<[BWWriteResGroup14], (instrs LFENCE,
519 MFENCE,
520 WAIT,
521 XGETBV)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000522
523def BWWriteResGroup15 : SchedWriteRes<[BWPort0,BWPort5]> {
524 let Latency = 2;
525 let NumMicroOps = 2;
526 let ResourceCycles = [1,1];
527}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000528def: InstRW<[BWWriteResGroup15], (instregex "VCVTPH2PS(Y?)rr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000529 "(V?)CVTPS2PDrr",
530 "(V?)CVTSS2SDrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000531 "(V?)PSLLDrr",
532 "(V?)PSLLQrr",
533 "(V?)PSLLWrr",
534 "(V?)PSRADrr",
535 "(V?)PSRAWrr",
536 "(V?)PSRLDrr",
537 "(V?)PSRLQrr",
538 "(V?)PSRLWrr",
539 "(V?)PTESTrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000540
541def BWWriteResGroup16 : SchedWriteRes<[BWPort6,BWPort0156]> {
542 let Latency = 2;
543 let NumMicroOps = 2;
544 let ResourceCycles = [1,1];
545}
546def: InstRW<[BWWriteResGroup16], (instregex "CLFLUSH")>;
547
548def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
549 let Latency = 2;
550 let NumMicroOps = 2;
551 let ResourceCycles = [1,1];
552}
553def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>;
554
555def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
556 let Latency = 2;
557 let NumMicroOps = 2;
558 let ResourceCycles = [1,1];
559}
560def: InstRW<[BWWriteResGroup18], (instregex "SFENCE")>;
561
562def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> {
563 let Latency = 2;
564 let NumMicroOps = 2;
565 let ResourceCycles = [1,1];
566}
Craig Topper498875f2018-04-04 17:54:19 +0000567def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>;
568
569def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> {
570 let Latency = 1;
571 let NumMicroOps = 1;
572 let ResourceCycles = [1];
573}
574def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000575
576def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
577 let Latency = 2;
578 let NumMicroOps = 2;
579 let ResourceCycles = [1,1];
580}
Craig Topper2d451e72018-03-18 08:38:06 +0000581def: InstRW<[BWWriteResGroup20], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000582def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000583def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8",
584 "ADC8ri",
585 "CMOV(A|BE)(16|32|64)rr",
586 "SBB8i8",
587 "SBB8ri",
588 "SET(A|BE)r")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000589
Gadi Haber323f2e12017-10-24 20:19:47 +0000590def BWWriteResGroup22 : SchedWriteRes<[BWPort4,BWPort6,BWPort237]> {
591 let Latency = 2;
592 let NumMicroOps = 3;
593 let ResourceCycles = [1,1,1];
594}
595def: InstRW<[BWWriteResGroup22], (instregex "FNSTCW16m")>;
596
Gadi Haber323f2e12017-10-24 20:19:47 +0000597def BWWriteResGroup24 : SchedWriteRes<[BWPort4,BWPort237,BWPort15]> {
598 let Latency = 2;
599 let NumMicroOps = 3;
600 let ResourceCycles = [1,1,1];
601}
602def: InstRW<[BWWriteResGroup24], (instregex "MOVBE(16|32|64)mr")>;
603
604def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
605 let Latency = 2;
606 let NumMicroOps = 3;
607 let ResourceCycles = [1,1,1];
608}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000609def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r,
610 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topper5a69a002018-03-21 06:28:42 +0000611def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000612 "PUSH64i8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000613
Gadi Haber323f2e12017-10-24 20:19:47 +0000614def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> {
615 let Latency = 3;
616 let NumMicroOps = 1;
617 let ResourceCycles = [1];
618}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +0000619def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000620 "PDEP(32|64)rr",
621 "PEXT(32|64)rr",
Craig Topper5a69a002018-03-21 06:28:42 +0000622 "SHLD(16|32|64)rri8",
623 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +0000624 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000625
626def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000627 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000628 let NumMicroOps = 2;
629 let ResourceCycles = [1,1];
630}
Clement Courbet327fac42018-03-07 08:14:02 +0000631def: InstRW<[BWWriteResGroup27_16], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000632
633def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> {
634 let Latency = 3;
635 let NumMicroOps = 1;
636 let ResourceCycles = [1];
637}
Simon Pilgrim825ead92018-04-21 20:45:12 +0000638def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr",
639 "VPBROADCASTWrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000640 "VPMOVSXBDYrr",
641 "VPMOVSXBQYrr",
642 "VPMOVSXBWYrr",
643 "VPMOVSXDQYrr",
644 "VPMOVSXWDYrr",
645 "VPMOVSXWQYrr",
646 "VPMOVZXBDYrr",
647 "VPMOVZXBQYrr",
648 "VPMOVZXBWYrr",
649 "VPMOVZXDQYrr",
650 "VPMOVZXWDYrr",
651 "VPMOVZXWQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000652
653def BWWriteResGroup29 : SchedWriteRes<[BWPort01]> {
654 let Latency = 3;
655 let NumMicroOps = 1;
656 let ResourceCycles = [1];
657}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000658def: InstRW<[BWWriteResGroup29], (instregex "(V?)MULPD(Y?)rr",
659 "(V?)MULPS(Y?)rr",
660 "(V?)MULSDrr",
661 "(V?)MULSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000662
663def BWWriteResGroup30 : SchedWriteRes<[BWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000664 let Latency = 2;
Gadi Haber323f2e12017-10-24 20:19:47 +0000665 let NumMicroOps = 3;
666 let ResourceCycles = [3];
667}
Craig Topperb5f26592018-04-19 18:00:17 +0000668def: InstRW<[BWWriteResGroup30], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
669 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
670 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000671
672def BWWriteResGroup31 : SchedWriteRes<[BWPort0,BWPort5]> {
673 let Latency = 3;
674 let NumMicroOps = 3;
675 let ResourceCycles = [2,1];
676}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000677def: InstRW<[BWWriteResGroup31], (instregex "VPSLLVD(Y?)rr",
678 "VPSRAVD(Y?)rr",
679 "VPSRLVD(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000680
Gadi Haber323f2e12017-10-24 20:19:47 +0000681def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> {
682 let Latency = 3;
683 let NumMicroOps = 3;
684 let ResourceCycles = [2,1];
685}
Craig Topper5a69a002018-03-21 06:28:42 +0000686def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr",
687 "MMX_PACKSSWBirr",
688 "MMX_PACKUSWBirr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000689
690def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> {
691 let Latency = 3;
692 let NumMicroOps = 3;
693 let ResourceCycles = [1,2];
694}
695def: InstRW<[BWWriteResGroup34], (instregex "CLD")>;
696
697def BWWriteResGroup35 : SchedWriteRes<[BWPort06,BWPort0156]> {
698 let Latency = 3;
699 let NumMicroOps = 3;
700 let ResourceCycles = [1,2];
701}
Craig Topper5a69a002018-03-21 06:28:42 +0000702def: InstRW<[BWWriteResGroup35], (instregex "RCL(8|16|32|64)r1",
703 "RCL(8|16|32|64)ri",
704 "RCR(8|16|32|64)r1",
705 "RCR(8|16|32|64)ri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000706
707def BWWriteResGroup36 : SchedWriteRes<[BWPort06,BWPort0156]> {
708 let Latency = 3;
709 let NumMicroOps = 3;
710 let ResourceCycles = [2,1];
711}
Craig Topper5a69a002018-03-21 06:28:42 +0000712def: InstRW<[BWWriteResGroup36], (instregex "ROL(8|16|32|64)rCL",
713 "ROR(8|16|32|64)rCL",
714 "SAR(8|16|32|64)rCL",
715 "SHL(8|16|32|64)rCL",
716 "SHR(8|16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000717
718def BWWriteResGroup37 : SchedWriteRes<[BWPort4,BWPort6,BWPort237,BWPort0156]> {
719 let Latency = 3;
720 let NumMicroOps = 4;
721 let ResourceCycles = [1,1,1,1];
722}
723def: InstRW<[BWWriteResGroup37], (instregex "CALL(16|32|64)r")>;
724
725def BWWriteResGroup38 : SchedWriteRes<[BWPort4,BWPort237,BWPort06,BWPort0156]> {
726 let Latency = 3;
727 let NumMicroOps = 4;
728 let ResourceCycles = [1,1,1,1];
729}
Craig Topper5a69a002018-03-21 06:28:42 +0000730def: InstRW<[BWWriteResGroup38], (instregex "CALL64pcrel32",
731 "SET(A|BE)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000732
733def BWWriteResGroup39 : SchedWriteRes<[BWPort0,BWPort1]> {
734 let Latency = 4;
735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000738def: InstRW<[BWWriteResGroup39], (instregex "(V?)CVTSD2SI64rr",
739 "(V?)CVTSD2SIrr",
740 "(V?)CVTSS2SI64rr",
741 "(V?)CVTSS2SIrr",
742 "(V?)CVTTSD2SI64rr",
743 "(V?)CVTTSD2SIrr",
744 "(V?)CVTTSS2SI64rr",
745 "(V?)CVTTSS2SIrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000746
747def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> {
748 let Latency = 4;
749 let NumMicroOps = 2;
750 let ResourceCycles = [1,1];
751}
Craig Topper5a69a002018-03-21 06:28:42 +0000752def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr",
753 "VPSLLDYrr",
754 "VPSLLQYrr",
755 "VPSLLWYrr",
756 "VPSRADYrr",
757 "VPSRAWYrr",
758 "VPSRLDYrr",
759 "VPSRLQYrr",
760 "VPSRLWYrr",
761 "VPTESTYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000762
763def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> {
764 let Latency = 4;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
768def: InstRW<[BWWriteResGroup41], (instregex "FNSTSW16r")>;
769
770def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> {
771 let Latency = 4;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000775def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000776def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPD2PIirr",
Craig Topper5a69a002018-03-21 06:28:42 +0000777 "MMX_CVTPI2PDirr",
778 "MMX_CVTPS2PIirr",
779 "MMX_CVTTPD2PIirr",
780 "MMX_CVTTPS2PIirr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000781 "(V?)CVTDQ2PDrr",
782 "(V?)CVTPD2DQrr",
783 "(V?)CVTPD2PSrr",
Craig Topper5a69a002018-03-21 06:28:42 +0000784 "VCVTPS2PHrr",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000785 "(V?)CVTSD2SSrr",
786 "(V?)CVTSI642SDrr",
787 "(V?)CVTSI2SDrr",
788 "(V?)CVTSI2SSrr",
789 "(V?)CVTTPD2DQrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000790
791def BWWriteResGroup42_16 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
792 let Latency = 4;
793 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000794 let ResourceCycles = [1,1,2];
Gadi Haber323f2e12017-10-24 20:19:47 +0000795}
Craig Topper5a69a002018-03-21 06:28:42 +0000796def: InstRW<[BWWriteResGroup42_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000797
798def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> {
799 let Latency = 4;
800 let NumMicroOps = 3;
801 let ResourceCycles = [1,1,1];
802}
803def: InstRW<[BWWriteResGroup43], (instregex "FNSTSWm")>;
804
805def BWWriteResGroup44 : SchedWriteRes<[BWPort1,BWPort4,BWPort237]> {
806 let Latency = 4;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,1,1];
809}
Craig Topper5a69a002018-03-21 06:28:42 +0000810def: InstRW<[BWWriteResGroup44], (instregex "ISTT_FP16m",
811 "ISTT_FP32m",
812 "ISTT_FP64m",
813 "IST_F16m",
814 "IST_F32m",
815 "IST_FP16m",
816 "IST_FP32m",
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000817 "IST_FP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000818
819def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
820 let Latency = 4;
821 let NumMicroOps = 4;
822 let ResourceCycles = [4];
823}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000824def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000825
826def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
827 let Latency = 4;
828 let NumMicroOps = 4;
829 let ResourceCycles = [1,3];
830}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000831def: InstRW<[BWWriteResGroup46], (instrs VZEROUPPER)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000832
833def BWWriteResGroup47 : SchedWriteRes<[BWPort0]> {
834 let Latency = 5;
835 let NumMicroOps = 1;
836 let ResourceCycles = [1];
837}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000838def: InstRW<[BWWriteResGroup47], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000839
Gadi Haber323f2e12017-10-24 20:19:47 +0000840def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> {
841 let Latency = 5;
842 let NumMicroOps = 1;
843 let ResourceCycles = [1];
844}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000845def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16",
Craig Topper5a69a002018-03-21 06:28:42 +0000846 "MOVSX(16|32|64)rm32",
847 "MOVSX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000848 "MOVZX(16|32|64)rm16",
849 "MOVZX(16|32|64)rm8",
Craig Topper5a69a002018-03-21 06:28:42 +0000850 "VBROADCASTSSrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000851 "(V?)MOVDDUPrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000852 "(V?)MOVSHDUPrm",
853 "(V?)MOVSLDUPrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000854 "VPBROADCASTDrm",
855 "VPBROADCASTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000856
857def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> {
858 let Latency = 5;
859 let NumMicroOps = 3;
860 let ResourceCycles = [1,2];
861}
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000862def: InstRW<[BWWriteResGroup50], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000863
864def BWWriteResGroup51 : SchedWriteRes<[BWPort1,BWPort6,BWPort06]> {
865 let Latency = 5;
866 let NumMicroOps = 3;
867 let ResourceCycles = [1,1,1];
868}
869def: InstRW<[BWWriteResGroup51], (instregex "STR(16|32|64)r")>;
870
871def BWWriteResGroup52 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000872 let Latency = 4;
Gadi Haber323f2e12017-10-24 20:19:47 +0000873 let NumMicroOps = 3;
874 let ResourceCycles = [1,1,1];
875}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000876def: InstRW<[BWWriteResGroup52], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000877
878def BWWriteResGroup53 : SchedWriteRes<[BWPort0,BWPort4,BWPort237,BWPort15]> {
879 let Latency = 5;
880 let NumMicroOps = 4;
881 let ResourceCycles = [1,1,1,1];
882}
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000883def: InstRW<[BWWriteResGroup53], (instregex "VMASKMOVPD(Y?)mr",
884 "VMASKMOVPS(Y?)mr",
885 "VPMASKMOVD(Y?)mr",
886 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000887
888def BWWriteResGroup54 : SchedWriteRes<[BWPort6,BWPort0156]> {
889 let Latency = 5;
890 let NumMicroOps = 5;
891 let ResourceCycles = [1,4];
892}
893def: InstRW<[BWWriteResGroup54], (instregex "PAUSE")>;
894
895def BWWriteResGroup55 : SchedWriteRes<[BWPort06,BWPort0156]> {
896 let Latency = 5;
897 let NumMicroOps = 5;
898 let ResourceCycles = [1,4];
899}
900def: InstRW<[BWWriteResGroup55], (instregex "XSETBV")>;
901
902def BWWriteResGroup56 : SchedWriteRes<[BWPort06,BWPort0156]> {
903 let Latency = 5;
904 let NumMicroOps = 5;
905 let ResourceCycles = [2,3];
906}
Craig Topper5a69a002018-03-21 06:28:42 +0000907def: InstRW<[BWWriteResGroup56], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000908
909def BWWriteResGroup57 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> {
910 let Latency = 5;
911 let NumMicroOps = 6;
912 let ResourceCycles = [1,1,4];
913}
Craig Topper5a69a002018-03-21 06:28:42 +0000914def: InstRW<[BWWriteResGroup57], (instregex "PUSHF16", "PUSHF64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000915
916def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> {
917 let Latency = 6;
918 let NumMicroOps = 1;
919 let ResourceCycles = [1];
920}
Craig Topper5a69a002018-03-21 06:28:42 +0000921def: InstRW<[BWWriteResGroup58], (instregex "LD_F32m",
922 "LD_F64m",
923 "LD_F80m",
924 "VBROADCASTF128",
925 "VBROADCASTI128",
926 "VBROADCASTSDYrm",
927 "VBROADCASTSSYrm",
928 "VLDDQUYrm",
929 "VMOVAPDYrm",
930 "VMOVAPSYrm",
931 "VMOVDDUPYrm",
932 "VMOVDQAYrm",
933 "VMOVDQUYrm",
934 "VMOVNTDQAYrm",
935 "VMOVSHDUPYrm",
936 "VMOVSLDUPYrm",
937 "VMOVUPDYrm",
938 "VMOVUPSYrm",
939 "VPBROADCASTDYrm",
940 "VPBROADCASTQYrm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000941 "(V?)ROUNDPD(Y?)r",
942 "(V?)ROUNDPS(Y?)r",
943 "(V?)ROUNDSDr",
944 "(V?)ROUNDSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000945
946def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> {
947 let Latency = 6;
948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000951def: InstRW<[BWWriteResGroup59], (instregex "VCVTPH2PS(Y?)rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +0000952 "(V?)CVTPS2PDrm",
953 "(V?)CVTSS2SDrm",
Craig Topper5a69a002018-03-21 06:28:42 +0000954 "VPSLLVQrm",
955 "VPSRLVQrm",
956 "VTESTPDrm",
957 "VTESTPSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000958
959def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> {
960 let Latency = 6;
961 let NumMicroOps = 2;
962 let ResourceCycles = [1,1];
963}
Craig Topper5a69a002018-03-21 06:28:42 +0000964def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr",
965 "VCVTPD2DQYrr",
966 "VCVTPD2PSYrr",
967 "VCVTPS2PHYrr",
968 "VCVTTPD2DQYrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000969
Gadi Haber323f2e12017-10-24 20:19:47 +0000970def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
971 let Latency = 6;
972 let NumMicroOps = 2;
973 let ResourceCycles = [1,1];
974}
Craig Topper5a69a002018-03-21 06:28:42 +0000975def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64",
976 "JMP(16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000977
978def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> {
979 let Latency = 6;
980 let NumMicroOps = 2;
981 let ResourceCycles = [1,1];
982}
Craig Topperdfccafe2018-04-18 06:41:25 +0000983def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +0000984def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
985 ADCX32rm, ADCX64rm,
986 ADOX32rm, ADOX64rm,
987 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000988
989def BWWriteResGroup64 : SchedWriteRes<[BWPort23,BWPort15]> {
990 let Latency = 6;
991 let NumMicroOps = 2;
992 let ResourceCycles = [1,1];
993}
Craig Topper5a69a002018-03-21 06:28:42 +0000994def: InstRW<[BWWriteResGroup64], (instregex "ANDN(32|64)rm",
995 "BLSI(32|64)rm",
996 "BLSMSK(32|64)rm",
997 "BLSR(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000998 "MOVBE(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +0000999
1000def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> {
1001 let Latency = 6;
1002 let NumMicroOps = 2;
1003 let ResourceCycles = [1,1];
1004}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001005def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm",
Craig Topper5a69a002018-03-21 06:28:42 +00001006 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001007 "VPBLENDDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001008
1009def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> {
1010 let Latency = 6;
1011 let NumMicroOps = 2;
1012 let ResourceCycles = [1,1];
1013}
Craig Topper2d451e72018-03-18 08:38:06 +00001014def: InstRW<[BWWriteResGroup66], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001015def: InstRW<[BWWriteResGroup66], (instregex "POP(16|32|64)rmr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001016
1017def BWWriteResGroup67 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1018 let Latency = 6;
1019 let NumMicroOps = 4;
1020 let ResourceCycles = [1,1,2];
1021}
Craig Topper5a69a002018-03-21 06:28:42 +00001022def: InstRW<[BWWriteResGroup67], (instregex "SHLD(16|32|64)rrCL",
1023 "SHRD(16|32|64)rrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001024
1025def BWWriteResGroup68 : SchedWriteRes<[BWPort1,BWPort6,BWPort06,BWPort0156]> {
1026 let Latency = 6;
1027 let NumMicroOps = 4;
1028 let ResourceCycles = [1,1,1,1];
1029}
1030def: InstRW<[BWWriteResGroup68], (instregex "SLDT(16|32|64)r")>;
1031
1032def BWWriteResGroup69 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1033 let Latency = 6;
1034 let NumMicroOps = 4;
1035 let ResourceCycles = [1,1,1,1];
1036}
Craig Topper5a69a002018-03-21 06:28:42 +00001037def: InstRW<[BWWriteResGroup69], (instregex "BTC(16|32|64)mi8",
1038 "BTR(16|32|64)mi8",
1039 "BTS(16|32|64)mi8",
1040 "SAR(8|16|32|64)m1",
1041 "SAR(8|16|32|64)mi",
1042 "SHL(8|16|32|64)m1",
1043 "SHL(8|16|32|64)mi",
1044 "SHR(8|16|32|64)m1",
1045 "SHR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001046
1047def BWWriteResGroup70 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1048 let Latency = 6;
1049 let NumMicroOps = 4;
1050 let ResourceCycles = [1,1,1,1];
1051}
Craig Topperf0d04262018-04-06 16:16:48 +00001052def: InstRW<[BWWriteResGroup70], (instregex "POP(16|32|64)rmm",
1053 "PUSH(16|32|64)rmm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001054
1055def BWWriteResGroup71 : SchedWriteRes<[BWPort6,BWPort0156]> {
1056 let Latency = 6;
1057 let NumMicroOps = 6;
1058 let ResourceCycles = [1,5];
1059}
1060def: InstRW<[BWWriteResGroup71], (instregex "STD")>;
1061
Gadi Haber323f2e12017-10-24 20:19:47 +00001062def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> {
1063 let Latency = 7;
1064 let NumMicroOps = 2;
1065 let ResourceCycles = [1,1];
1066}
Craig Topper5a69a002018-03-21 06:28:42 +00001067def: InstRW<[BWWriteResGroup73], (instregex "VPSLLDYrm",
1068 "VPSLLQYrm",
1069 "VPSLLVQYrm",
1070 "VPSLLWYrm",
1071 "VPSRADYrm",
1072 "VPSRAWYrm",
1073 "VPSRLDYrm",
1074 "VPSRLQYrm",
1075 "VPSRLVQYrm",
1076 "VPSRLWYrm",
1077 "VTESTPDYrm",
1078 "VTESTPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001079
1080def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> {
1081 let Latency = 7;
1082 let NumMicroOps = 2;
1083 let ResourceCycles = [1,1];
1084}
Craig Topper5a69a002018-03-21 06:28:42 +00001085def: InstRW<[BWWriteResGroup74], (instregex "FCOM32m",
1086 "FCOM64m",
1087 "FCOMP32m",
1088 "FCOMP64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001089
1090def BWWriteResGroup75 : SchedWriteRes<[BWPort5,BWPort23]> {
1091 let Latency = 7;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001095def: InstRW<[BWWriteResGroup75], (instregex "VPACKSSDWYrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001096 "VPACKSSWBYrm",
1097 "VPACKUSDWYrm",
1098 "VPACKUSWBYrm",
1099 "VPALIGNRYrmi",
1100 "VPBLENDWYrmi",
1101 "VPERMILPDYmi",
1102 "VPERMILPDYrm",
1103 "VPERMILPSYmi",
1104 "VPERMILPSYrm",
1105 "VPSHUFBYrm",
1106 "VPSHUFDYmi",
1107 "VPSHUFHWYmi",
1108 "VPSHUFLWYmi",
1109 "VPUNPCKHBWYrm",
1110 "VPUNPCKHDQYrm",
1111 "VPUNPCKHQDQYrm",
1112 "VPUNPCKHWDYrm",
1113 "VPUNPCKLBWYrm",
1114 "VPUNPCKLDQYrm",
1115 "VPUNPCKLQDQYrm",
1116 "VPUNPCKLWDYrm",
1117 "VSHUFPDYrmi",
1118 "VSHUFPSYrmi",
1119 "VUNPCKHPDYrm",
1120 "VUNPCKHPSYrm",
1121 "VUNPCKLPDYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001122 "VUNPCKLPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001123
1124def BWWriteResGroup76 : SchedWriteRes<[BWPort23,BWPort15]> {
1125 let Latency = 7;
1126 let NumMicroOps = 2;
1127 let ResourceCycles = [1,1];
1128}
Craig Topper5a69a002018-03-21 06:28:42 +00001129def: InstRW<[BWWriteResGroup76], (instregex "VPABSBYrm",
1130 "VPABSDYrm",
1131 "VPABSWYrm",
1132 "VPADDBYrm",
1133 "VPADDDYrm",
1134 "VPADDQYrm",
1135 "VPADDSBYrm",
1136 "VPADDSWYrm",
1137 "VPADDUSBYrm",
1138 "VPADDUSWYrm",
1139 "VPADDWYrm",
1140 "VPAVGBYrm",
1141 "VPAVGWYrm",
1142 "VPCMPEQBYrm",
1143 "VPCMPEQDYrm",
1144 "VPCMPEQQYrm",
1145 "VPCMPEQWYrm",
1146 "VPCMPGTBYrm",
1147 "VPCMPGTDYrm",
1148 "VPCMPGTWYrm",
1149 "VPMAXSBYrm",
1150 "VPMAXSDYrm",
1151 "VPMAXSWYrm",
1152 "VPMAXUBYrm",
1153 "VPMAXUDYrm",
1154 "VPMAXUWYrm",
1155 "VPMINSBYrm",
1156 "VPMINSDYrm",
1157 "VPMINSWYrm",
1158 "VPMINUBYrm",
1159 "VPMINUDYrm",
1160 "VPMINUWYrm",
1161 "VPSIGNBYrm",
1162 "VPSIGNDYrm",
1163 "VPSIGNWYrm",
1164 "VPSUBBYrm",
1165 "VPSUBDYrm",
1166 "VPSUBQYrm",
1167 "VPSUBSBYrm",
1168 "VPSUBSWYrm",
1169 "VPSUBUSBYrm",
1170 "VPSUBUSWYrm",
1171 "VPSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001172
1173def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> {
1174 let Latency = 7;
1175 let NumMicroOps = 2;
1176 let ResourceCycles = [1,1];
1177}
Craig Topper5a69a002018-03-21 06:28:42 +00001178def: InstRW<[BWWriteResGroup77], (instregex "VBLENDPDYrmi",
1179 "VBLENDPSYrmi",
1180 "VPANDNYrm",
1181 "VPANDYrm",
1182 "VPBLENDDYrmi",
1183 "VPORYrm",
1184 "VPXORYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001185
Gadi Haber323f2e12017-10-24 20:19:47 +00001186def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> {
1187 let Latency = 7;
1188 let NumMicroOps = 3;
1189 let ResourceCycles = [2,1];
1190}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001191def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001192 "MMX_PACKSSWBirm",
1193 "MMX_PACKUSWBirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001194 "VMASKMOVPDrm",
1195 "VMASKMOVPSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001196 "VPMASKMOVDrm",
1197 "VPMASKMOVQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001198
1199def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> {
1200 let Latency = 7;
1201 let NumMicroOps = 3;
1202 let ResourceCycles = [1,2];
1203}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001204def: InstRW<[BWWriteResGroup80], (instrs LEAVE, LEAVE64,
1205 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001206
1207def BWWriteResGroup81 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1208 let Latency = 7;
1209 let NumMicroOps = 3;
1210 let ResourceCycles = [1,1,1];
1211}
Craig Topper5a69a002018-03-21 06:28:42 +00001212def: InstRW<[BWWriteResGroup81], (instregex "PSLLDrm",
1213 "PSLLQrm",
1214 "PSLLWrm",
1215 "PSRADrm",
1216 "PSRAWrm",
1217 "PSRLDrm",
1218 "PSRLQrm",
1219 "PSRLWrm",
1220 "PTESTrm",
1221 "VPSLLDrm",
1222 "VPSLLQrm",
1223 "VPSLLWrm",
1224 "VPSRADrm",
1225 "VPSRAWrm",
1226 "VPSRLDrm",
1227 "VPSRLQrm",
1228 "VPSRLWrm",
1229 "VPTESTrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001230
1231def BWWriteResGroup82 : SchedWriteRes<[BWPort0,BWPort01,BWPort23]> {
1232 let Latency = 7;
1233 let NumMicroOps = 3;
1234 let ResourceCycles = [1,1,1];
1235}
1236def: InstRW<[BWWriteResGroup82], (instregex "FLDCW16m")>;
1237
Gadi Haber323f2e12017-10-24 20:19:47 +00001238def BWWriteResGroup84 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1239 let Latency = 7;
1240 let NumMicroOps = 3;
1241 let ResourceCycles = [1,1,1];
1242}
Craig Topper5a69a002018-03-21 06:28:42 +00001243def: InstRW<[BWWriteResGroup84], (instregex "LRETQ",
1244 "RETQ")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001245
Gadi Haber323f2e12017-10-24 20:19:47 +00001246def BWWriteResGroup86 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1247 let Latency = 7;
1248 let NumMicroOps = 3;
1249 let ResourceCycles = [1,1,1];
1250}
Craig Topperf4cd9082018-01-19 05:47:32 +00001251def: InstRW<[BWWriteResGroup86], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001252
1253def BWWriteResGroup87 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06]> {
1254 let Latency = 7;
1255 let NumMicroOps = 5;
1256 let ResourceCycles = [1,1,1,2];
1257}
Craig Topper5a69a002018-03-21 06:28:42 +00001258def: InstRW<[BWWriteResGroup87], (instregex "ROL(8|16|32|64)m1",
1259 "ROL(8|16|32|64)mi",
1260 "ROR(8|16|32|64)m1",
1261 "ROR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001262
1263def BWWriteResGroup88 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1264 let Latency = 7;
1265 let NumMicroOps = 5;
1266 let ResourceCycles = [1,1,1,2];
1267}
Craig Topper5a69a002018-03-21 06:28:42 +00001268def: InstRW<[BWWriteResGroup88], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001269
1270def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
1271 let Latency = 7;
1272 let NumMicroOps = 5;
1273 let ResourceCycles = [1,1,1,1,1];
1274}
Craig Topper5a69a002018-03-21 06:28:42 +00001275def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m",
1276 "FARCALL64")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001277
1278def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> {
1279 let Latency = 7;
1280 let NumMicroOps = 7;
1281 let ResourceCycles = [2,2,1,2];
1282}
Craig Topper2d451e72018-03-18 08:38:06 +00001283def: InstRW<[BWWriteResGroup90], (instrs LOOP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001284
1285def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> {
1286 let Latency = 8;
1287 let NumMicroOps = 2;
1288 let ResourceCycles = [1,1];
1289}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001290def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
Craig Topper5a69a002018-03-21 06:28:42 +00001291 "PDEP(32|64)rm",
1292 "PEXT(32|64)rm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001293 "(V?)CVTDQ2PSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001294
1295def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001296 let Latency = 8;
Gadi Haber323f2e12017-10-24 20:19:47 +00001297 let NumMicroOps = 3;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001298 let ResourceCycles = [1,1,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001299}
Craig Topperf846e2d2018-04-19 05:34:05 +00001300def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001301
Craig Topperf846e2d2018-04-19 05:34:05 +00001302def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort06, BWPort0156, BWPort23]> {
1303 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001304 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001305 let ResourceCycles = [1,1,2,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00001306}
Craig Topper5a69a002018-03-21 06:28:42 +00001307def: InstRW<[BWWriteResGroup91_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001308
Gadi Haber323f2e12017-10-24 20:19:47 +00001309def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> {
1310 let Latency = 8;
1311 let NumMicroOps = 2;
1312 let ResourceCycles = [1,1];
1313}
Craig Topper5a69a002018-03-21 06:28:42 +00001314def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm",
1315 "VPMOVSXBQYrm",
1316 "VPMOVSXBWYrm",
1317 "VPMOVSXDQYrm",
1318 "VPMOVSXWDYrm",
1319 "VPMOVSXWQYrm",
1320 "VPMOVZXWDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001321
1322def BWWriteResGroup93 : SchedWriteRes<[BWPort01,BWPort23]> {
1323 let Latency = 8;
1324 let NumMicroOps = 2;
1325 let ResourceCycles = [1,1];
1326}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001327def: InstRW<[BWWriteResGroup93], (instregex "(V?)MULPDrm",
1328 "(V?)MULPSrm",
1329 "(V?)MULSDrm",
1330 "(V?)MULSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001331
1332def BWWriteResGroup94 : SchedWriteRes<[BWPort5,BWPort23]> {
1333 let Latency = 8;
1334 let NumMicroOps = 3;
1335 let ResourceCycles = [2,1];
1336}
Craig Topper5a69a002018-03-21 06:28:42 +00001337def: InstRW<[BWWriteResGroup94], (instregex "VBLENDVPDYrm",
1338 "VBLENDVPSYrm",
1339 "VMASKMOVPDYrm",
1340 "VMASKMOVPSYrm",
1341 "VPBLENDVBYrm",
1342 "VPMASKMOVDYrm",
1343 "VPMASKMOVQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001344
1345def BWWriteResGroup95 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1346 let Latency = 8;
1347 let NumMicroOps = 4;
1348 let ResourceCycles = [2,1,1];
1349}
Craig Topper5a69a002018-03-21 06:28:42 +00001350def: InstRW<[BWWriteResGroup95], (instregex "VPSLLVDrm",
1351 "VPSRAVDrm",
1352 "VPSRLVDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001353
Gadi Haber323f2e12017-10-24 20:19:47 +00001354def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1355 let Latency = 8;
1356 let NumMicroOps = 5;
1357 let ResourceCycles = [1,1,1,2];
1358}
Craig Topper5a69a002018-03-21 06:28:42 +00001359def: InstRW<[BWWriteResGroup97], (instregex "RCL(8|16|32|64)m1",
1360 "RCL(8|16|32|64)mi",
1361 "RCR(8|16|32|64)m1",
1362 "RCR(8|16|32|64)mi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001363
1364def BWWriteResGroup98 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> {
1365 let Latency = 8;
1366 let NumMicroOps = 5;
1367 let ResourceCycles = [1,1,2,1];
1368}
Craig Topper13a16502018-03-19 00:56:09 +00001369def: InstRW<[BWWriteResGroup98], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001370
1371def BWWriteResGroup99 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort0156]> {
1372 let Latency = 8;
1373 let NumMicroOps = 6;
1374 let ResourceCycles = [1,1,1,3];
1375}
Craig Topper9f834812018-04-01 21:54:24 +00001376def: InstRW<[BWWriteResGroup99], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001377
1378def BWWriteResGroup100 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1379 let Latency = 8;
1380 let NumMicroOps = 6;
1381 let ResourceCycles = [1,1,1,2,1];
1382}
Craig Topper9f834812018-04-01 21:54:24 +00001383def: InstRW<[BWWriteResGroup100], (instregex "ADC(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001384 "CMPXCHG(8|16|32|64)rm",
1385 "ROL(8|16|32|64)mCL",
1386 "SAR(8|16|32|64)mCL",
1387 "SBB(8|16|32|64)mi",
Craig Topper5a69a002018-03-21 06:28:42 +00001388 "SHL(8|16|32|64)mCL",
1389 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001390def: InstRW<[BWWriteResGroup100, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1391 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001392
1393def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> {
1394 let Latency = 9;
1395 let NumMicroOps = 2;
1396 let ResourceCycles = [1,1];
1397}
Craig Topper5a69a002018-03-21 06:28:42 +00001398def: InstRW<[BWWriteResGroup101], (instregex "ADD_F32m",
1399 "ADD_F64m",
1400 "ILD_F16m",
1401 "ILD_F32m",
1402 "ILD_F64m",
1403 "SUBR_F32m",
1404 "SUBR_F64m",
1405 "SUB_F32m",
1406 "SUB_F64m",
1407 "VADDPDYrm",
1408 "VADDPSYrm",
1409 "VADDSUBPDYrm",
1410 "VADDSUBPSYrm",
1411 "VCMPPDYrmi",
1412 "VCMPPSYrmi",
Craig Topper5a69a002018-03-21 06:28:42 +00001413 "VCVTPS2DQYrm",
1414 "VCVTTPS2DQYrm",
1415 "VMAX(C?)PDYrm",
1416 "VMAX(C?)PSYrm",
1417 "VMIN(C?)PDYrm",
1418 "VMIN(C?)PSYrm",
1419 "VSUBPDYrm",
1420 "VSUBPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001421
1422def BWWriteResGroup102 : SchedWriteRes<[BWPort5,BWPort23]> {
1423 let Latency = 9;
1424 let NumMicroOps = 2;
1425 let ResourceCycles = [1,1];
1426}
Craig Topper5a69a002018-03-21 06:28:42 +00001427def: InstRW<[BWWriteResGroup102], (instregex "VPERM2F128rm",
1428 "VPERM2I128rm",
1429 "VPERMDYrm",
1430 "VPERMPDYmi",
1431 "VPERMPSYrm",
1432 "VPERMQYmi",
1433 "VPMOVZXBDYrm",
1434 "VPMOVZXBQYrm",
1435 "VPMOVZXBWYrm",
1436 "VPMOVZXDQYrm",
1437 "VPMOVZXWQYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001438
1439def BWWriteResGroup103 : SchedWriteRes<[BWPort01,BWPort23]> {
1440 let Latency = 9;
1441 let NumMicroOps = 2;
1442 let ResourceCycles = [1,1];
1443}
Craig Topper5a69a002018-03-21 06:28:42 +00001444def: InstRW<[BWWriteResGroup103], (instregex "VMULPDYrm",
1445 "VMULPSYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001446
1447def BWWriteResGroup104 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1448 let Latency = 9;
1449 let NumMicroOps = 3;
1450 let ResourceCycles = [1,1,1];
1451}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001452def: InstRW<[BWWriteResGroup104], (instregex "(V?)DPPDrri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001453
1454def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1455 let Latency = 9;
1456 let NumMicroOps = 3;
1457 let ResourceCycles = [1,1,1];
1458}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001459def: InstRW<[BWWriteResGroup105], (instregex "(V?)CVTSD2SI64rm",
1460 "(V?)CVTSD2SIrm",
1461 "(V?)CVTSS2SI64rm",
1462 "(V?)CVTSS2SIrm",
1463 "(V?)CVTTSD2SI64rm",
1464 "(V?)CVTTSD2SIrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001465 "VCVTTSS2SI64rm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001466 "(V?)CVTTSS2SIrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001467
1468def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1469 let Latency = 9;
1470 let NumMicroOps = 3;
1471 let ResourceCycles = [1,1,1];
1472}
1473def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>;
1474
1475def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1476 let Latency = 9;
1477 let NumMicroOps = 3;
1478 let ResourceCycles = [1,1,1];
1479}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001480def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001481def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2DQrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001482 "CVTPD2PSrm",
Craig Topper5a69a002018-03-21 06:28:42 +00001483 "CVTTPD2DQrm",
1484 "MMX_CVTPD2PIirm",
1485 "MMX_CVTPI2PDirm",
1486 "MMX_CVTTPD2PIirm",
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001487 "(V?)CVTDQ2PDrm",
1488 "(V?)CVTSD2SSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001489
1490def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
1491 let Latency = 9;
1492 let NumMicroOps = 3;
1493 let ResourceCycles = [1,1,1];
1494}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001495def: InstRW<[BWWriteResGroup108], (instregex "VPBROADCASTB(Y?)rm",
1496 "VPBROADCASTW(Y?)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001497
1498def BWWriteResGroup109 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1499 let Latency = 9;
1500 let NumMicroOps = 4;
1501 let ResourceCycles = [2,1,1];
1502}
Craig Topper5a69a002018-03-21 06:28:42 +00001503def: InstRW<[BWWriteResGroup109], (instregex "VPSLLVDYrm",
1504 "VPSRAVDYrm",
1505 "VPSRLVDYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001506
1507def BWWriteResGroup110 : SchedWriteRes<[BWPort5,BWPort23,BWPort15]> {
1508 let Latency = 9;
1509 let NumMicroOps = 4;
1510 let ResourceCycles = [2,1,1];
1511}
Craig Topper5a69a002018-03-21 06:28:42 +00001512def: InstRW<[BWWriteResGroup110], (instregex "VPHADDDYrm",
1513 "VPHADDSWYrm",
1514 "VPHADDWYrm",
1515 "VPHSUBDYrm",
1516 "VPHSUBSWYrm",
1517 "VPHSUBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001518
1519def BWWriteResGroup111 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort0156]> {
1520 let Latency = 9;
1521 let NumMicroOps = 4;
1522 let ResourceCycles = [1,1,1,1];
1523}
Craig Topper5a69a002018-03-21 06:28:42 +00001524def: InstRW<[BWWriteResGroup111], (instregex "SHLD(16|32|64)mri8",
1525 "SHRD(16|32|64)mri8")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001526
1527def BWWriteResGroup112 : SchedWriteRes<[BWPort23,BWPort06,BWPort0156]> {
1528 let Latency = 9;
1529 let NumMicroOps = 5;
1530 let ResourceCycles = [1,1,3];
1531}
1532def: InstRW<[BWWriteResGroup112], (instregex "RDRAND(16|32|64)r")>;
1533
1534def BWWriteResGroup113 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1535 let Latency = 9;
1536 let NumMicroOps = 5;
1537 let ResourceCycles = [1,2,1,1];
1538}
Craig Topper5a69a002018-03-21 06:28:42 +00001539def: InstRW<[BWWriteResGroup113], (instregex "LAR(16|32|64)rm",
1540 "LSL(16|32|64)rm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001541
Gadi Haber323f2e12017-10-24 20:19:47 +00001542def BWWriteResGroup115 : SchedWriteRes<[BWPort0,BWPort23]> {
1543 let Latency = 10;
1544 let NumMicroOps = 2;
1545 let ResourceCycles = [1,1];
1546}
Simon Pilgrime5e4bf02018-04-23 22:45:04 +00001547def: InstRW<[BWWriteResGroup115], (instregex "(V?)PCMPGTQrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001548
Gadi Haber323f2e12017-10-24 20:19:47 +00001549def BWWriteResGroup117 : SchedWriteRes<[BWPort1,BWPort23]> {
1550 let Latency = 10;
1551 let NumMicroOps = 3;
1552 let ResourceCycles = [2,1];
1553}
Craig Topper5a69a002018-03-21 06:28:42 +00001554def: InstRW<[BWWriteResGroup117], (instregex "FICOM16m",
1555 "FICOM32m",
1556 "FICOMP16m",
1557 "FICOMP32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001558
1559def BWWriteResGroup118 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1560 let Latency = 10;
1561 let NumMicroOps = 3;
1562 let ResourceCycles = [1,1,1];
1563}
1564def: InstRW<[BWWriteResGroup118], (instregex "VPTESTYrm")>;
1565
Gadi Haber323f2e12017-10-24 20:19:47 +00001566def BWWriteResGroup120 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1567 let Latency = 10;
1568 let NumMicroOps = 4;
1569 let ResourceCycles = [1,1,1,1];
1570}
1571def: InstRW<[BWWriteResGroup120], (instregex "CVTTSS2SI64rm")>;
1572
1573def BWWriteResGroup121 : SchedWriteRes<[BWPort1,BWPort23,BWPort06,BWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001574 let Latency = 9;
Gadi Haber323f2e12017-10-24 20:19:47 +00001575 let NumMicroOps = 4;
1576 let ResourceCycles = [1,1,1,1];
1577}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001578def: InstRW<[BWWriteResGroup121], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001579
Craig Topper8104f262018-04-02 05:33:28 +00001580def BWWriteResGroup122 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001581 let Latency = 11;
1582 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001583 let ResourceCycles = [1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001584}
Craig Topper8104f262018-04-02 05:33:28 +00001585def: InstRW<[BWWriteResGroup122], (instregex "(V?)DIVPSrr")>;
1586
1587def BWWriteResGroup122_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1588 let Latency = 11;
1589 let NumMicroOps = 1;
1590 let ResourceCycles = [1,3]; // Really 2.5 cycle throughput
1591}
1592def: InstRW<[BWWriteResGroup122_1], (instregex "(V?)DIVSSrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001593
1594def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> {
1595 let Latency = 11;
1596 let NumMicroOps = 2;
1597 let ResourceCycles = [1,1];
1598}
Craig Topper5a69a002018-03-21 06:28:42 +00001599def: InstRW<[BWWriteResGroup123], (instregex "MUL_F32m",
1600 "MUL_F64m",
1601 "VPCMPGTQYrm",
1602 "VPMADDUBSWYrm",
1603 "VPMADDWDYrm",
1604 "VPMULDQYrm",
1605 "VPMULHRSWYrm",
1606 "VPMULHUWYrm",
1607 "VPMULHWYrm",
1608 "VPMULLWYrm",
1609 "VPMULUDQYrm",
1610 "VPSADBWYrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001611
Gadi Haber323f2e12017-10-24 20:19:47 +00001612def BWWriteResGroup126 : SchedWriteRes<[BWPort0,BWPort015]> {
1613 let Latency = 11;
1614 let NumMicroOps = 3;
1615 let ResourceCycles = [2,1];
1616}
Craig Topper5a69a002018-03-21 06:28:42 +00001617def: InstRW<[BWWriteResGroup126], (instregex "VRCPPSYr",
1618 "VRSQRTPSYr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001619
1620def BWWriteResGroup127 : SchedWriteRes<[BWPort1,BWPort23]> {
1621 let Latency = 11;
1622 let NumMicroOps = 3;
1623 let ResourceCycles = [2,1];
1624}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001625def: InstRW<[BWWriteResGroup127], (instregex "(V?)ROUNDPDm",
1626 "(V?)ROUNDPSm",
1627 "(V?)ROUNDSDm",
1628 "(V?)ROUNDSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001629
1630def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> {
1631 let Latency = 11;
1632 let NumMicroOps = 3;
1633 let ResourceCycles = [1,1,1];
1634}
1635def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>;
1636
Gadi Haber323f2e12017-10-24 20:19:47 +00001637def BWWriteResGroup130 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1638 let Latency = 11;
1639 let NumMicroOps = 6;
1640 let ResourceCycles = [1,1,1,1,2];
1641}
Craig Topper5a69a002018-03-21 06:28:42 +00001642def: InstRW<[BWWriteResGroup130], (instregex "SHLD(16|32|64)mrCL",
1643 "SHRD(16|32|64)mrCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001644
1645def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> {
1646 let Latency = 11;
1647 let NumMicroOps = 7;
1648 let ResourceCycles = [2,2,3];
1649}
Craig Topper5a69a002018-03-21 06:28:42 +00001650def: InstRW<[BWWriteResGroup131], (instregex "RCL(16|32|64)rCL",
1651 "RCR(16|32|64)rCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001652
1653def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1654 let Latency = 11;
1655 let NumMicroOps = 9;
1656 let ResourceCycles = [1,4,1,3];
1657}
1658def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>;
1659
1660def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> {
1661 let Latency = 11;
1662 let NumMicroOps = 11;
1663 let ResourceCycles = [2,9];
1664}
Craig Topper2d451e72018-03-18 08:38:06 +00001665def: InstRW<[BWWriteResGroup133], (instrs LOOPE)>;
1666def: InstRW<[BWWriteResGroup133], (instrs LOOPNE)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001667
Gadi Haber323f2e12017-10-24 20:19:47 +00001668def BWWriteResGroup135 : SchedWriteRes<[BWPort1,BWPort23]> {
1669 let Latency = 12;
1670 let NumMicroOps = 3;
1671 let ResourceCycles = [2,1];
1672}
Craig Topper5a69a002018-03-21 06:28:42 +00001673def: InstRW<[BWWriteResGroup135], (instregex "ADD_FI16m",
1674 "ADD_FI32m",
1675 "SUBR_FI16m",
1676 "SUBR_FI32m",
1677 "SUB_FI16m",
1678 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00001679 "VROUNDPDYm",
1680 "VROUNDPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001681
Craig Topper8104f262018-04-02 05:33:28 +00001682def BWWriteResGroup137 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001683 let Latency = 11;
Gadi Haber323f2e12017-10-24 20:19:47 +00001684 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001685 let ResourceCycles = [1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001686}
Craig Topper8104f262018-04-02 05:33:28 +00001687def: InstRW<[BWWriteResGroup137], (instregex "(V?)SQRTPSr")>;
1688
1689def BWWriteResGroup137_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1690 let Latency = 11;
1691 let NumMicroOps = 1;
1692 let ResourceCycles = [1,4];
1693}
1694def: InstRW<[BWWriteResGroup137_1], (instregex "(V?)SQRTSSr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001695
1696def BWWriteResGroup138 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> {
1697 let Latency = 13;
1698 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001699 let ResourceCycles = [1,2,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001700}
1701def: InstRW<[BWWriteResGroup138], (instregex "VMPSADBWYrmi")>;
1702
Craig Topper8104f262018-04-02 05:33:28 +00001703def BWWriteResGroup139 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001704 let Latency = 14;
1705 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001706 let ResourceCycles = [1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001707}
Craig Topper8104f262018-04-02 05:33:28 +00001708def: InstRW<[BWWriteResGroup139], (instregex "(V?)DIVPDrr")>;
1709
1710def BWWriteResGroup139_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1711 let Latency = 14;
1712 let NumMicroOps = 1;
1713 let ResourceCycles = [1,4];
1714}
1715def: InstRW<[BWWriteResGroup139_1], (instregex "(V?)DIVSDrr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001716
Gadi Haber323f2e12017-10-24 20:19:47 +00001717def BWWriteResGroup141 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1718 let Latency = 14;
1719 let NumMicroOps = 3;
1720 let ResourceCycles = [1,1,1];
1721}
Craig Topper5a69a002018-03-21 06:28:42 +00001722def: InstRW<[BWWriteResGroup141], (instregex "MUL_FI16m",
1723 "MUL_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001724
1725def BWWriteResGroup142 : SchedWriteRes<[BWPort0,BWPort1,BWPort5]> {
1726 let Latency = 14;
1727 let NumMicroOps = 4;
1728 let ResourceCycles = [2,1,1];
1729}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001730def: InstRW<[BWWriteResGroup142], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001731
1732def BWWriteResGroup143 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1733 let Latency = 14;
1734 let NumMicroOps = 4;
1735 let ResourceCycles = [1,1,1,1];
1736}
Craig Topper5a69a002018-03-21 06:28:42 +00001737def: InstRW<[BWWriteResGroup143], (instregex "(V?)DPPDrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001738
1739def BWWriteResGroup144 : SchedWriteRes<[BWPort1,BWPort6,BWPort23,BWPort0156]> {
1740 let Latency = 14;
1741 let NumMicroOps = 8;
1742 let ResourceCycles = [2,2,1,3];
1743}
1744def: InstRW<[BWWriteResGroup144], (instregex "LAR(16|32|64)rr")>;
1745
1746def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> {
1747 let Latency = 14;
1748 let NumMicroOps = 10;
1749 let ResourceCycles = [2,3,1,4];
1750}
1751def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>;
1752
1753def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> {
1754 let Latency = 14;
1755 let NumMicroOps = 12;
1756 let ResourceCycles = [2,1,4,5];
1757}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001758def: InstRW<[BWWriteResGroup146], (instrs XCH_F)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001759
1760def BWWriteResGroup147 : SchedWriteRes<[BWPort0]> {
1761 let Latency = 15;
1762 let NumMicroOps = 1;
1763 let ResourceCycles = [1];
1764}
Craig Topper5a69a002018-03-21 06:28:42 +00001765def: InstRW<[BWWriteResGroup147], (instregex "DIVR_FPrST0",
1766 "DIVR_FST0r",
1767 "DIVR_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001768
Gadi Haber323f2e12017-10-24 20:19:47 +00001769def BWWriteResGroup149 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1770 let Latency = 15;
1771 let NumMicroOps = 10;
1772 let ResourceCycles = [1,1,1,4,1,2];
1773}
Craig Topper13a16502018-03-19 00:56:09 +00001774def: InstRW<[BWWriteResGroup149], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001775
Craig Topper8104f262018-04-02 05:33:28 +00001776def BWWriteResGroup150 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001777 let Latency = 16;
1778 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001779 let ResourceCycles = [1,1,5];
Gadi Haber323f2e12017-10-24 20:19:47 +00001780}
Craig Topper5a69a002018-03-21 06:28:42 +00001781def: InstRW<[BWWriteResGroup150], (instregex "(V?)DIVPSrm",
1782 "(V?)DIVSSrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001783
1784def BWWriteResGroup151 : SchedWriteRes<[BWPort0,BWPort23]> {
1785 let Latency = 16;
1786 let NumMicroOps = 3;
1787 let ResourceCycles = [2,1];
1788}
1789def: InstRW<[BWWriteResGroup151], (instregex "VPMULLDYrm")>;
1790
Gadi Haber323f2e12017-10-24 20:19:47 +00001791def BWWriteResGroup153 : SchedWriteRes<[BWPort4,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1792 let Latency = 16;
1793 let NumMicroOps = 14;
1794 let ResourceCycles = [1,1,1,4,2,5];
1795}
1796def: InstRW<[BWWriteResGroup153], (instregex "CMPXCHG8B")>;
1797
1798def BWWriteResGroup154 : SchedWriteRes<[BWPort5]> {
1799 let Latency = 16;
1800 let NumMicroOps = 16;
1801 let ResourceCycles = [16];
1802}
Craig Topper5a69a002018-03-21 06:28:42 +00001803def: InstRW<[BWWriteResGroup154], (instrs VZEROALL)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001804
Craig Topper8104f262018-04-02 05:33:28 +00001805def BWWriteResGroup155 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001806 let Latency = 17;
1807 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001808 let ResourceCycles = [2,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001809}
1810def: InstRW<[BWWriteResGroup155], (instregex "VDIVPSYrr")>;
1811
1812def BWWriteResGroup156 : SchedWriteRes<[BWPort0,BWPort23,BWPort015]> {
1813 let Latency = 17;
1814 let NumMicroOps = 4;
1815 let ResourceCycles = [2,1,1];
1816}
Craig Topper5a69a002018-03-21 06:28:42 +00001817def: InstRW<[BWWriteResGroup156], (instregex "VRCPPSYm",
1818 "VRSQRTPSYm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001819
Craig Topper8104f262018-04-02 05:33:28 +00001820def BWWriteResGroup157 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001821 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001822 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001823 let ResourceCycles = [1,1,7];
Gadi Haber323f2e12017-10-24 20:19:47 +00001824}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001825def: InstRW<[BWWriteResGroup157], (instregex "(V?)SQRTPSm",
1826 "(V?)SQRTSSm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001827
Gadi Haber323f2e12017-10-24 20:19:47 +00001828def BWWriteResGroup159 : SchedWriteRes<[BWPort5,BWPort6,BWPort06,BWPort0156]> {
1829 let Latency = 18;
1830 let NumMicroOps = 8;
1831 let ResourceCycles = [1,1,1,5];
1832}
Craig Topper5a69a002018-03-21 06:28:42 +00001833def: InstRW<[BWWriteResGroup159], (instrs CPUID)>;
Craig Topper2d451e72018-03-18 08:38:06 +00001834def: InstRW<[BWWriteResGroup159], (instrs RDTSC)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001835
1836def BWWriteResGroup160 : SchedWriteRes<[BWPort1,BWPort23,BWPort237,BWPort06,BWPort15,BWPort0156]> {
1837 let Latency = 18;
1838 let NumMicroOps = 11;
1839 let ResourceCycles = [2,1,1,3,1,3];
1840}
Craig Topper13a16502018-03-19 00:56:09 +00001841def: InstRW<[BWWriteResGroup160], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001842
Craig Topper8104f262018-04-02 05:33:28 +00001843def BWWriteResGroup161 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001844 let Latency = 19;
1845 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001846 let ResourceCycles = [1,1,8];
Gadi Haber323f2e12017-10-24 20:19:47 +00001847}
Simon Pilgrimc21deec2018-03-24 19:37:28 +00001848def: InstRW<[BWWriteResGroup161], (instregex "(V?)DIVPDrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001849 "(V?)DIVSDrm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001850
Gadi Haber323f2e12017-10-24 20:19:47 +00001851def BWWriteResGroup163 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1852 let Latency = 19;
1853 let NumMicroOps = 5;
1854 let ResourceCycles = [2,1,1,1];
1855}
Craig Topper5a69a002018-03-21 06:28:42 +00001856def: InstRW<[BWWriteResGroup163], (instregex "(V?)DPPSrmi")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001857
Gadi Haber323f2e12017-10-24 20:19:47 +00001858def BWWriteResGroup165 : SchedWriteRes<[BWPort0]> {
1859 let Latency = 20;
1860 let NumMicroOps = 1;
1861 let ResourceCycles = [1];
1862}
Craig Topper5a69a002018-03-21 06:28:42 +00001863def: InstRW<[BWWriteResGroup165], (instregex "DIV_FPrST0",
1864 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001865 "DIV_FrST0")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001866
1867def BWWriteResGroup166 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23]> {
1868 let Latency = 20;
1869 let NumMicroOps = 5;
1870 let ResourceCycles = [2,1,1,1];
1871}
1872def: InstRW<[BWWriteResGroup166], (instregex "VDPPSYrmi")>;
1873
1874def BWWriteResGroup167 : SchedWriteRes<[BWPort4,BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1875 let Latency = 20;
1876 let NumMicroOps = 8;
1877 let ResourceCycles = [1,1,1,1,1,1,2];
1878}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001879def: InstRW<[BWWriteResGroup167], (instrs INSB, INSL, INSW)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001880
Craig Topper8104f262018-04-02 05:33:28 +00001881def BWWriteResGroup168 : SchedWriteRes<[BWPort0,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001882 let Latency = 16;
Gadi Haber323f2e12017-10-24 20:19:47 +00001883 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001884 let ResourceCycles = [1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001885}
Craig Topper8104f262018-04-02 05:33:28 +00001886def: InstRW<[BWWriteResGroup168], (instregex "(V?)SQRTPDr")>;
1887
1888def BWWriteResGroup168_1 : SchedWriteRes<[BWPort0,BWFPDivider]> {
1889 let Latency = 16;
1890 let NumMicroOps = 1;
1891 let ResourceCycles = [1,8];
1892}
1893def: InstRW<[BWWriteResGroup168_1], (instregex "(V?)SQRTSDr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001894
1895def BWWriteResGroup169 : SchedWriteRes<[BWPort0,BWPort23]> {
1896 let Latency = 21;
1897 let NumMicroOps = 2;
1898 let ResourceCycles = [1,1];
1899}
Craig Topper5a69a002018-03-21 06:28:42 +00001900def: InstRW<[BWWriteResGroup169], (instregex "DIV_F32m",
1901 "DIV_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001902
Craig Topper8104f262018-04-02 05:33:28 +00001903def BWWriteResGroup170 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001904 let Latency = 21;
1905 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001906 let ResourceCycles = [2,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001907}
1908def: InstRW<[BWWriteResGroup170], (instregex "VSQRTPSYr")>;
1909
1910def BWWriteResGroup171 : SchedWriteRes<[BWPort0,BWPort4,BWPort5,BWPort23,BWPort237,BWPort06,BWPort0156]> {
1911 let Latency = 21;
1912 let NumMicroOps = 19;
1913 let ResourceCycles = [2,1,4,1,1,4,6];
1914}
1915def: InstRW<[BWWriteResGroup171], (instregex "CMPXCHG16B")>;
1916
1917def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1918 let Latency = 22;
1919 let NumMicroOps = 18;
1920 let ResourceCycles = [1,1,16];
1921}
1922def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>;
1923
Craig Topper8104f262018-04-02 05:33:28 +00001924def BWWriteResGroup173 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001925 let Latency = 23;
1926 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00001927 let ResourceCycles = [2,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001928}
1929def: InstRW<[BWWriteResGroup173], (instregex "VDIVPDYrr")>;
1930
Craig Topper8104f262018-04-02 05:33:28 +00001931def BWWriteResGroup174 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001932 let Latency = 23;
1933 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001934 let ResourceCycles = [2,1,1,10];
Gadi Haber323f2e12017-10-24 20:19:47 +00001935}
1936def: InstRW<[BWWriteResGroup174], (instregex "VDIVPSYrm")>;
1937
Gadi Haber323f2e12017-10-24 20:19:47 +00001938def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> {
1939 let Latency = 23;
1940 let NumMicroOps = 19;
1941 let ResourceCycles = [3,1,15];
1942}
Craig Topper391c6f92017-12-10 01:24:08 +00001943def: InstRW<[BWWriteResGroup176], (instregex "XRSTOR(64)?")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001944
1945def BWWriteResGroup177 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1946 let Latency = 24;
1947 let NumMicroOps = 3;
1948 let ResourceCycles = [1,1,1];
1949}
Craig Topper5a69a002018-03-21 06:28:42 +00001950def: InstRW<[BWWriteResGroup177], (instregex "DIV_FI16m",
1951 "DIV_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001952
Craig Topper8104f262018-04-02 05:33:28 +00001953def BWWriteResGroup179 : SchedWriteRes<[BWPort0,BWPort23,BWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001954 let Latency = 21;
Gadi Haber323f2e12017-10-24 20:19:47 +00001955 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001956 let ResourceCycles = [1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001957}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001958def: InstRW<[BWWriteResGroup179], (instregex "(V?)SQRTPDm",
1959 "(V?)SQRTSDm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001960
1961def BWWriteResGroup180 : SchedWriteRes<[BWPort0,BWPort23]> {
1962 let Latency = 26;
1963 let NumMicroOps = 2;
1964 let ResourceCycles = [1,1];
1965}
Craig Topper5a69a002018-03-21 06:28:42 +00001966def: InstRW<[BWWriteResGroup180], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001967 "DIVR_F64m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001968
Craig Topper8104f262018-04-02 05:33:28 +00001969def BWWriteResGroup181 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001970 let Latency = 27;
1971 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001972 let ResourceCycles = [2,1,1,14];
Gadi Haber323f2e12017-10-24 20:19:47 +00001973}
1974def: InstRW<[BWWriteResGroup181], (instregex "VSQRTPSYm")>;
1975
1976def BWWriteResGroup182 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> {
1977 let Latency = 29;
1978 let NumMicroOps = 3;
1979 let ResourceCycles = [1,1,1];
1980}
Craig Topper5a69a002018-03-21 06:28:42 +00001981def: InstRW<[BWWriteResGroup182], (instregex "DIVR_FI16m",
1982 "DIVR_FI32m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001983
Craig Topper8104f262018-04-02 05:33:28 +00001984def BWWriteResGroup183 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
Gadi Haber323f2e12017-10-24 20:19:47 +00001985 let Latency = 29;
1986 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00001987 let ResourceCycles = [2,1,1,16];
Gadi Haber323f2e12017-10-24 20:19:47 +00001988}
1989def: InstRW<[BWWriteResGroup183], (instregex "VDIVPDYrm")>;
1990
1991def BWWriteResGroup183_1 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
1992 let Latency = 22;
1993 let NumMicroOps = 7;
1994 let ResourceCycles = [1,3,2,1];
1995}
Craig Topper17a31182017-12-16 18:35:29 +00001996def: InstRW<[BWWriteResGroup183_1], (instrs VGATHERQPDrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00001997
1998def BWWriteResGroup183_2 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
1999 let Latency = 23;
2000 let NumMicroOps = 9;
2001 let ResourceCycles = [1,3,4,1];
2002}
Craig Topper17a31182017-12-16 18:35:29 +00002003def: InstRW<[BWWriteResGroup183_2], (instrs VGATHERQPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002004
2005def BWWriteResGroup183_3 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2006 let Latency = 24;
2007 let NumMicroOps = 9;
2008 let ResourceCycles = [1,5,2,1];
2009}
Craig Topper17a31182017-12-16 18:35:29 +00002010def: InstRW<[BWWriteResGroup183_3], (instrs VGATHERQPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002011
2012def BWWriteResGroup183_4 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2013 let Latency = 25;
2014 let NumMicroOps = 7;
2015 let ResourceCycles = [1,3,2,1];
2016}
Craig Topper17a31182017-12-16 18:35:29 +00002017def: InstRW<[BWWriteResGroup183_4], (instrs VGATHERDPDrm,
2018 VGATHERDPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002019
2020def BWWriteResGroup183_5 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2021 let Latency = 26;
2022 let NumMicroOps = 9;
2023 let ResourceCycles = [1,5,2,1];
2024}
Craig Topper17a31182017-12-16 18:35:29 +00002025def: InstRW<[BWWriteResGroup183_5], (instrs VGATHERDPDYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002026
2027def BWWriteResGroup183_6 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2028 let Latency = 26;
2029 let NumMicroOps = 14;
Simon Pilgrimc21deec2018-03-24 19:37:28 +00002030 let ResourceCycles = [1,4,8,1];
Gadi Haber323f2e12017-10-24 20:19:47 +00002031}
Craig Topper17a31182017-12-16 18:35:29 +00002032def: InstRW<[BWWriteResGroup183_6], (instrs VGATHERDPSYrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002033
2034def BWWriteResGroup183_7 : SchedWriteRes<[BWPort4, BWPort5, BWPort23, BWPort0156]> {
2035 let Latency = 27;
2036 let NumMicroOps = 9;
2037 let ResourceCycles = [1,5,2,1];
2038}
Craig Topper17a31182017-12-16 18:35:29 +00002039def: InstRW<[BWWriteResGroup183_7], (instrs VGATHERQPSrm)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002040
Gadi Haber323f2e12017-10-24 20:19:47 +00002041def BWWriteResGroup185 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2042 let Latency = 29;
2043 let NumMicroOps = 27;
2044 let ResourceCycles = [1,5,1,1,19];
2045}
2046def: InstRW<[BWWriteResGroup185], (instregex "XSAVE64")>;
2047
2048def BWWriteResGroup186 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort0156]> {
2049 let Latency = 30;
2050 let NumMicroOps = 28;
2051 let ResourceCycles = [1,6,1,1,19];
2052}
Craig Topper2d451e72018-03-18 08:38:06 +00002053def: InstRW<[BWWriteResGroup186], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002054
2055def BWWriteResGroup187 : SchedWriteRes<[BWPort01,BWPort15,BWPort015,BWPort0156]> {
2056 let Latency = 31;
2057 let NumMicroOps = 31;
2058 let ResourceCycles = [8,1,21,1];
2059}
2060def: InstRW<[BWWriteResGroup187], (instregex "MMX_EMMS")>;
2061
Craig Topper8104f262018-04-02 05:33:28 +00002062def BWWriteResGroup189 : SchedWriteRes<[BWPort0,BWPort015,BWFPDivider]> {
2063 let Latency = 29;
Gadi Haber323f2e12017-10-24 20:19:47 +00002064 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002065 let ResourceCycles = [2,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002066}
2067def: InstRW<[BWWriteResGroup189], (instregex "VSQRTPDYr")>;
2068
2069def BWWriteResGroup190 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2070 let Latency = 34;
2071 let NumMicroOps = 8;
2072 let ResourceCycles = [2,2,2,1,1];
2073}
Craig Topper13a16502018-03-19 00:56:09 +00002074def: InstRW<[BWWriteResGroup190], (instregex "DIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002075
2076def BWWriteResGroup191 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort06,BWPort0156]> {
2077 let Latency = 34;
2078 let NumMicroOps = 23;
2079 let ResourceCycles = [1,5,3,4,10];
2080}
Craig Topper5a69a002018-03-21 06:28:42 +00002081def: InstRW<[BWWriteResGroup191], (instregex "IN(8|16|32)ri",
2082 "IN(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002083
2084def BWWriteResGroup193 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort23,BWPort0156]> {
2085 let Latency = 35;
2086 let NumMicroOps = 8;
2087 let ResourceCycles = [2,2,2,1,1];
2088}
Craig Topper13a16502018-03-19 00:56:09 +00002089def: InstRW<[BWWriteResGroup193], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002090
2091def BWWriteResGroup194 : SchedWriteRes<[BWPort5,BWPort6,BWPort23,BWPort237,BWPort06,BWPort0156]> {
2092 let Latency = 35;
2093 let NumMicroOps = 23;
2094 let ResourceCycles = [1,5,2,1,4,10];
2095}
Craig Topper5a69a002018-03-21 06:28:42 +00002096def: InstRW<[BWWriteResGroup194], (instregex "OUT(8|16|32)ir",
2097 "OUT(8|16|32)rr")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002098
Craig Topper8104f262018-04-02 05:33:28 +00002099def BWWriteResGroup195 : SchedWriteRes<[BWPort0,BWPort23,BWPort015,BWFPDivider]> {
2100 let Latency = 35;
Gadi Haber323f2e12017-10-24 20:19:47 +00002101 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002102 let ResourceCycles = [2,1,1,28];
Gadi Haber323f2e12017-10-24 20:19:47 +00002103}
2104def: InstRW<[BWWriteResGroup195], (instregex "VSQRTPDYm")>;
2105
2106def BWWriteResGroup196 : SchedWriteRes<[BWPort5,BWPort0156]> {
2107 let Latency = 42;
2108 let NumMicroOps = 22;
2109 let ResourceCycles = [2,20];
2110}
Craig Topper2d451e72018-03-18 08:38:06 +00002111def: InstRW<[BWWriteResGroup196], (instrs RDTSCP)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002112
2113def BWWriteResGroup197 : SchedWriteRes<[BWPort0,BWPort01,BWPort23,BWPort05,BWPort06,BWPort015,BWPort0156]> {
2114 let Latency = 60;
2115 let NumMicroOps = 64;
2116 let ResourceCycles = [2,2,8,1,10,2,39];
2117}
2118def: InstRW<[BWWriteResGroup197], (instregex "FLDENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002119
2120def BWWriteResGroup198 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2121 let Latency = 63;
2122 let NumMicroOps = 88;
2123 let ResourceCycles = [4,4,31,1,2,1,45];
2124}
Craig Topper2d451e72018-03-18 08:38:06 +00002125def: InstRW<[BWWriteResGroup198], (instrs FXRSTOR64)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002126
2127def BWWriteResGroup199 : SchedWriteRes<[BWPort0,BWPort6,BWPort23,BWPort05,BWPort06,BWPort15,BWPort0156]> {
2128 let Latency = 63;
2129 let NumMicroOps = 90;
2130 let ResourceCycles = [4,2,33,1,2,1,47];
2131}
Craig Topper2d451e72018-03-18 08:38:06 +00002132def: InstRW<[BWWriteResGroup199], (instrs FXRSTOR)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002133
2134def BWWriteResGroup200 : SchedWriteRes<[BWPort5,BWPort01,BWPort0156]> {
2135 let Latency = 75;
2136 let NumMicroOps = 15;
2137 let ResourceCycles = [6,3,6];
2138}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002139def: InstRW<[BWWriteResGroup200], (instrs FNINIT)>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002140
2141def BWWriteResGroup201 : SchedWriteRes<[BWPort0,BWPort1,BWPort5,BWPort6,BWPort01,BWPort0156]> {
2142 let Latency = 80;
2143 let NumMicroOps = 32;
2144 let ResourceCycles = [7,7,3,3,1,11];
2145}
2146def: InstRW<[BWWriteResGroup201], (instregex "DIV(16|32|64)r")>;
2147
2148def BWWriteResGroup202 : SchedWriteRes<[BWPort0,BWPort1,BWPort4,BWPort5,BWPort6,BWPort237,BWPort06,BWPort0156]> {
2149 let Latency = 115;
2150 let NumMicroOps = 100;
2151 let ResourceCycles = [9,9,11,8,1,11,21,30];
2152}
2153def: InstRW<[BWWriteResGroup202], (instregex "FSTENVm")>;
Gadi Haber323f2e12017-10-24 20:19:47 +00002154
2155} // SchedModel
2156