blob: 402ae1f2d671a8705ce33a2412c3bba0037552f8 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client 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 Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// 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 SKLWriteResPair<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 Haber6f8fbf42017-09-19 06:19:27 +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 Haber6f8fbf42017-09-19 06:19:27 +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([SKLPort23], 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 Haber6f8fbf42017-09-19 06:19:27 +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, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort01], 4, [1], 1, 6>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFAddY, [SKLPort01], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000156defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
157defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM).
158defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim86d9f232018-05-02 14:25:32 +0000159defm : SKLWriteResPair<WriteFMul, [SKLPort01], 4, [1], 1, 6>; // Floating point multiplication.
160defm : SKLWriteResPair<WriteFMulY, [SKLPort01], 4, [1], 1, 7>; // Floating point multiplication (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000161defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division.
162defm : SKLWriteResPair<WriteFDivY, [SKLPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM).
Simon Pilgrimc7088682018-05-01 18:06:07 +0000163defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root.
164defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM).
165defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
166defm : SKLWriteResPair<WriteFRcpY, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate (YMM/ZMM).
167defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate.
168defm : SKLWriteResPair<WriteFRsqrtY,[SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate (YMM/ZMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000169defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
170defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
171defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000172defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000173defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
174defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000175defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000176defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000177defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
178defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000179defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000180defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000181defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000182defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000184def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
185 let Latency = 6;
186 let NumMicroOps = 4;
187 let ResourceCycles = [1,1,1,1];
188}
189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// FMA Scheduling helper class.
191// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
192
193// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000194def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
195def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
196def : WriteRes<WriteVecMove, [SKLPort015]>;
197
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000198defm : SKLWriteResPair<WriteVecALU, [SKLPort01], 1, [1], 1, 6>; // Vector integer ALU op, no logicals.
199defm : SKLWriteResPair<WriteVecALUY, [SKLPort01], 1, [1], 1, 7>; // Vector integer ALU op, no logicals (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000200defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000201defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000202defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000203defm : SKLWriteResPair<WriteVecIMul, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply.
204defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM).
205defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD.
206defm : SKLWriteResPair<WritePMULLDY, [SKLPort01], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000207defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000208defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
209defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Vector shuffles.
210defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
Simon Pilgrim06e16542018-04-22 18:35:53 +0000211defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000212defm : SKLWriteResPair<WriteBlendY, [SKLPort5], 1, [1], 1, 7>; // Vector blends (YMM/ZMM).
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000213defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000214defm : SKLWriteResPair<WriteVarBlendY, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends (YMM/ZMM).
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000215defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000216defm : SKLWriteResPair<WriteMPSADY, [SKLPort5], 4, [2], 2, 7>; // Vector MPSAD.
217defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3, [1], 1, 6>; // Vector PSADBW.
218defm : SKLWriteResPair<WritePSADBWY, [SKLPort5], 3, [1], 1, 7>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000219defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000220
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000221// Vector insert/extract operations.
222def : WriteRes<WriteVecInsert, [SKLPort5]> {
223 let Latency = 2;
224 let NumMicroOps = 2;
225 let ResourceCycles = [2];
226}
227def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
228 let Latency = 6;
229 let NumMicroOps = 2;
230}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000231def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000232
233def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
234 let Latency = 3;
235 let NumMicroOps = 2;
236}
237def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
238 let Latency = 2;
239 let NumMicroOps = 3;
240}
241
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000242// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000243defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
244defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
245defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000246
247// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000248
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000249// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
251 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000252 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000253 let ResourceCycles = [3];
254}
255def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000256 let Latency = 16;
257 let NumMicroOps = 4;
258 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000259}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000260
261// Packed Compare Explicit Length Strings, Return Mask
262def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
263 let Latency = 19;
264 let NumMicroOps = 9;
265 let ResourceCycles = [4,3,1,1];
266}
267def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
268 let Latency = 25;
269 let NumMicroOps = 10;
270 let ResourceCycles = [4,3,1,1,1];
271}
272
273// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000274def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000275 let Latency = 10;
276 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277 let ResourceCycles = [3];
278}
279def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000280 let Latency = 16;
281 let NumMicroOps = 4;
282 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000284
285// Packed Compare Explicit Length Strings, Return Index
286def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
287 let Latency = 18;
288 let NumMicroOps = 8;
289 let ResourceCycles = [4,3,1];
290}
291def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
292 let Latency = 24;
293 let NumMicroOps = 9;
294 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295}
296
Simon Pilgrima2f26782018-03-27 20:38:54 +0000297// MOVMSK Instructions.
298def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
299def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
300def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
301
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000302// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000303def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
304 let Latency = 4;
305 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000306 let ResourceCycles = [1];
307}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000308def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
309 let Latency = 10;
310 let NumMicroOps = 2;
311 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000312}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000313
314def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
315 let Latency = 8;
316 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000317 let ResourceCycles = [2];
318}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000319def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000320 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000321 let NumMicroOps = 3;
322 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000323}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000324
325def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
326 let Latency = 20;
327 let NumMicroOps = 11;
328 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000330def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
331 let Latency = 25;
332 let NumMicroOps = 11;
333 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000334}
335
336// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000337def : WriteRes<WriteCLMul, [SKLPort5]> {
338 let Latency = 6;
339 let NumMicroOps = 1;
340 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000341}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000342def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
343 let Latency = 12;
344 let NumMicroOps = 2;
345 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000346}
347
348// Catch-all for expensive system instructions.
349def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
350
351// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000352defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
353defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
354defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
355defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000356defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000357
358// Old microcoded instructions that nobody use.
359def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
360
361// Fence instructions.
362def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
363
Craig Topper05242bf2018-04-21 18:07:36 +0000364// Load/store MXCSR.
365def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
366def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
367
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000368// Nop, not very useful expect it provides a model for nops!
369def : WriteRes<WriteNop, []>;
370
371////////////////////////////////////////////////////////////////////////////////
372// Horizontal add/sub instructions.
373////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000374
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000375defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
376defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000377defm : SKLWriteResPair<WritePHAdd, [SKLPort5,SKLPort015], 3, [2,1], 3, 6>;
378defm : SKLWriteResPair<WritePHAddY, [SKLPort5,SKLPort015], 3, [2,1], 3, 7>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000379
380// Remaining instrs.
381
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000382def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000383 let Latency = 1;
384 let NumMicroOps = 1;
385 let ResourceCycles = [1];
386}
Craig Topperfc179c62018-03-22 04:23:41 +0000387def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
388 "MMX_PADDSWirr",
389 "MMX_PADDUSBirr",
390 "MMX_PADDUSWirr",
391 "MMX_PAVGBirr",
392 "MMX_PAVGWirr",
393 "MMX_PCMPEQBirr",
394 "MMX_PCMPEQDirr",
395 "MMX_PCMPEQWirr",
396 "MMX_PCMPGTBirr",
397 "MMX_PCMPGTDirr",
398 "MMX_PCMPGTWirr",
399 "MMX_PMAXSWirr",
400 "MMX_PMAXUBirr",
401 "MMX_PMINSWirr",
402 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000403 "MMX_PSUBSBirr",
404 "MMX_PSUBSWirr",
405 "MMX_PSUBUSBirr",
406 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000407
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000408def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000409 let Latency = 1;
410 let NumMicroOps = 1;
411 let ResourceCycles = [1];
412}
Craig Topperfc179c62018-03-22 04:23:41 +0000413def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
414 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000415 "MMX_MOVD64rr",
416 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000417 "UCOM_FPr",
418 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000419 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000420 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000421
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000422def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000423 let Latency = 1;
424 let NumMicroOps = 1;
425 let ResourceCycles = [1];
426}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000427def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000428
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000429def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000430 let Latency = 1;
431 let NumMicroOps = 1;
432 let ResourceCycles = [1];
433}
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000434def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PSLLD(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000435 "(V?)PSLLQ(Y?)ri",
436 "VPSLLVD(Y?)rr",
437 "VPSLLVQ(Y?)rr",
438 "(V?)PSLLW(Y?)ri",
439 "(V?)PSRAD(Y?)ri",
440 "VPSRAVD(Y?)rr",
441 "(V?)PSRAW(Y?)ri",
442 "(V?)PSRLD(Y?)ri",
443 "(V?)PSRLQ(Y?)ri",
444 "VPSRLVD(Y?)rr",
445 "VPSRLVQ(Y?)rr",
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000446 "(V?)PSRLW(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000447
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000448def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000449 let Latency = 1;
450 let NumMicroOps = 1;
451 let ResourceCycles = [1];
452}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000453def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
454def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000455 "MMX_PABS(B|D|W)rr",
456 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000457 "MMX_PANDNirr",
458 "MMX_PANDirr",
459 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000460 "MMX_PSIGN(B|D|W)rr",
461 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000462 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000463
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000464def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000465 let Latency = 1;
466 let NumMicroOps = 1;
467 let ResourceCycles = [1];
468}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000469def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000470def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
471 "ADC(16|32|64)i",
472 "ADC(8|16|32|64)rr",
473 "ADCX(32|64)rr",
474 "ADOX(32|64)rr",
475 "BT(16|32|64)ri8",
476 "BT(16|32|64)rr",
477 "BTC(16|32|64)ri8",
478 "BTC(16|32|64)rr",
479 "BTR(16|32|64)ri8",
480 "BTR(16|32|64)rr",
481 "BTS(16|32|64)ri8",
482 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000483 "SBB(16|32|64)ri",
484 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000485 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000486
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000487def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
488 let Latency = 1;
489 let NumMicroOps = 1;
490 let ResourceCycles = [1];
491}
Craig Topperfc179c62018-03-22 04:23:41 +0000492def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
493 "BLSI(32|64)rr",
494 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000495 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000496
497def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
498 let Latency = 1;
499 let NumMicroOps = 1;
500 let ResourceCycles = [1];
501}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000502def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000503 "(V?)PADDD(Y?)rr",
504 "(V?)PADDQ(Y?)rr",
505 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000506 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000507 "(V?)PSUBB(Y?)rr",
508 "(V?)PSUBD(Y?)rr",
509 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000510 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000511
512def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
513 let Latency = 1;
514 let NumMicroOps = 1;
515 let ResourceCycles = [1];
516}
Craig Topperfbe31322018-04-05 21:56:19 +0000517def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000518def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000519def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000520 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000521 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000522 "SGDT64m",
523 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000524 "SMSW16m",
525 "STC",
526 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000527 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000530 let Latency = 1;
531 let NumMicroOps = 2;
532 let ResourceCycles = [1,1];
533}
Craig Topperfc179c62018-03-22 04:23:41 +0000534def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
535 "MMX_MOVD64from64rm",
536 "MMX_MOVD64mr",
537 "MMX_MOVNTQmr",
538 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "MOVNTI_64mr",
540 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000541 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "VEXTRACTF128mr",
543 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000544 "(V?)MOVAPDYmr",
545 "(V?)MOVAPS(Y?)mr",
546 "(V?)MOVDQA(Y?)mr",
547 "(V?)MOVDQU(Y?)mr",
548 "(V?)MOVHPDmr",
549 "(V?)MOVHPSmr",
550 "(V?)MOVLPDmr",
551 "(V?)MOVLPSmr",
552 "(V?)MOVNTDQ(Y?)mr",
553 "(V?)MOVNTPD(Y?)mr",
554 "(V?)MOVNTPS(Y?)mr",
555 "(V?)MOVPDI2DImr",
556 "(V?)MOVPQI2QImr",
557 "(V?)MOVPQIto64mr",
558 "(V?)MOVSDmr",
559 "(V?)MOVSSmr",
560 "(V?)MOVUPD(Y?)mr",
561 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000562 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000563
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000564def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565 let Latency = 2;
566 let NumMicroOps = 1;
567 let ResourceCycles = [1];
568}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000569def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000570 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000571 "(V?)MOVPDI2DIrr",
572 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000573 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000574 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000575
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000576def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000577 let Latency = 2;
578 let NumMicroOps = 2;
579 let ResourceCycles = [2];
580}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000581def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000582
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000583def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000584 let Latency = 2;
585 let NumMicroOps = 2;
586 let ResourceCycles = [2];
587}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000588def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
589def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000591def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592 let Latency = 2;
593 let NumMicroOps = 2;
594 let ResourceCycles = [2];
595}
Craig Topperfc179c62018-03-22 04:23:41 +0000596def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
597 "ROL(8|16|32|64)r1",
598 "ROL(8|16|32|64)ri",
599 "ROR(8|16|32|64)r1",
600 "ROR(8|16|32|64)ri",
601 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000603def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604 let Latency = 2;
605 let NumMicroOps = 2;
606 let ResourceCycles = [2];
607}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000608def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
609 WAIT,
610 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000612def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000613 let Latency = 2;
614 let NumMicroOps = 2;
615 let ResourceCycles = [1,1];
616}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000617def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
618 "VMASKMOVPS(Y?)mr",
619 "VPMASKMOVD(Y?)mr",
620 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000622def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623 let Latency = 2;
624 let NumMicroOps = 2;
625 let ResourceCycles = [1,1];
626}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000627def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
628 "(V?)PSLLQrr",
629 "(V?)PSLLWrr",
630 "(V?)PSRADrr",
631 "(V?)PSRAWrr",
632 "(V?)PSRLDrr",
633 "(V?)PSRLQrr",
634 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000636def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637 let Latency = 2;
638 let NumMicroOps = 2;
639 let ResourceCycles = [1,1];
640}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000641def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644 let Latency = 2;
645 let NumMicroOps = 2;
646 let ResourceCycles = [1,1];
647}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000648def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000649
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000650def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651 let Latency = 2;
652 let NumMicroOps = 2;
653 let ResourceCycles = [1,1];
654}
Craig Topper498875f2018-04-04 17:54:19 +0000655def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
656
657def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
658 let Latency = 1;
659 let NumMicroOps = 1;
660 let ResourceCycles = [1];
661}
662def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000663
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000664def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666 let NumMicroOps = 2;
667 let ResourceCycles = [1,1];
668}
Craig Topper2d451e72018-03-18 08:38:06 +0000669def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000670def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000671def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
672 "ADC8ri",
673 "SBB8i8",
674 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000676def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
677 let Latency = 2;
678 let NumMicroOps = 3;
679 let ResourceCycles = [1,1,1];
680}
681def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
682
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000683def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
684 let Latency = 2;
685 let NumMicroOps = 3;
686 let ResourceCycles = [1,1,1];
687}
688def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
689
690def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
691 let Latency = 2;
692 let NumMicroOps = 3;
693 let ResourceCycles = [1,1,1];
694}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000695def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
696 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000697def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000698 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699
700def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
701 let Latency = 3;
702 let NumMicroOps = 1;
703 let ResourceCycles = [1];
704}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000705def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
706 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000707 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000708 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000709 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000710
Clement Courbet327fac42018-03-07 08:14:02 +0000711def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000712 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000713 let NumMicroOps = 2;
714 let ResourceCycles = [1,1];
715}
Clement Courbet327fac42018-03-07 08:14:02 +0000716def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000717
718def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
719 let Latency = 3;
720 let NumMicroOps = 1;
721 let ResourceCycles = [1];
722}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000723def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
724 "(ADD|SUB|SUBR)_FST0r",
725 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000726 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000727 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000728 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000729 "VPMOVSXBDYrr",
730 "VPMOVSXBQYrr",
731 "VPMOVSXBWYrr",
732 "VPMOVSXDQYrr",
733 "VPMOVSXWDYrr",
734 "VPMOVSXWQYrr",
735 "VPMOVZXBDYrr",
736 "VPMOVZXBQYrr",
737 "VPMOVZXBWYrr",
738 "VPMOVZXDQYrr",
739 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000740 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000741
742def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
743 let Latency = 3;
744 let NumMicroOps = 2;
745 let ResourceCycles = [1,1];
746}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000747def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000748
749def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
750 let Latency = 3;
751 let NumMicroOps = 2;
752 let ResourceCycles = [1,1];
753}
754def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
755
756def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
757 let Latency = 3;
758 let NumMicroOps = 3;
759 let ResourceCycles = [3];
760}
Craig Topperfc179c62018-03-22 04:23:41 +0000761def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
762 "ROR(8|16|32|64)rCL",
763 "SAR(8|16|32|64)rCL",
764 "SHL(8|16|32|64)rCL",
765 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000766
767def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000768 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000769 let NumMicroOps = 3;
770 let ResourceCycles = [3];
771}
Craig Topperb5f26592018-04-19 18:00:17 +0000772def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
773 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
774 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000775
776def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
777 let Latency = 3;
778 let NumMicroOps = 3;
779 let ResourceCycles = [1,2];
780}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000781def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000782
783def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
784 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000785 let NumMicroOps = 3;
786 let ResourceCycles = [2,1];
787}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000788def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
789 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000790
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
792 let Latency = 3;
793 let NumMicroOps = 3;
794 let ResourceCycles = [2,1];
795}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000796def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
799 let Latency = 3;
800 let NumMicroOps = 3;
801 let ResourceCycles = [2,1];
802}
Craig Topperfc179c62018-03-22 04:23:41 +0000803def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
804 "MMX_PACKSSWBirr",
805 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000806
807def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
808 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000809 let NumMicroOps = 3;
810 let ResourceCycles = [1,2];
811}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000812def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
815 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000816 let NumMicroOps = 3;
817 let ResourceCycles = [1,2];
818}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000819def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000820
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000821def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
822 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000823 let NumMicroOps = 3;
824 let ResourceCycles = [1,2];
825}
Craig Topperfc179c62018-03-22 04:23:41 +0000826def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
827 "RCL(8|16|32|64)ri",
828 "RCR(8|16|32|64)r1",
829 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000830
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
832 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000833 let NumMicroOps = 3;
834 let ResourceCycles = [1,1,1];
835}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000837
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000838def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
839 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000840 let NumMicroOps = 4;
841 let ResourceCycles = [1,1,2];
842}
Craig Topperf4cd9082018-01-19 05:47:32 +0000843def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 4;
848 let ResourceCycles = [1,1,1,1];
849}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000850def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
853 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let NumMicroOps = 4;
855 let ResourceCycles = [1,1,1,1];
856}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000857def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000860 let Latency = 4;
861 let NumMicroOps = 1;
862 let ResourceCycles = [1];
863}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000864def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000865 "MMX_PMADDWDirr",
866 "MMX_PMULHRSWrr",
867 "MMX_PMULHUWirr",
868 "MMX_PMULHWirr",
869 "MMX_PMULLWirr",
870 "MMX_PMULUDQirr",
871 "MUL_FPrST0",
872 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000873 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876 let Latency = 4;
877 let NumMicroOps = 1;
878 let ResourceCycles = [1];
879}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000880def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000881 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000882 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let Latency = 4;
886 let NumMicroOps = 2;
887 let ResourceCycles = [1,1];
888}
Craig Topperf846e2d2018-04-19 05:34:05 +0000889def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
892 let Latency = 4;
893 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000894 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895}
Craig Topperfc179c62018-03-22 04:23:41 +0000896def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000897
898def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899 let Latency = 4;
900 let NumMicroOps = 2;
901 let ResourceCycles = [1,1];
902}
Craig Topperfc179c62018-03-22 04:23:41 +0000903def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
904 "VPSLLQYrr",
905 "VPSLLWYrr",
906 "VPSRADYrr",
907 "VPSRAWYrr",
908 "VPSRLDYrr",
909 "VPSRLQYrr",
910 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000912def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913 let Latency = 4;
914 let NumMicroOps = 3;
915 let ResourceCycles = [1,1,1];
916}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000917def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
918 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000919
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000920def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000921 let Latency = 4;
922 let NumMicroOps = 4;
923 let ResourceCycles = [4];
924}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000925def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000926
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000927def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000928 let Latency = 4;
929 let NumMicroOps = 4;
930 let ResourceCycles = [1,3];
931}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000932def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000934def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000935 let Latency = 4;
936 let NumMicroOps = 4;
937 let ResourceCycles = [1,3];
938}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000939def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000940
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000942 let Latency = 4;
943 let NumMicroOps = 4;
944 let ResourceCycles = [1,1,2];
945}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000946def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000947
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000948def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
949 let Latency = 5;
950 let NumMicroOps = 1;
951 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000953def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +0000954 "MOVSX(16|32|64)rm32",
955 "MOVSX(16|32|64)rm8",
956 "MOVZX(16|32|64)rm16",
957 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000958 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000960def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961 let Latency = 5;
962 let NumMicroOps = 2;
963 let ResourceCycles = [1,1];
964}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000965def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
966 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969 let Latency = 5;
970 let NumMicroOps = 2;
971 let ResourceCycles = [1,1];
972}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000973def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000974 "MMX_CVTPS2PIirr",
975 "MMX_CVTTPD2PIirr",
976 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000977 "(V?)CVTPD2DQrr",
978 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000979 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000980 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000981 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000982 "(V?)CVTSD2SSrr",
983 "(V?)CVTSI642SDrr",
984 "(V?)CVTSI2SDrr",
985 "(V?)CVTSI2SSrr",
986 "(V?)CVTSS2SDrr",
987 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990 let Latency = 5;
991 let NumMicroOps = 3;
992 let ResourceCycles = [1,1,1];
993}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000997 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998 let NumMicroOps = 3;
999 let ResourceCycles = [1,1,1];
1000}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001001def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let Latency = 5;
1005 let NumMicroOps = 5;
1006 let ResourceCycles = [1,4];
1007}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001010def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011 let Latency = 5;
1012 let NumMicroOps = 5;
1013 let ResourceCycles = [2,3];
1014}
Craig Topper13a16502018-03-19 00:56:09 +00001015def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001017def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001019 let NumMicroOps = 6;
1020 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001021}
Craig Topperfc179c62018-03-22 04:23:41 +00001022def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1023 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001025def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1026 let Latency = 6;
1027 let NumMicroOps = 1;
1028 let ResourceCycles = [1];
1029}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001030def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031 "(V?)MOVSHDUPrm",
1032 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001033 "VPBROADCASTDrm",
1034 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001035
1036def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 6;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [2];
1040}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001041def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001042
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044 let Latency = 6;
1045 let NumMicroOps = 2;
1046 let ResourceCycles = [1,1];
1047}
Craig Topperfc179c62018-03-22 04:23:41 +00001048def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1049 "MMX_PADDSWirm",
1050 "MMX_PADDUSBirm",
1051 "MMX_PADDUSWirm",
1052 "MMX_PAVGBirm",
1053 "MMX_PAVGWirm",
1054 "MMX_PCMPEQBirm",
1055 "MMX_PCMPEQDirm",
1056 "MMX_PCMPEQWirm",
1057 "MMX_PCMPGTBirm",
1058 "MMX_PCMPGTDirm",
1059 "MMX_PCMPGTWirm",
1060 "MMX_PMAXSWirm",
1061 "MMX_PMAXUBirm",
1062 "MMX_PMINSWirm",
1063 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001064 "MMX_PSUBSBirm",
1065 "MMX_PSUBSWirm",
1066 "MMX_PSUBUSBirm",
1067 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068
Craig Topper58afb4e2018-03-22 21:10:07 +00001069def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070 let Latency = 6;
1071 let NumMicroOps = 2;
1072 let ResourceCycles = [1,1];
1073}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001074def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1075 "(V?)CVTSD2SIrr",
1076 "(V?)CVTSS2SI64rr",
1077 "(V?)CVTSS2SIrr",
1078 "(V?)CVTTSD2SI64rr",
1079 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001081def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1082 let Latency = 6;
1083 let NumMicroOps = 2;
1084 let ResourceCycles = [1,1];
1085}
Craig Topperfc179c62018-03-22 04:23:41 +00001086def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1087 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088
1089def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1090 let Latency = 6;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001094def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1095 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001096 "MMX_PANDNirm",
1097 "MMX_PANDirm",
1098 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001099 "MMX_PSIGN(B|D|W)rm",
1100 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001101 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001102
1103def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1104 let Latency = 6;
1105 let NumMicroOps = 2;
1106 let ResourceCycles = [1,1];
1107}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001108def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001109def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1110 ADCX32rm, ADCX64rm,
1111 ADOX32rm, ADOX64rm,
1112 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001113
1114def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1115 let Latency = 6;
1116 let NumMicroOps = 2;
1117 let ResourceCycles = [1,1];
1118}
Craig Topperfc179c62018-03-22 04:23:41 +00001119def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1120 "BLSI(32|64)rm",
1121 "BLSMSK(32|64)rm",
1122 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001123 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001124
1125def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1126 let Latency = 6;
1127 let NumMicroOps = 2;
1128 let ResourceCycles = [1,1];
1129}
Craig Topper2d451e72018-03-18 08:38:06 +00001130def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001131def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001132
Craig Topper58afb4e2018-03-22 21:10:07 +00001133def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001134 let Latency = 6;
1135 let NumMicroOps = 3;
1136 let ResourceCycles = [2,1];
1137}
Craig Topperfc179c62018-03-22 04:23:41 +00001138def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001139
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001140def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001141 let Latency = 6;
1142 let NumMicroOps = 4;
1143 let ResourceCycles = [1,2,1];
1144}
Craig Topperfc179c62018-03-22 04:23:41 +00001145def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1146 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001147
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001148def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149 let Latency = 6;
1150 let NumMicroOps = 4;
1151 let ResourceCycles = [1,1,1,1];
1152}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001153def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001154
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001155def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1156 let Latency = 6;
1157 let NumMicroOps = 4;
1158 let ResourceCycles = [1,1,1,1];
1159}
Craig Topperfc179c62018-03-22 04:23:41 +00001160def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1161 "BTR(16|32|64)mi8",
1162 "BTS(16|32|64)mi8",
1163 "SAR(8|16|32|64)m1",
1164 "SAR(8|16|32|64)mi",
1165 "SHL(8|16|32|64)m1",
1166 "SHL(8|16|32|64)mi",
1167 "SHR(8|16|32|64)m1",
1168 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169
1170def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1171 let Latency = 6;
1172 let NumMicroOps = 4;
1173 let ResourceCycles = [1,1,1,1];
1174}
Craig Topperf0d04262018-04-06 16:16:48 +00001175def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1176 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001177
1178def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001179 let Latency = 6;
1180 let NumMicroOps = 6;
1181 let ResourceCycles = [1,5];
1182}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001183def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001184
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001185def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1186 let Latency = 7;
1187 let NumMicroOps = 1;
1188 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001189}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001190def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "VBROADCASTF128",
1192 "VBROADCASTI128",
1193 "VBROADCASTSDYrm",
1194 "VBROADCASTSSYrm",
1195 "VLDDQUYrm",
1196 "VMOVAPDYrm",
1197 "VMOVAPSYrm",
1198 "VMOVDDUPYrm",
1199 "VMOVDQAYrm",
1200 "VMOVDQUYrm",
1201 "VMOVNTDQAYrm",
1202 "VMOVSHDUPYrm",
1203 "VMOVSLDUPYrm",
1204 "VMOVUPDYrm",
1205 "VMOVUPSYrm",
1206 "VPBROADCASTDYrm",
1207 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001208
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001209def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001210 let Latency = 7;
1211 let NumMicroOps = 2;
1212 let ResourceCycles = [1,1];
1213}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001214def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1217 let Latency = 7;
1218 let NumMicroOps = 2;
1219 let ResourceCycles = [1,1];
1220}
Simon Pilgrim819f2182018-05-02 17:58:50 +00001221def: InstRW<[SKLWriteResGroup88], (instregex "(V?)PACKSSDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001222 "(V?)PACKSSWBrm",
1223 "(V?)PACKUSDWrm",
1224 "(V?)PACKUSWBrm",
1225 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001226 "VPBROADCASTBrm",
1227 "VPBROADCASTWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001228 "(V?)PSHUFDmi",
1229 "(V?)PSHUFHWmi",
1230 "(V?)PSHUFLWmi",
1231 "(V?)PUNPCKHBWrm",
1232 "(V?)PUNPCKHDQrm",
1233 "(V?)PUNPCKHQDQrm",
1234 "(V?)PUNPCKHWDrm",
1235 "(V?)PUNPCKLBWrm",
1236 "(V?)PUNPCKLDQrm",
1237 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001238 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001239
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001240def SKLWriteResGroup88a : SchedWriteRes<[SKLPort5,SKLPort23]> {
1241 let Latency = 6;
1242 let NumMicroOps = 2;
1243 let ResourceCycles = [1,1];
1244}
1245def: InstRW<[SKLWriteResGroup88a], (instregex "MMX_PSHUFBrm")>;
1246
Craig Topper58afb4e2018-03-22 21:10:07 +00001247def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001248 let Latency = 7;
1249 let NumMicroOps = 2;
1250 let ResourceCycles = [1,1];
1251}
Craig Topperfc179c62018-03-22 04:23:41 +00001252def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1253 "VCVTPD2PSYrr",
1254 "VCVTPH2PSYrr",
1255 "VCVTPS2PDYrr",
1256 "VCVTPS2PHYrr",
1257 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001258
1259def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1260 let Latency = 7;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
Simon Pilgrimf7dd6062018-05-03 13:27:10 +00001264def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PSLLDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001265 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001266 "VPSLLVDrm",
1267 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001268 "(V?)PSLLWrm",
1269 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001270 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001271 "(V?)PSRAWrm",
1272 "(V?)PSRLDrm",
1273 "(V?)PSRLQrm",
1274 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001275 "VPSRLVQrm",
Simon Pilgrimf7dd6062018-05-03 13:27:10 +00001276 "(V?)PSRLWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001277
1278def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1279 let Latency = 7;
1280 let NumMicroOps = 2;
1281 let ResourceCycles = [1,1];
1282}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001283def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001284 "(V?)INSERTI128rm",
1285 "(V?)MASKMOVPDrm",
1286 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001287 "(V?)PADDBrm",
1288 "(V?)PADDDrm",
1289 "(V?)PADDQrm",
1290 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001291 "(V?)PBLENDDrmi",
1292 "(V?)PMASKMOVDrm",
1293 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001294 "(V?)PSUBBrm",
1295 "(V?)PSUBDrm",
1296 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001297 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001298
1299def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1300 let Latency = 7;
1301 let NumMicroOps = 3;
1302 let ResourceCycles = [2,1];
1303}
Craig Topperfc179c62018-03-22 04:23:41 +00001304def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1305 "MMX_PACKSSWBirm",
1306 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001307
1308def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1309 let Latency = 7;
1310 let NumMicroOps = 3;
1311 let ResourceCycles = [1,2];
1312}
Craig Topperf4cd9082018-01-19 05:47:32 +00001313def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001314
1315def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1316 let Latency = 7;
1317 let NumMicroOps = 3;
1318 let ResourceCycles = [1,2];
1319}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001320def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1321 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001322
Craig Topper58afb4e2018-03-22 21:10:07 +00001323def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001324 let Latency = 7;
1325 let NumMicroOps = 3;
1326 let ResourceCycles = [1,1,1];
1327}
Craig Topperfc179c62018-03-22 04:23:41 +00001328def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1329 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001332 let Latency = 7;
1333 let NumMicroOps = 3;
1334 let ResourceCycles = [1,1,1];
1335}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001336def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001337
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001338def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001339 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001340 let NumMicroOps = 3;
1341 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001342}
Craig Topperfc179c62018-03-22 04:23:41 +00001343def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1344 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001345
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1347 let Latency = 7;
1348 let NumMicroOps = 5;
1349 let ResourceCycles = [1,1,1,2];
1350}
Craig Topperfc179c62018-03-22 04:23:41 +00001351def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1352 "ROL(8|16|32|64)mi",
1353 "ROR(8|16|32|64)m1",
1354 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001355
1356def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1357 let Latency = 7;
1358 let NumMicroOps = 5;
1359 let ResourceCycles = [1,1,1,2];
1360}
Craig Topper13a16502018-03-19 00:56:09 +00001361def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001362
1363def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1364 let Latency = 7;
1365 let NumMicroOps = 5;
1366 let ResourceCycles = [1,1,1,1,1];
1367}
Craig Topperfc179c62018-03-22 04:23:41 +00001368def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1369 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370
1371def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001372 let Latency = 7;
1373 let NumMicroOps = 7;
1374 let ResourceCycles = [1,3,1,2];
1375}
Craig Topper2d451e72018-03-18 08:38:06 +00001376def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001377
Craig Topper58afb4e2018-03-22 21:10:07 +00001378def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001379 let Latency = 8;
1380 let NumMicroOps = 2;
1381 let ResourceCycles = [2];
1382}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001383def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1384 "(V?)ROUNDPS(Y?)r",
1385 "(V?)ROUNDSDr",
1386 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001387
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001388def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001389 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001390 let NumMicroOps = 2;
1391 let ResourceCycles = [1,1];
1392}
Craig Topperfc179c62018-03-22 04:23:41 +00001393def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1394 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001395
1396def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1397 let Latency = 8;
1398 let NumMicroOps = 2;
1399 let ResourceCycles = [1,1];
1400}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001401def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1402 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403
1404def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001405 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001406 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001407 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001408}
Craig Topperf846e2d2018-04-19 05:34:05 +00001409def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001410
Craig Topperf846e2d2018-04-19 05:34:05 +00001411def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1412 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001413 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001414 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415}
Craig Topperfc179c62018-03-22 04:23:41 +00001416def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001417
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1419 let Latency = 8;
1420 let NumMicroOps = 2;
1421 let ResourceCycles = [1,1];
1422}
Craig Topperfc179c62018-03-22 04:23:41 +00001423def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1424 "FCOM64m",
1425 "FCOMP32m",
1426 "FCOMP64m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001427 "MMX_PSADBWirm", // TODO - SKLWriteResGroup120??
Craig Topperfc179c62018-03-22 04:23:41 +00001428 "VPBROADCASTBYrm",
1429 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001430 "VPMOVSXBDYrm",
1431 "VPMOVSXBQYrm",
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001432 "VPMOVSXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433
1434def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1435 let Latency = 8;
1436 let NumMicroOps = 2;
1437 let ResourceCycles = [1,1];
1438}
Simon Pilgrimf7dd6062018-05-03 13:27:10 +00001439def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001440 "VPSLLQYrm",
1441 "VPSLLVDYrm",
1442 "VPSLLVQYrm",
1443 "VPSLLWYrm",
1444 "VPSRADYrm",
1445 "VPSRAVDYrm",
1446 "VPSRAWYrm",
1447 "VPSRLDYrm",
1448 "VPSRLQYrm",
1449 "VPSRLVDYrm",
1450 "VPSRLVQYrm",
Simon Pilgrimf7dd6062018-05-03 13:27:10 +00001451 "VPSRLWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452
1453def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1454 let Latency = 8;
1455 let NumMicroOps = 2;
1456 let ResourceCycles = [1,1];
1457}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001458def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001459 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001460 "VPADDBYrm",
1461 "VPADDDYrm",
1462 "VPADDQYrm",
1463 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001464 "VPBLENDDYrmi",
1465 "VPMASKMOVDYrm",
1466 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001467 "VPSUBBYrm",
1468 "VPSUBDYrm",
1469 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001470 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001472def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1473 let Latency = 8;
1474 let NumMicroOps = 4;
1475 let ResourceCycles = [1,2,1];
1476}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001477def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478
1479def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1480 let Latency = 8;
1481 let NumMicroOps = 4;
1482 let ResourceCycles = [2,1,1];
1483}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001484def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485
Craig Topper58afb4e2018-03-22 21:10:07 +00001486def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487 let Latency = 8;
1488 let NumMicroOps = 4;
1489 let ResourceCycles = [1,1,1,1];
1490}
1491def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1492
1493def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1494 let Latency = 8;
1495 let NumMicroOps = 5;
1496 let ResourceCycles = [1,1,3];
1497}
Craig Topper13a16502018-03-19 00:56:09 +00001498def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499
1500def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1501 let Latency = 8;
1502 let NumMicroOps = 5;
1503 let ResourceCycles = [1,1,1,2];
1504}
Craig Topperfc179c62018-03-22 04:23:41 +00001505def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1506 "RCL(8|16|32|64)mi",
1507 "RCR(8|16|32|64)m1",
1508 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001509
1510def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1511 let Latency = 8;
1512 let NumMicroOps = 6;
1513 let ResourceCycles = [1,1,1,3];
1514}
Craig Topperfc179c62018-03-22 04:23:41 +00001515def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1516 "SAR(8|16|32|64)mCL",
1517 "SHL(8|16|32|64)mCL",
1518 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001519
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1521 let Latency = 8;
1522 let NumMicroOps = 6;
1523 let ResourceCycles = [1,1,1,2,1];
1524}
Craig Topper9f834812018-04-01 21:54:24 +00001525def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001526 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001527 "SBB(8|16|32|64)mi")>;
1528def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1529 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001530
1531def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1532 let Latency = 9;
1533 let NumMicroOps = 2;
1534 let ResourceCycles = [1,1];
1535}
Craig Topperfc179c62018-03-22 04:23:41 +00001536def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1537 "MMX_PMADDUBSWrm",
1538 "MMX_PMADDWDirm",
1539 "MMX_PMULHRSWrm",
1540 "MMX_PMULHUWirm",
1541 "MMX_PMULHWirm",
1542 "MMX_PMULLWirm",
1543 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001544 "VTESTPDYrm",
1545 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001546
1547def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1548 let Latency = 9;
1549 let NumMicroOps = 2;
1550 let ResourceCycles = [1,1];
1551}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001552def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001553 "VPMOVSXBWYrm",
1554 "VPMOVSXDQYrm",
1555 "VPMOVSXWDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001556 "VPMOVZXWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001557
1558def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1559 let Latency = 9;
1560 let NumMicroOps = 2;
1561 let ResourceCycles = [1,1];
1562}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001563def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1564 "(V?)ADDSSrm",
1565 "(V?)CMPSDrm",
1566 "(V?)CMPSSrm",
1567 "(V?)MAX(C?)SDrm",
1568 "(V?)MAX(C?)SSrm",
1569 "(V?)MIN(C?)SDrm",
1570 "(V?)MIN(C?)SSrm",
1571 "(V?)MULSDrm",
1572 "(V?)MULSSrm",
1573 "(V?)SUBSDrm",
1574 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001575
Craig Topper58afb4e2018-03-22 21:10:07 +00001576def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001577 let Latency = 9;
1578 let NumMicroOps = 2;
1579 let ResourceCycles = [1,1];
1580}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001581def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001582 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001583 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001584 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585
Craig Topper58afb4e2018-03-22 21:10:07 +00001586def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001587 let Latency = 9;
1588 let NumMicroOps = 3;
1589 let ResourceCycles = [1,2];
1590}
Craig Topperfc179c62018-03-22 04:23:41 +00001591def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001592
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001593def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1594 let Latency = 9;
1595 let NumMicroOps = 3;
1596 let ResourceCycles = [1,1,1];
1597}
Craig Topperfc179c62018-03-22 04:23:41 +00001598def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001599
1600def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1601 let Latency = 9;
1602 let NumMicroOps = 3;
1603 let ResourceCycles = [1,1,1];
1604}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001605def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001606
1607def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001608 let Latency = 9;
1609 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001610 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001611}
Craig Topperfc179c62018-03-22 04:23:41 +00001612def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1613 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001614
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001615def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1616 let Latency = 9;
1617 let NumMicroOps = 4;
1618 let ResourceCycles = [1,1,1,1];
1619}
Craig Topperfc179c62018-03-22 04:23:41 +00001620def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1621 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1624 let Latency = 9;
1625 let NumMicroOps = 5;
1626 let ResourceCycles = [1,2,1,1];
1627}
Craig Topperfc179c62018-03-22 04:23:41 +00001628def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1629 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001630
1631def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1632 let Latency = 10;
1633 let NumMicroOps = 2;
1634 let ResourceCycles = [1,1];
1635}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001636def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001637 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001638
1639def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1640 let Latency = 10;
1641 let NumMicroOps = 2;
1642 let ResourceCycles = [1,1];
1643}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001644def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1645 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001646 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001647 "VPMOVZXBDYrm",
1648 "VPMOVZXBQYrm",
1649 "VPMOVZXBWYrm",
1650 "VPMOVZXDQYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001651 "VPMOVZXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001652
1653def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1654 let Latency = 10;
1655 let NumMicroOps = 2;
1656 let ResourceCycles = [1,1];
1657}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001658def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001659 "(V?)CVTPH2PSYrm",
1660 "(V?)CVTPS2DQrm",
1661 "(V?)CVTSS2SDrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001662 "(V?)CVTTPS2DQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001663
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001664def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1665 let Latency = 10;
1666 let NumMicroOps = 3;
1667 let ResourceCycles = [1,1,1];
1668}
Craig Topperfc179c62018-03-22 04:23:41 +00001669def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1670 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001671
Craig Topper58afb4e2018-03-22 21:10:07 +00001672def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001673 let Latency = 10;
1674 let NumMicroOps = 3;
1675 let ResourceCycles = [1,1,1];
1676}
Craig Topperfc179c62018-03-22 04:23:41 +00001677def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001678
1679def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001680 let Latency = 10;
1681 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001683}
Craig Topperfc179c62018-03-22 04:23:41 +00001684def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1685 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001686
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001687def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001688 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001689 let NumMicroOps = 4;
1690 let ResourceCycles = [1,1,1,1];
1691}
Craig Topperf846e2d2018-04-19 05:34:05 +00001692def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001693
1694def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1695 let Latency = 10;
1696 let NumMicroOps = 8;
1697 let ResourceCycles = [1,1,1,1,1,3];
1698}
Craig Topper13a16502018-03-19 00:56:09 +00001699def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001700
1701def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001702 let Latency = 10;
1703 let NumMicroOps = 10;
1704 let ResourceCycles = [9,1];
1705}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001707
Craig Topper8104f262018-04-02 05:33:28 +00001708def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001709 let Latency = 11;
1710 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001711 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001712}
Craig Topper8104f262018-04-02 05:33:28 +00001713def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001714 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001715
Craig Topper8104f262018-04-02 05:33:28 +00001716def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1717 let Latency = 11;
1718 let NumMicroOps = 1;
1719 let ResourceCycles = [1,5];
1720}
1721def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1722
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001724 let Latency = 11;
1725 let NumMicroOps = 2;
1726 let ResourceCycles = [1,1];
1727}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001728def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001729 "VRCPPSYm",
1730 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1733 let Latency = 11;
1734 let NumMicroOps = 2;
1735 let ResourceCycles = [1,1];
1736}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001737def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001738 "VCVTPS2DQYrm",
1739 "VCVTPS2PDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001740 "VCVTTPS2DQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1743 let Latency = 11;
1744 let NumMicroOps = 3;
1745 let ResourceCycles = [2,1];
1746}
Craig Topperfc179c62018-03-22 04:23:41 +00001747def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1748 "FICOM32m",
1749 "FICOMP16m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001750 "FICOMP32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001751
1752def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1753 let Latency = 11;
1754 let NumMicroOps = 3;
1755 let ResourceCycles = [1,1,1];
1756}
Craig Topperfc179c62018-03-22 04:23:41 +00001757def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001758
Craig Topper58afb4e2018-03-22 21:10:07 +00001759def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001760 let Latency = 11;
1761 let NumMicroOps = 3;
1762 let ResourceCycles = [1,1,1];
1763}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001764def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1765 "(V?)CVTSD2SIrm",
1766 "(V?)CVTSS2SI64rm",
1767 "(V?)CVTSS2SIrm",
1768 "(V?)CVTTSD2SI64rm",
1769 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001770 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001771 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001772
Craig Topper58afb4e2018-03-22 21:10:07 +00001773def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001774 let Latency = 11;
1775 let NumMicroOps = 3;
1776 let ResourceCycles = [1,1,1];
1777}
Craig Topperfc179c62018-03-22 04:23:41 +00001778def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1779 "CVTPD2PSrm",
1780 "CVTTPD2DQrm",
1781 "MMX_CVTPD2PIirm",
1782 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001783
1784def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1785 let Latency = 11;
1786 let NumMicroOps = 6;
1787 let ResourceCycles = [1,1,1,2,1];
1788}
Craig Topperfc179c62018-03-22 04:23:41 +00001789def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1790 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791
1792def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793 let Latency = 11;
1794 let NumMicroOps = 7;
1795 let ResourceCycles = [2,3,2];
1796}
Craig Topperfc179c62018-03-22 04:23:41 +00001797def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1798 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001799
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001800def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801 let Latency = 11;
1802 let NumMicroOps = 9;
1803 let ResourceCycles = [1,5,1,2];
1804}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001805def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001808 let Latency = 11;
1809 let NumMicroOps = 11;
1810 let ResourceCycles = [2,9];
1811}
Craig Topperfc179c62018-03-22 04:23:41 +00001812def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001813
Craig Topper8104f262018-04-02 05:33:28 +00001814def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001815 let Latency = 12;
1816 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001817 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001818}
Craig Topper8104f262018-04-02 05:33:28 +00001819def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001820 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001821
Craig Topper8104f262018-04-02 05:33:28 +00001822def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1823 let Latency = 12;
1824 let NumMicroOps = 1;
1825 let ResourceCycles = [1,6];
1826}
1827def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1828
Craig Topper58afb4e2018-03-22 21:10:07 +00001829def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001830 let Latency = 12;
1831 let NumMicroOps = 4;
1832 let ResourceCycles = [1,1,1,1];
1833}
1834def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1835
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001836def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001837 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001838 let NumMicroOps = 3;
1839 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001840}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001841def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001842
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1844 let Latency = 13;
1845 let NumMicroOps = 3;
1846 let ResourceCycles = [1,1,1];
1847}
1848def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
1849
Craig Topper58afb4e2018-03-22 21:10:07 +00001850def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001851 let Latency = 13;
1852 let NumMicroOps = 4;
1853 let ResourceCycles = [1,3];
1854}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001855def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001856
Craig Topper8104f262018-04-02 05:33:28 +00001857def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001858 let Latency = 14;
1859 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001860 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861}
Craig Topper8104f262018-04-02 05:33:28 +00001862def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001863 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001864
Craig Topper8104f262018-04-02 05:33:28 +00001865def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1866 let Latency = 14;
1867 let NumMicroOps = 1;
1868 let ResourceCycles = [1,5];
1869}
1870def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
1871
Craig Topper58afb4e2018-03-22 21:10:07 +00001872def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001873 let Latency = 14;
1874 let NumMicroOps = 3;
1875 let ResourceCycles = [1,2];
1876}
Craig Topperfc179c62018-03-22 04:23:41 +00001877def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
1878def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
1879def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
1880def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001881
1882def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1883 let Latency = 14;
1884 let NumMicroOps = 3;
1885 let ResourceCycles = [1,1,1];
1886}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001887def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888
1889def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001890 let Latency = 14;
1891 let NumMicroOps = 10;
1892 let ResourceCycles = [2,4,1,3];
1893}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001894def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001895
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001897 let Latency = 15;
1898 let NumMicroOps = 1;
1899 let ResourceCycles = [1];
1900}
Craig Topperfc179c62018-03-22 04:23:41 +00001901def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
1902 "DIVR_FST0r",
1903 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001904
Craig Topper58afb4e2018-03-22 21:10:07 +00001905def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001907 let NumMicroOps = 3;
1908 let ResourceCycles = [1,2];
1909}
Craig Topper40d3b322018-03-22 21:55:20 +00001910def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
1911 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912
Craig Topper58afb4e2018-03-22 21:10:07 +00001913def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914 let Latency = 15;
1915 let NumMicroOps = 4;
1916 let ResourceCycles = [1,1,2];
1917}
Craig Topperfc179c62018-03-22 04:23:41 +00001918def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001919
1920def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1921 let Latency = 15;
1922 let NumMicroOps = 10;
1923 let ResourceCycles = [1,1,1,5,1,1];
1924}
Craig Topper13a16502018-03-19 00:56:09 +00001925def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001926
Craig Topper8104f262018-04-02 05:33:28 +00001927def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001929 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001930 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001931}
Craig Topperfc179c62018-03-22 04:23:41 +00001932def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001933
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1935 let Latency = 16;
1936 let NumMicroOps = 14;
1937 let ResourceCycles = [1,1,1,4,2,5];
1938}
1939def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
1940
1941def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001942 let Latency = 16;
1943 let NumMicroOps = 16;
1944 let ResourceCycles = [16];
1945}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001946def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947
Craig Topper8104f262018-04-02 05:33:28 +00001948def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001949 let Latency = 17;
1950 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001951 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001952}
Craig Topper8104f262018-04-02 05:33:28 +00001953def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
1954
1955def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1956 let Latency = 17;
1957 let NumMicroOps = 2;
1958 let ResourceCycles = [1,1,3];
1959}
1960def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001961
1962def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001963 let Latency = 17;
1964 let NumMicroOps = 15;
1965 let ResourceCycles = [2,1,2,4,2,4];
1966}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001967def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001968
Craig Topper8104f262018-04-02 05:33:28 +00001969def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001970 let Latency = 18;
1971 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001972 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001973}
Craig Topper8104f262018-04-02 05:33:28 +00001974def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001975 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001976
Craig Topper8104f262018-04-02 05:33:28 +00001977def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1978 let Latency = 18;
1979 let NumMicroOps = 1;
1980 let ResourceCycles = [1,12];
1981}
1982def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
1983
1984def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001985 let Latency = 18;
1986 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001987 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001988}
Craig Topper8104f262018-04-02 05:33:28 +00001989def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
1990
1991def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1992 let Latency = 18;
1993 let NumMicroOps = 2;
1994 let ResourceCycles = [1,1,3];
1995}
1996def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001997
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001998def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001999 let Latency = 18;
2000 let NumMicroOps = 8;
2001 let ResourceCycles = [1,1,1,5];
2002}
Craig Topperfc179c62018-03-22 04:23:41 +00002003def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002004
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002005def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002006 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002007 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002008 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002009}
Craig Topper13a16502018-03-19 00:56:09 +00002010def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002011
Craig Topper8104f262018-04-02 05:33:28 +00002012def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013 let Latency = 19;
2014 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002015 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002016}
Craig Topper8104f262018-04-02 05:33:28 +00002017def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2018
2019def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2020 let Latency = 19;
2021 let NumMicroOps = 2;
2022 let ResourceCycles = [1,1,6];
2023}
2024def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002025
Craig Topper58afb4e2018-03-22 21:10:07 +00002026def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027 let Latency = 19;
2028 let NumMicroOps = 5;
2029 let ResourceCycles = [1,1,3];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002032
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002033def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034 let Latency = 20;
2035 let NumMicroOps = 1;
2036 let ResourceCycles = [1];
2037}
Craig Topperfc179c62018-03-22 04:23:41 +00002038def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2039 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002040 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002041
Craig Topper8104f262018-04-02 05:33:28 +00002042def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002043 let Latency = 20;
2044 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002045 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002046}
Craig Topperfc179c62018-03-22 04:23:41 +00002047def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002048
Craig Topper58afb4e2018-03-22 21:10:07 +00002049def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002050 let Latency = 20;
2051 let NumMicroOps = 5;
2052 let ResourceCycles = [1,1,3];
2053}
2054def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2055
2056def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2057 let Latency = 20;
2058 let NumMicroOps = 8;
2059 let ResourceCycles = [1,1,1,1,1,1,2];
2060}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002061def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062
2063def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064 let Latency = 20;
2065 let NumMicroOps = 10;
2066 let ResourceCycles = [1,2,7];
2067}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002068def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002069
Craig Topper8104f262018-04-02 05:33:28 +00002070def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002071 let Latency = 21;
2072 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002073 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002074}
2075def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2076
2077def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2078 let Latency = 22;
2079 let NumMicroOps = 2;
2080 let ResourceCycles = [1,1];
2081}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002082def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002083
2084def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2085 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002086 let NumMicroOps = 5;
2087 let ResourceCycles = [1,2,1,1];
2088}
Craig Topper17a31182017-12-16 18:35:29 +00002089def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2090 VGATHERDPDrm,
2091 VGATHERQPDrm,
2092 VGATHERQPSrm,
2093 VPGATHERDDrm,
2094 VPGATHERDQrm,
2095 VPGATHERQDrm,
2096 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002097
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2099 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002100 let NumMicroOps = 5;
2101 let ResourceCycles = [1,2,1,1];
2102}
Craig Topper17a31182017-12-16 18:35:29 +00002103def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2104 VGATHERQPDYrm,
2105 VGATHERQPSYrm,
2106 VPGATHERDDYrm,
2107 VPGATHERDQYrm,
2108 VPGATHERQDYrm,
2109 VPGATHERQQYrm,
2110 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111
Craig Topper8104f262018-04-02 05:33:28 +00002112def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002113 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002114 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002115 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002116}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002117def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002118
2119def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2120 let Latency = 23;
2121 let NumMicroOps = 19;
2122 let ResourceCycles = [2,1,4,1,1,4,6];
2123}
2124def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2125
Craig Topper8104f262018-04-02 05:33:28 +00002126def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002127 let Latency = 24;
2128 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002129 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002130}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002131def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002132
Craig Topper8104f262018-04-02 05:33:28 +00002133def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002134 let Latency = 25;
2135 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002136 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002138def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002139
2140def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2141 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142 let NumMicroOps = 3;
2143 let ResourceCycles = [1,1,1];
2144}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002145def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002146
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002147def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2148 let Latency = 27;
2149 let NumMicroOps = 2;
2150 let ResourceCycles = [1,1];
2151}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002152def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002153
2154def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2155 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156 let NumMicroOps = 8;
2157 let ResourceCycles = [2,4,1,1];
2158}
Craig Topper13a16502018-03-19 00:56:09 +00002159def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002160
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002161def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002163 let NumMicroOps = 3;
2164 let ResourceCycles = [1,1,1];
2165}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002166def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167
2168def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2169 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170 let NumMicroOps = 23;
2171 let ResourceCycles = [1,5,3,4,10];
2172}
Craig Topperfc179c62018-03-22 04:23:41 +00002173def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2174 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002175
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002176def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2177 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002178 let NumMicroOps = 23;
2179 let ResourceCycles = [1,5,2,1,4,10];
2180}
Craig Topperfc179c62018-03-22 04:23:41 +00002181def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2182 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002183
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002184def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2185 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002186 let NumMicroOps = 31;
2187 let ResourceCycles = [1,8,1,21];
2188}
Craig Topper391c6f92017-12-10 01:24:08 +00002189def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002190
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002191def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2192 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002193 let NumMicroOps = 18;
2194 let ResourceCycles = [1,1,2,3,1,1,1,8];
2195}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002196def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002198def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2199 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002200 let NumMicroOps = 39;
2201 let ResourceCycles = [1,10,1,1,26];
2202}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002203def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002205def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206 let Latency = 42;
2207 let NumMicroOps = 22;
2208 let ResourceCycles = [2,20];
2209}
Craig Topper2d451e72018-03-18 08:38:06 +00002210def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002212def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2213 let Latency = 42;
2214 let NumMicroOps = 40;
2215 let ResourceCycles = [1,11,1,1,26];
2216}
Craig Topper391c6f92017-12-10 01:24:08 +00002217def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002218
2219def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2220 let Latency = 46;
2221 let NumMicroOps = 44;
2222 let ResourceCycles = [1,11,1,1,30];
2223}
2224def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2225
2226def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2227 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002228 let NumMicroOps = 64;
2229 let ResourceCycles = [2,8,5,10,39];
2230}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002233def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2234 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002235 let NumMicroOps = 88;
2236 let ResourceCycles = [4,4,31,1,2,1,45];
2237}
Craig Topper2d451e72018-03-18 08:38:06 +00002238def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002240def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2241 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002242 let NumMicroOps = 90;
2243 let ResourceCycles = [4,2,33,1,2,1,47];
2244}
Craig Topper2d451e72018-03-18 08:38:06 +00002245def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002246
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002247def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002248 let Latency = 75;
2249 let NumMicroOps = 15;
2250 let ResourceCycles = [6,3,6];
2251}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002252def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002253
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002254def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255 let Latency = 76;
2256 let NumMicroOps = 32;
2257 let ResourceCycles = [7,2,8,3,1,11];
2258}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262 let Latency = 102;
2263 let NumMicroOps = 66;
2264 let ResourceCycles = [4,2,4,8,14,34];
2265}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002266def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002268def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2269 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270 let NumMicroOps = 100;
2271 let ResourceCycles = [9,1,11,16,1,11,21,30];
2272}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002273def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274
2275} // SchedModel