blob: 1e34b840915374db97349780cf36a22adbd47b11 [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 Pilgrim67cc2462018-05-04 15:20:18 +0000169defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add.
170defm : SKLWriteResPair<WriteFMAX, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add (XMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000171defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrim542b20d2018-05-03 22:31:19 +0000172defm : SKLWriteResPair<WriteDPPD, [SKLPort5,SKLPort01], 9, [1,2], 3, 6>; // Floating point double dot product.
173defm : SKLWriteResPair<WriteDPPS, [SKLPort5,SKLPort01], 13, [1,3], 4, 6>; // Floating point single dot product.
174defm : SKLWriteResPair<WriteDPPSY, [SKLPort5,SKLPort01], 13, [1,3], 4, 7>; // Floating point single dot product (YMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000175defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimbe51b202018-05-04 12:59:24 +0000176defm : SKLWriteResPair<WriteFRnd, [SKLPort01], 8, [2], 2, 6>; // Floating point rounding.
177defm : SKLWriteResPair<WriteFRndY, [SKLPort01], 8, [2], 2, 7>; // Floating point rounding (YMM/ZMM).
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000178defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
179defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000180defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000181defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000182defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
183defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000184defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000185defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000186defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000187defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000188
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000189def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
190 let Latency = 6;
191 let NumMicroOps = 4;
192 let ResourceCycles = [1,1,1,1];
193}
194
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000195// FMA Scheduling helper class.
196// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
197
198// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000199def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
200def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
201def : WriteRes<WriteVecMove, [SKLPort015]>;
202
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000203defm : SKLWriteResPair<WriteVecALU, [SKLPort01], 1, [1], 1, 6>; // Vector integer ALU op, no logicals.
204defm : SKLWriteResPair<WriteVecALUY, [SKLPort01], 1, [1], 1, 7>; // Vector integer ALU op, no logicals (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000205defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000206defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000207defm : SKLWriteResPair<WriteVecIMul, [SKLPort0] , 4, [1], 1, 5>; // Vector integer multiply.
208defm : SKLWriteResPair<WriteVecIMulX, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply (XMM).
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000209defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM).
210defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD.
211defm : SKLWriteResPair<WritePMULLDY, [SKLPort01], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000212defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000213defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
214defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Vector shuffles.
215defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
Simon Pilgrim06e16542018-04-22 18:35:53 +0000216defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000217defm : SKLWriteResPair<WriteBlendY, [SKLPort5], 1, [1], 1, 7>; // Vector blends (YMM/ZMM).
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000218defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000219defm : SKLWriteResPair<WriteVarBlendY, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends (YMM/ZMM).
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000220defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000221defm : SKLWriteResPair<WriteMPSADY, [SKLPort5], 4, [2], 2, 7>; // Vector MPSAD.
222defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3, [1], 1, 6>; // Vector PSADBW.
223defm : SKLWriteResPair<WritePSADBWY, [SKLPort5], 3, [1], 1, 7>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000224defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000226// Vector integer shifts.
227defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1, [1], 1, 5>;
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000228defm : X86WriteRes<WriteVecShiftX, [SKLPort5,SKLPort01], 2, [1,1], 2>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000229defm : X86WriteRes<WriteVecShiftY, [SKLPort5,SKLPort01], 4, [1,1], 2>;
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000230defm : X86WriteRes<WriteVecShiftXLd, [SKLPort01,SKLPort23], 7, [1,1], 2>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000231defm : X86WriteRes<WriteVecShiftYLd, [SKLPort01,SKLPort23], 8, [1,1], 2>;
232
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000233defm : SKLWriteResPair<WriteVecShiftImm, [SKLPort0], 1, [1], 1, 5>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000234defm : SKLWriteResPair<WriteVecShiftImmX, [SKLPort01], 1, [1], 1, 6>; // Vector integer immediate shifts (XMM).
235defm : SKLWriteResPair<WriteVecShiftImmY, [SKLPort01], 1, [1], 1, 7>; // Vector integer immediate shifts (YMM/ZMM).
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000236defm : SKLWriteResPair<WriteVarVecShift, [SKLPort01], 1, [1], 1, 6>; // Variable vector shifts.
237defm : SKLWriteResPair<WriteVarVecShiftY, [SKLPort01], 1, [1], 1, 7>; // Variable vector shifts (YMM/ZMM).
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000238
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000239// Vector insert/extract operations.
240def : WriteRes<WriteVecInsert, [SKLPort5]> {
241 let Latency = 2;
242 let NumMicroOps = 2;
243 let ResourceCycles = [2];
244}
245def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
246 let Latency = 6;
247 let NumMicroOps = 2;
248}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000249def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000250
251def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
252 let Latency = 3;
253 let NumMicroOps = 2;
254}
255def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
256 let Latency = 2;
257 let NumMicroOps = 3;
258}
259
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000261defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
262defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
263defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000264
265// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000266
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000267// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
269 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000270 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271 let ResourceCycles = [3];
272}
273def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000274 let Latency = 16;
275 let NumMicroOps = 4;
276 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000278
279// Packed Compare Explicit Length Strings, Return Mask
280def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
281 let Latency = 19;
282 let NumMicroOps = 9;
283 let ResourceCycles = [4,3,1,1];
284}
285def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
286 let Latency = 25;
287 let NumMicroOps = 10;
288 let ResourceCycles = [4,3,1,1,1];
289}
290
291// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000292def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000293 let Latency = 10;
294 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295 let ResourceCycles = [3];
296}
297def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000298 let Latency = 16;
299 let NumMicroOps = 4;
300 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000302
303// Packed Compare Explicit Length Strings, Return Index
304def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
305 let Latency = 18;
306 let NumMicroOps = 8;
307 let ResourceCycles = [4,3,1];
308}
309def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
310 let Latency = 24;
311 let NumMicroOps = 9;
312 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000313}
314
Simon Pilgrima2f26782018-03-27 20:38:54 +0000315// MOVMSK Instructions.
Simon Pilgrimbf4c8c02018-05-04 14:54:33 +0000316def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
317def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
318def : WriteRes<WriteVecMOVMSKY, [SKLPort0]> { let Latency = 2; }
319def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
Simon Pilgrima2f26782018-03-27 20:38:54 +0000320
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000321// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000322def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
323 let Latency = 4;
324 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325 let ResourceCycles = [1];
326}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000327def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
328 let Latency = 10;
329 let NumMicroOps = 2;
330 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000331}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000332
333def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
334 let Latency = 8;
335 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000336 let ResourceCycles = [2];
337}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000338def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000339 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000340 let NumMicroOps = 3;
341 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000342}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000343
344def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
345 let Latency = 20;
346 let NumMicroOps = 11;
347 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000348}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000349def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
350 let Latency = 25;
351 let NumMicroOps = 11;
352 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000353}
354
355// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000356def : WriteRes<WriteCLMul, [SKLPort5]> {
357 let Latency = 6;
358 let NumMicroOps = 1;
359 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000360}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000361def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
362 let Latency = 12;
363 let NumMicroOps = 2;
364 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000365}
366
367// Catch-all for expensive system instructions.
368def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
369
370// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000371defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
372defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
373defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
374defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000375
376// Old microcoded instructions that nobody use.
377def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
378
379// Fence instructions.
380def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
381
Craig Topper05242bf2018-04-21 18:07:36 +0000382// Load/store MXCSR.
383def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
384def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
385
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000386// Nop, not very useful expect it provides a model for nops!
387def : WriteRes<WriteNop, []>;
388
389////////////////////////////////////////////////////////////////////////////////
390// Horizontal add/sub instructions.
391////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000392
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000393defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
394defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000395defm : SKLWriteResPair<WritePHAdd, [SKLPort5,SKLPort015], 3, [2,1], 3, 6>;
396defm : SKLWriteResPair<WritePHAddY, [SKLPort5,SKLPort015], 3, [2,1], 3, 7>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000397
398// Remaining instrs.
399
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000400def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000401 let Latency = 1;
402 let NumMicroOps = 1;
403 let ResourceCycles = [1];
404}
Craig Topperfc179c62018-03-22 04:23:41 +0000405def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
406 "MMX_PADDSWirr",
407 "MMX_PADDUSBirr",
408 "MMX_PADDUSWirr",
409 "MMX_PAVGBirr",
410 "MMX_PAVGWirr",
411 "MMX_PCMPEQBirr",
412 "MMX_PCMPEQDirr",
413 "MMX_PCMPEQWirr",
414 "MMX_PCMPGTBirr",
415 "MMX_PCMPGTDirr",
416 "MMX_PCMPGTWirr",
417 "MMX_PMAXSWirr",
418 "MMX_PMAXUBirr",
419 "MMX_PMINSWirr",
420 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000421 "MMX_PSUBSBirr",
422 "MMX_PSUBSWirr",
423 "MMX_PSUBUSBirr",
424 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000425
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000426def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000427 let Latency = 1;
428 let NumMicroOps = 1;
429 let ResourceCycles = [1];
430}
Craig Topperfc179c62018-03-22 04:23:41 +0000431def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
432 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000433 "MMX_MOVD64rr",
434 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000435 "UCOM_FPr",
436 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000437 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000438 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000439
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000440def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000441 let Latency = 1;
442 let NumMicroOps = 1;
443 let ResourceCycles = [1];
444}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000445def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000446
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000447def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000448 let Latency = 1;
449 let NumMicroOps = 1;
450 let ResourceCycles = [1];
451}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000452def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
453def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000454 "MMX_PABS(B|D|W)rr",
455 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000456 "MMX_PANDNirr",
457 "MMX_PANDirr",
458 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000459 "MMX_PSIGN(B|D|W)rr",
460 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000461 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000462
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000463def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464 let Latency = 1;
465 let NumMicroOps = 1;
466 let ResourceCycles = [1];
467}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000468def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000469def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
470 "ADC(16|32|64)i",
471 "ADC(8|16|32|64)rr",
472 "ADCX(32|64)rr",
473 "ADOX(32|64)rr",
474 "BT(16|32|64)ri8",
475 "BT(16|32|64)rr",
476 "BTC(16|32|64)ri8",
477 "BTC(16|32|64)rr",
478 "BTR(16|32|64)ri8",
479 "BTR(16|32|64)rr",
480 "BTS(16|32|64)ri8",
481 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000482 "SBB(16|32|64)ri",
483 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000484 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000485
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000486def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
487 let Latency = 1;
488 let NumMicroOps = 1;
489 let ResourceCycles = [1];
490}
Craig Topperfc179c62018-03-22 04:23:41 +0000491def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
492 "BLSI(32|64)rr",
493 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000494 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000495
496def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
497 let Latency = 1;
498 let NumMicroOps = 1;
499 let ResourceCycles = [1];
500}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000501def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000502 "(V?)PADDD(Y?)rr",
503 "(V?)PADDQ(Y?)rr",
504 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000505 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000506 "(V?)PSUBB(Y?)rr",
507 "(V?)PSUBD(Y?)rr",
508 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000509 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000510
511def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
512 let Latency = 1;
513 let NumMicroOps = 1;
514 let ResourceCycles = [1];
515}
Craig Topperfbe31322018-04-05 21:56:19 +0000516def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000517def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000518def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000519 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000520 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000521 "SGDT64m",
522 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000523 "SMSW16m",
524 "STC",
525 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000526 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000527
528def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000529 let Latency = 1;
530 let NumMicroOps = 2;
531 let ResourceCycles = [1,1];
532}
Craig Topperfc179c62018-03-22 04:23:41 +0000533def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
534 "MMX_MOVD64from64rm",
535 "MMX_MOVD64mr",
536 "MMX_MOVNTQmr",
537 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "MOVNTI_64mr",
539 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000540 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "VEXTRACTF128mr",
542 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000543 "(V?)MOVAPDYmr",
544 "(V?)MOVAPS(Y?)mr",
545 "(V?)MOVDQA(Y?)mr",
546 "(V?)MOVDQU(Y?)mr",
547 "(V?)MOVHPDmr",
548 "(V?)MOVHPSmr",
549 "(V?)MOVLPDmr",
550 "(V?)MOVLPSmr",
551 "(V?)MOVNTDQ(Y?)mr",
552 "(V?)MOVNTPD(Y?)mr",
553 "(V?)MOVNTPS(Y?)mr",
554 "(V?)MOVPDI2DImr",
555 "(V?)MOVPQI2QImr",
556 "(V?)MOVPQIto64mr",
557 "(V?)MOVSDmr",
558 "(V?)MOVSSmr",
559 "(V?)MOVUPD(Y?)mr",
560 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000562
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000563def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000564 let Latency = 2;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000568def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000569 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000570 "(V?)MOVPDI2DIrr",
571 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000572 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000573 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000574
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000575def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000576 let Latency = 2;
577 let NumMicroOps = 2;
578 let ResourceCycles = [2];
579}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000580def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000581
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000582def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000583 let Latency = 2;
584 let NumMicroOps = 2;
585 let ResourceCycles = [2];
586}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000587def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
588def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000589
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000590def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000591 let Latency = 2;
592 let NumMicroOps = 2;
593 let ResourceCycles = [2];
594}
Craig Topperfc179c62018-03-22 04:23:41 +0000595def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
596 "ROL(8|16|32|64)r1",
597 "ROL(8|16|32|64)ri",
598 "ROR(8|16|32|64)r1",
599 "ROR(8|16|32|64)ri",
600 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000601
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000602def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000603 let Latency = 2;
604 let NumMicroOps = 2;
605 let ResourceCycles = [2];
606}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000607def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
608 WAIT,
609 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000611def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612 let Latency = 2;
613 let NumMicroOps = 2;
614 let ResourceCycles = [1,1];
615}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000616def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
617 "VMASKMOVPS(Y?)mr",
618 "VPMASKMOVD(Y?)mr",
619 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000621def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000622 let Latency = 2;
623 let NumMicroOps = 2;
624 let ResourceCycles = [1,1];
625}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000626def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000628def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629 let Latency = 2;
630 let NumMicroOps = 2;
631 let ResourceCycles = [1,1];
632}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000633def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000634
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000635def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636 let Latency = 2;
637 let NumMicroOps = 2;
638 let ResourceCycles = [1,1];
639}
Craig Topper498875f2018-04-04 17:54:19 +0000640def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
641
642def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
643 let Latency = 1;
644 let NumMicroOps = 1;
645 let ResourceCycles = [1];
646}
647def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000649def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000651 let NumMicroOps = 2;
652 let ResourceCycles = [1,1];
653}
Craig Topper2d451e72018-03-18 08:38:06 +0000654def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000655def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000656def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
657 "ADC8ri",
658 "SBB8i8",
659 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
662 let Latency = 2;
663 let NumMicroOps = 3;
664 let ResourceCycles = [1,1,1];
665}
666def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
669 let Latency = 2;
670 let NumMicroOps = 3;
671 let ResourceCycles = [1,1,1];
672}
673def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
674
675def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
676 let Latency = 2;
677 let NumMicroOps = 3;
678 let ResourceCycles = [1,1,1];
679}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000680def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
681 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000682def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000683 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684
685def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
686 let Latency = 3;
687 let NumMicroOps = 1;
688 let ResourceCycles = [1];
689}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000690def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
691 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000692 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000693 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000694 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000695
Clement Courbet327fac42018-03-07 08:14:02 +0000696def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000697 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698 let NumMicroOps = 2;
699 let ResourceCycles = [1,1];
700}
Clement Courbet327fac42018-03-07 08:14:02 +0000701def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000702
703def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
704 let Latency = 3;
705 let NumMicroOps = 1;
706 let ResourceCycles = [1];
707}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000708def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
709 "(ADD|SUB|SUBR)_FST0r",
710 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000711 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000712 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000713 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000714 "VPMOVSXBDYrr",
715 "VPMOVSXBQYrr",
716 "VPMOVSXBWYrr",
717 "VPMOVSXDQYrr",
718 "VPMOVSXWDYrr",
719 "VPMOVSXWQYrr",
720 "VPMOVZXBDYrr",
721 "VPMOVZXBQYrr",
722 "VPMOVZXBWYrr",
723 "VPMOVZXDQYrr",
724 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000725 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000726
727def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
728 let Latency = 3;
729 let NumMicroOps = 2;
730 let ResourceCycles = [1,1];
731}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000732def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733
734def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
735 let Latency = 3;
736 let NumMicroOps = 2;
737 let ResourceCycles = [1,1];
738}
739def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
740
741def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
742 let Latency = 3;
743 let NumMicroOps = 3;
744 let ResourceCycles = [3];
745}
Craig Topperfc179c62018-03-22 04:23:41 +0000746def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
747 "ROR(8|16|32|64)rCL",
748 "SAR(8|16|32|64)rCL",
749 "SHL(8|16|32|64)rCL",
750 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000751
752def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000753 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000754 let NumMicroOps = 3;
755 let ResourceCycles = [3];
756}
Craig Topperb5f26592018-04-19 18:00:17 +0000757def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
758 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
759 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000760
761def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
762 let Latency = 3;
763 let NumMicroOps = 3;
764 let ResourceCycles = [1,2];
765}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000766def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000767
768def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
769 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000770 let NumMicroOps = 3;
771 let ResourceCycles = [2,1];
772}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000773def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
774 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000775
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000776def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
777 let Latency = 3;
778 let NumMicroOps = 3;
779 let ResourceCycles = [2,1];
780}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000781def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000782
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000783def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
784 let Latency = 3;
785 let NumMicroOps = 3;
786 let ResourceCycles = [2,1];
787}
Craig Topperfc179c62018-03-22 04:23:41 +0000788def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
789 "MMX_PACKSSWBirr",
790 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791
792def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
793 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000794 let NumMicroOps = 3;
795 let ResourceCycles = [1,2];
796}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000798
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
800 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000801 let NumMicroOps = 3;
802 let ResourceCycles = [1,2];
803}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000804def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000805
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000806def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
807 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000808 let NumMicroOps = 3;
809 let ResourceCycles = [1,2];
810}
Craig Topperfc179c62018-03-22 04:23:41 +0000811def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
812 "RCL(8|16|32|64)ri",
813 "RCR(8|16|32|64)r1",
814 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000815
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000816def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
817 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000818 let NumMicroOps = 3;
819 let ResourceCycles = [1,1,1];
820}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000821def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000822
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
824 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000825 let NumMicroOps = 4;
826 let ResourceCycles = [1,1,2];
827}
Craig Topperf4cd9082018-01-19 05:47:32 +0000828def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000829
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
831 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000832 let NumMicroOps = 4;
833 let ResourceCycles = [1,1,1,1];
834}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000835def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000836
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000837def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
838 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000839 let NumMicroOps = 4;
840 let ResourceCycles = [1,1,1,1];
841}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000842def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000843
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000844def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000845 let Latency = 4;
846 let NumMicroOps = 1;
847 let ResourceCycles = [1];
848}
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000849def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FPrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000850 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000851 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let Latency = 4;
855 let NumMicroOps = 1;
856 let ResourceCycles = [1];
857}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000858def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000859 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000860 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000862def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863 let Latency = 4;
864 let NumMicroOps = 2;
865 let ResourceCycles = [1,1];
866}
Craig Topperf846e2d2018-04-19 05:34:05 +0000867def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
870 let Latency = 4;
871 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000872 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873}
Craig Topperfc179c62018-03-22 04:23:41 +0000874def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877 let Latency = 4;
878 let NumMicroOps = 3;
879 let ResourceCycles = [1,1,1];
880}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000881def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
882 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let Latency = 4;
886 let NumMicroOps = 4;
887 let ResourceCycles = [4];
888}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000889def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000892 let Latency = 4;
893 let NumMicroOps = 4;
894 let ResourceCycles = [1,3];
895}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000896def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000898def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899 let Latency = 4;
900 let NumMicroOps = 4;
901 let ResourceCycles = [1,3];
902}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000903def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000904
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000905def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000906 let Latency = 4;
907 let NumMicroOps = 4;
908 let ResourceCycles = [1,1,2];
909}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000910def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000912def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
913 let Latency = 5;
914 let NumMicroOps = 1;
915 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000916}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000917def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +0000918 "MOVSX(16|32|64)rm32",
919 "MOVSX(16|32|64)rm8",
920 "MOVZX(16|32|64)rm16",
921 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000922 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000923
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000924def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000925 let Latency = 5;
926 let NumMicroOps = 2;
927 let ResourceCycles = [1,1];
928}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000929def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
930 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000931
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000932def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933 let Latency = 5;
934 let NumMicroOps = 2;
935 let ResourceCycles = [1,1];
936}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000937def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000938 "MMX_CVTPS2PIirr",
939 "MMX_CVTTPD2PIirr",
940 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000941 "(V?)CVTPD2DQrr",
942 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000943 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000944 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000945 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000946 "(V?)CVTSD2SSrr",
947 "(V?)CVTSI642SDrr",
948 "(V?)CVTSI2SDrr",
949 "(V?)CVTSI2SSrr",
950 "(V?)CVTSS2SDrr",
951 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000954 let Latency = 5;
955 let NumMicroOps = 3;
956 let ResourceCycles = [1,1,1];
957}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000960def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000961 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000962 let NumMicroOps = 3;
963 let ResourceCycles = [1,1,1];
964}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000965def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000966
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000967def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000968 let Latency = 5;
969 let NumMicroOps = 5;
970 let ResourceCycles = [1,4];
971}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975 let Latency = 5;
976 let NumMicroOps = 5;
977 let ResourceCycles = [2,3];
978}
Craig Topper13a16502018-03-19 00:56:09 +0000979def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000981def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000982 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000983 let NumMicroOps = 6;
984 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985}
Craig Topperfc179c62018-03-22 04:23:41 +0000986def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
987 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
990 let Latency = 6;
991 let NumMicroOps = 1;
992 let ResourceCycles = [1];
993}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000994def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000995 "(V?)MOVSHDUPrm",
996 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +0000997 "VPBROADCASTDrm",
998 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999
1000def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001 let Latency = 6;
1002 let NumMicroOps = 2;
1003 let ResourceCycles = [2];
1004}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 6;
1009 let NumMicroOps = 2;
1010 let ResourceCycles = [1,1];
1011}
Craig Topperfc179c62018-03-22 04:23:41 +00001012def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1013 "MMX_PADDSWirm",
1014 "MMX_PADDUSBirm",
1015 "MMX_PADDUSWirm",
1016 "MMX_PAVGBirm",
1017 "MMX_PAVGWirm",
1018 "MMX_PCMPEQBirm",
1019 "MMX_PCMPEQDirm",
1020 "MMX_PCMPEQWirm",
1021 "MMX_PCMPGTBirm",
1022 "MMX_PCMPGTDirm",
1023 "MMX_PCMPGTWirm",
1024 "MMX_PMAXSWirm",
1025 "MMX_PMAXUBirm",
1026 "MMX_PMINSWirm",
1027 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001028 "MMX_PSUBSBirm",
1029 "MMX_PSUBSWirm",
1030 "MMX_PSUBUSBirm",
1031 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001032
Craig Topper58afb4e2018-03-22 21:10:07 +00001033def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let Latency = 6;
1035 let NumMicroOps = 2;
1036 let ResourceCycles = [1,1];
1037}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001038def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1039 "(V?)CVTSD2SIrr",
1040 "(V?)CVTSS2SI64rr",
1041 "(V?)CVTSS2SIrr",
1042 "(V?)CVTTSD2SI64rr",
1043 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1046 let Latency = 6;
1047 let NumMicroOps = 2;
1048 let ResourceCycles = [1,1];
1049}
Craig Topperfc179c62018-03-22 04:23:41 +00001050def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1051 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052
1053def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1054 let Latency = 6;
1055 let NumMicroOps = 2;
1056 let ResourceCycles = [1,1];
1057}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001058def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1059 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001060 "MMX_PANDNirm",
1061 "MMX_PANDirm",
1062 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001063 "MMX_PSIGN(B|D|W)rm",
1064 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001065 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066
1067def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1068 let Latency = 6;
1069 let NumMicroOps = 2;
1070 let ResourceCycles = [1,1];
1071}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001072def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001073def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1074 ADCX32rm, ADCX64rm,
1075 ADOX32rm, ADOX64rm,
1076 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001077
1078def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1079 let Latency = 6;
1080 let NumMicroOps = 2;
1081 let ResourceCycles = [1,1];
1082}
Craig Topperfc179c62018-03-22 04:23:41 +00001083def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1084 "BLSI(32|64)rm",
1085 "BLSMSK(32|64)rm",
1086 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001087 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088
1089def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1090 let Latency = 6;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Craig Topper2d451e72018-03-18 08:38:06 +00001094def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001095def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001096
Craig Topper58afb4e2018-03-22 21:10:07 +00001097def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001098 let Latency = 6;
1099 let NumMicroOps = 3;
1100 let ResourceCycles = [2,1];
1101}
Craig Topperfc179c62018-03-22 04:23:41 +00001102def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001103
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001104def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001105 let Latency = 6;
1106 let NumMicroOps = 4;
1107 let ResourceCycles = [1,2,1];
1108}
Craig Topperfc179c62018-03-22 04:23:41 +00001109def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1110 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001111
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001112def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001113 let Latency = 6;
1114 let NumMicroOps = 4;
1115 let ResourceCycles = [1,1,1,1];
1116}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001117def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001118
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001119def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1120 let Latency = 6;
1121 let NumMicroOps = 4;
1122 let ResourceCycles = [1,1,1,1];
1123}
Craig Topperfc179c62018-03-22 04:23:41 +00001124def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1125 "BTR(16|32|64)mi8",
1126 "BTS(16|32|64)mi8",
1127 "SAR(8|16|32|64)m1",
1128 "SAR(8|16|32|64)mi",
1129 "SHL(8|16|32|64)m1",
1130 "SHL(8|16|32|64)mi",
1131 "SHR(8|16|32|64)m1",
1132 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001133
1134def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1135 let Latency = 6;
1136 let NumMicroOps = 4;
1137 let ResourceCycles = [1,1,1,1];
1138}
Craig Topperf0d04262018-04-06 16:16:48 +00001139def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1140 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001141
1142def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001143 let Latency = 6;
1144 let NumMicroOps = 6;
1145 let ResourceCycles = [1,5];
1146}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1150 let Latency = 7;
1151 let NumMicroOps = 1;
1152 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001153}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001154def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001155 "VBROADCASTF128",
1156 "VBROADCASTI128",
1157 "VBROADCASTSDYrm",
1158 "VBROADCASTSSYrm",
1159 "VLDDQUYrm",
1160 "VMOVAPDYrm",
1161 "VMOVAPSYrm",
1162 "VMOVDDUPYrm",
1163 "VMOVDQAYrm",
1164 "VMOVDQUYrm",
1165 "VMOVNTDQAYrm",
1166 "VMOVSHDUPYrm",
1167 "VMOVSLDUPYrm",
1168 "VMOVUPDYrm",
1169 "VMOVUPSYrm",
1170 "VPBROADCASTDYrm",
1171 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001172
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001173def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001174 let Latency = 7;
1175 let NumMicroOps = 2;
1176 let ResourceCycles = [1,1];
1177}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001178def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001179
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001180def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1181 let Latency = 7;
1182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Simon Pilgrim819f2182018-05-02 17:58:50 +00001185def: InstRW<[SKLWriteResGroup88], (instregex "(V?)PACKSSDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001186 "(V?)PACKSSWBrm",
1187 "(V?)PACKUSDWrm",
1188 "(V?)PACKUSWBrm",
1189 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001190 "VPBROADCASTBrm",
1191 "VPBROADCASTWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001192 "(V?)PSHUFDmi",
1193 "(V?)PSHUFHWmi",
1194 "(V?)PSHUFLWmi",
1195 "(V?)PUNPCKHBWrm",
1196 "(V?)PUNPCKHDQrm",
1197 "(V?)PUNPCKHQDQrm",
1198 "(V?)PUNPCKHWDrm",
1199 "(V?)PUNPCKLBWrm",
1200 "(V?)PUNPCKLDQrm",
1201 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001202 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001203
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001204def SKLWriteResGroup88a : SchedWriteRes<[SKLPort5,SKLPort23]> {
1205 let Latency = 6;
1206 let NumMicroOps = 2;
1207 let ResourceCycles = [1,1];
1208}
1209def: InstRW<[SKLWriteResGroup88a], (instregex "MMX_PSHUFBrm")>;
1210
Craig Topper58afb4e2018-03-22 21:10:07 +00001211def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001212 let Latency = 7;
1213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
Craig Topperfc179c62018-03-22 04:23:41 +00001216def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1217 "VCVTPD2PSYrr",
1218 "VCVTPH2PSYrr",
1219 "VCVTPS2PDYrr",
1220 "VCVTPS2PHYrr",
1221 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001222
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001223def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1224 let Latency = 7;
1225 let NumMicroOps = 2;
1226 let ResourceCycles = [1,1];
1227}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001228def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001229 "(V?)INSERTI128rm",
1230 "(V?)MASKMOVPDrm",
1231 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001232 "(V?)PADDBrm",
1233 "(V?)PADDDrm",
1234 "(V?)PADDQrm",
1235 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001236 "(V?)PBLENDDrmi",
1237 "(V?)PMASKMOVDrm",
1238 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001239 "(V?)PSUBBrm",
1240 "(V?)PSUBDrm",
1241 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001242 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001243
1244def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1245 let Latency = 7;
1246 let NumMicroOps = 3;
1247 let ResourceCycles = [2,1];
1248}
Craig Topperfc179c62018-03-22 04:23:41 +00001249def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1250 "MMX_PACKSSWBirm",
1251 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252
1253def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1254 let Latency = 7;
1255 let NumMicroOps = 3;
1256 let ResourceCycles = [1,2];
1257}
Craig Topperf4cd9082018-01-19 05:47:32 +00001258def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259
1260def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1261 let Latency = 7;
1262 let NumMicroOps = 3;
1263 let ResourceCycles = [1,2];
1264}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001265def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1266 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001267
Craig Topper58afb4e2018-03-22 21:10:07 +00001268def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001269 let Latency = 7;
1270 let NumMicroOps = 3;
1271 let ResourceCycles = [1,1,1];
1272}
Craig Topperfc179c62018-03-22 04:23:41 +00001273def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1274 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277 let Latency = 7;
1278 let NumMicroOps = 3;
1279 let ResourceCycles = [1,1,1];
1280}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001283def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001284 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001285 let NumMicroOps = 3;
1286 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001287}
Craig Topperfc179c62018-03-22 04:23:41 +00001288def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1289 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001290
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001291def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1292 let Latency = 7;
1293 let NumMicroOps = 5;
1294 let ResourceCycles = [1,1,1,2];
1295}
Craig Topperfc179c62018-03-22 04:23:41 +00001296def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1297 "ROL(8|16|32|64)mi",
1298 "ROR(8|16|32|64)m1",
1299 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300
1301def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1302 let Latency = 7;
1303 let NumMicroOps = 5;
1304 let ResourceCycles = [1,1,1,2];
1305}
Craig Topper13a16502018-03-19 00:56:09 +00001306def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001307
1308def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1309 let Latency = 7;
1310 let NumMicroOps = 5;
1311 let ResourceCycles = [1,1,1,1,1];
1312}
Craig Topperfc179c62018-03-22 04:23:41 +00001313def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1314 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001315
1316def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001317 let Latency = 7;
1318 let NumMicroOps = 7;
1319 let ResourceCycles = [1,3,1,2];
1320}
Craig Topper2d451e72018-03-18 08:38:06 +00001321def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001322
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001324 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001325 let NumMicroOps = 2;
1326 let ResourceCycles = [1,1];
1327}
Craig Topperfc179c62018-03-22 04:23:41 +00001328def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1329 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001330
1331def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1332 let Latency = 8;
1333 let NumMicroOps = 2;
1334 let ResourceCycles = [1,1];
1335}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001336def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1337 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001338
1339def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001340 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001341 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001342 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001343}
Craig Topperf846e2d2018-04-19 05:34:05 +00001344def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001345
Craig Topperf846e2d2018-04-19 05:34:05 +00001346def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1347 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001348 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001349 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001350}
Craig Topperfc179c62018-03-22 04:23:41 +00001351def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001352
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001353def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1354 let Latency = 8;
1355 let NumMicroOps = 2;
1356 let ResourceCycles = [1,1];
1357}
Craig Topperfc179c62018-03-22 04:23:41 +00001358def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1359 "FCOM64m",
1360 "FCOMP32m",
1361 "FCOMP64m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001362 "MMX_PSADBWirm", // TODO - SKLWriteResGroup120??
Craig Topperfc179c62018-03-22 04:23:41 +00001363 "VPBROADCASTBYrm",
1364 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001365 "VPMOVSXBDYrm",
1366 "VPMOVSXBQYrm",
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001367 "VPMOVSXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001368
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001369def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1370 let Latency = 8;
1371 let NumMicroOps = 2;
1372 let ResourceCycles = [1,1];
1373}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001374def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001375 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001376 "VPADDBYrm",
1377 "VPADDDYrm",
1378 "VPADDQYrm",
1379 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001380 "VPBLENDDYrmi",
1381 "VPMASKMOVDYrm",
1382 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001383 "VPSUBBYrm",
1384 "VPSUBDYrm",
1385 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001386 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001387
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001388def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1389 let Latency = 8;
1390 let NumMicroOps = 4;
1391 let ResourceCycles = [1,2,1];
1392}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001393def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001394
1395def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1396 let Latency = 8;
1397 let NumMicroOps = 4;
1398 let ResourceCycles = [2,1,1];
1399}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001400def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001401
Craig Topper58afb4e2018-03-22 21:10:07 +00001402def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403 let Latency = 8;
1404 let NumMicroOps = 4;
1405 let ResourceCycles = [1,1,1,1];
1406}
1407def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1408
1409def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1410 let Latency = 8;
1411 let NumMicroOps = 5;
1412 let ResourceCycles = [1,1,3];
1413}
Craig Topper13a16502018-03-19 00:56:09 +00001414def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415
1416def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1417 let Latency = 8;
1418 let NumMicroOps = 5;
1419 let ResourceCycles = [1,1,1,2];
1420}
Craig Topperfc179c62018-03-22 04:23:41 +00001421def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1422 "RCL(8|16|32|64)mi",
1423 "RCR(8|16|32|64)m1",
1424 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001425
1426def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1427 let Latency = 8;
1428 let NumMicroOps = 6;
1429 let ResourceCycles = [1,1,1,3];
1430}
Craig Topperfc179c62018-03-22 04:23:41 +00001431def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1432 "SAR(8|16|32|64)mCL",
1433 "SHL(8|16|32|64)mCL",
1434 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001435
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001436def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1437 let Latency = 8;
1438 let NumMicroOps = 6;
1439 let ResourceCycles = [1,1,1,2,1];
1440}
Craig Topper9f834812018-04-01 21:54:24 +00001441def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001442 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001443 "SBB(8|16|32|64)mi")>;
1444def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1445 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001446
1447def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1448 let Latency = 9;
1449 let NumMicroOps = 2;
1450 let ResourceCycles = [1,1];
1451}
Craig Topperfc179c62018-03-22 04:23:41 +00001452def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001453 "VTESTPDYrm",
1454 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455
1456def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1457 let Latency = 9;
1458 let NumMicroOps = 2;
1459 let ResourceCycles = [1,1];
1460}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001461def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001462 "VPMOVSXBWYrm",
1463 "VPMOVSXDQYrm",
1464 "VPMOVSXWDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001465 "VPMOVZXWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001466
1467def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1468 let Latency = 9;
1469 let NumMicroOps = 2;
1470 let ResourceCycles = [1,1];
1471}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001472def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1473 "(V?)ADDSSrm",
1474 "(V?)CMPSDrm",
1475 "(V?)CMPSSrm",
1476 "(V?)MAX(C?)SDrm",
1477 "(V?)MAX(C?)SSrm",
1478 "(V?)MIN(C?)SDrm",
1479 "(V?)MIN(C?)SSrm",
1480 "(V?)MULSDrm",
1481 "(V?)MULSSrm",
1482 "(V?)SUBSDrm",
1483 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001484
Craig Topper58afb4e2018-03-22 21:10:07 +00001485def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001486 let Latency = 9;
1487 let NumMicroOps = 2;
1488 let ResourceCycles = [1,1];
1489}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001490def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001491 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001492 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001493 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001494
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1496 let Latency = 9;
1497 let NumMicroOps = 3;
1498 let ResourceCycles = [1,1,1];
1499}
Craig Topperfc179c62018-03-22 04:23:41 +00001500def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001501
1502def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1503 let Latency = 9;
1504 let NumMicroOps = 3;
1505 let ResourceCycles = [1,1,1];
1506}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001507def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001508
1509def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001510 let Latency = 9;
1511 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001512 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001513}
Craig Topperfc179c62018-03-22 04:23:41 +00001514def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1515 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001517def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1518 let Latency = 9;
1519 let NumMicroOps = 4;
1520 let ResourceCycles = [1,1,1,1];
1521}
Craig Topperfc179c62018-03-22 04:23:41 +00001522def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1523 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001524
1525def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1526 let Latency = 9;
1527 let NumMicroOps = 5;
1528 let ResourceCycles = [1,2,1,1];
1529}
Craig Topperfc179c62018-03-22 04:23:41 +00001530def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1531 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001532
1533def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1534 let Latency = 10;
1535 let NumMicroOps = 2;
1536 let ResourceCycles = [1,1];
1537}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001538def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001539 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001540
1541def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1542 let Latency = 10;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001546def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1547 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001548 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001549 "VPMOVZXBDYrm",
1550 "VPMOVZXBQYrm",
1551 "VPMOVZXBWYrm",
1552 "VPMOVZXDQYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001553 "VPMOVZXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001554
1555def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1556 let Latency = 10;
1557 let NumMicroOps = 2;
1558 let ResourceCycles = [1,1];
1559}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001560def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001561 "(V?)CVTPH2PSYrm",
1562 "(V?)CVTPS2DQrm",
1563 "(V?)CVTSS2SDrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001564 "(V?)CVTTPS2DQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001566def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1567 let Latency = 10;
1568 let NumMicroOps = 3;
1569 let ResourceCycles = [1,1,1];
1570}
Craig Topperfc179c62018-03-22 04:23:41 +00001571def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1572 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001573
Craig Topper58afb4e2018-03-22 21:10:07 +00001574def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001575 let Latency = 10;
1576 let NumMicroOps = 3;
1577 let ResourceCycles = [1,1,1];
1578}
Craig Topperfc179c62018-03-22 04:23:41 +00001579def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001580
1581def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001582 let Latency = 10;
1583 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001584 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001585}
Craig Topperfc179c62018-03-22 04:23:41 +00001586def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1587 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001588
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001589def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001590 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001591 let NumMicroOps = 4;
1592 let ResourceCycles = [1,1,1,1];
1593}
Craig Topperf846e2d2018-04-19 05:34:05 +00001594def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595
1596def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1597 let Latency = 10;
1598 let NumMicroOps = 8;
1599 let ResourceCycles = [1,1,1,1,1,3];
1600}
Craig Topper13a16502018-03-19 00:56:09 +00001601def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602
1603def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001604 let Latency = 10;
1605 let NumMicroOps = 10;
1606 let ResourceCycles = [9,1];
1607}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001608def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001609
Craig Topper8104f262018-04-02 05:33:28 +00001610def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001611 let Latency = 11;
1612 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001613 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001614}
Craig Topper8104f262018-04-02 05:33:28 +00001615def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001616 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001617
Craig Topper8104f262018-04-02 05:33:28 +00001618def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1619 let Latency = 11;
1620 let NumMicroOps = 1;
1621 let ResourceCycles = [1,5];
1622}
1623def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1624
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001625def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001626 let Latency = 11;
1627 let NumMicroOps = 2;
1628 let ResourceCycles = [1,1];
1629}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001630def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001631 "VRCPPSYm",
1632 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001633
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001634def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1635 let Latency = 11;
1636 let NumMicroOps = 2;
1637 let ResourceCycles = [1,1];
1638}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001639def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001640 "VCVTPS2DQYrm",
1641 "VCVTPS2PDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001642 "VCVTTPS2DQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001643
1644def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1645 let Latency = 11;
1646 let NumMicroOps = 3;
1647 let ResourceCycles = [2,1];
1648}
Craig Topperfc179c62018-03-22 04:23:41 +00001649def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1650 "FICOM32m",
1651 "FICOMP16m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001652 "FICOMP32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001653
1654def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1655 let Latency = 11;
1656 let NumMicroOps = 3;
1657 let ResourceCycles = [1,1,1];
1658}
Craig Topperfc179c62018-03-22 04:23:41 +00001659def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001660
Craig Topper58afb4e2018-03-22 21:10:07 +00001661def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662 let Latency = 11;
1663 let NumMicroOps = 3;
1664 let ResourceCycles = [1,1,1];
1665}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001666def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1667 "(V?)CVTSD2SIrm",
1668 "(V?)CVTSS2SI64rm",
1669 "(V?)CVTSS2SIrm",
1670 "(V?)CVTTSD2SI64rm",
1671 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001672 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001673 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674
Craig Topper58afb4e2018-03-22 21:10:07 +00001675def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001676 let Latency = 11;
1677 let NumMicroOps = 3;
1678 let ResourceCycles = [1,1,1];
1679}
Craig Topperfc179c62018-03-22 04:23:41 +00001680def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1681 "CVTPD2PSrm",
1682 "CVTTPD2DQrm",
1683 "MMX_CVTPD2PIirm",
1684 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001685
1686def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1687 let Latency = 11;
1688 let NumMicroOps = 6;
1689 let ResourceCycles = [1,1,1,2,1];
1690}
Craig Topperfc179c62018-03-22 04:23:41 +00001691def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1692 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001693
1694def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001695 let Latency = 11;
1696 let NumMicroOps = 7;
1697 let ResourceCycles = [2,3,2];
1698}
Craig Topperfc179c62018-03-22 04:23:41 +00001699def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1700 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001701
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001703 let Latency = 11;
1704 let NumMicroOps = 9;
1705 let ResourceCycles = [1,5,1,2];
1706}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001707def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001708
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001709def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001710 let Latency = 11;
1711 let NumMicroOps = 11;
1712 let ResourceCycles = [2,9];
1713}
Craig Topperfc179c62018-03-22 04:23:41 +00001714def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001715
Craig Topper8104f262018-04-02 05:33:28 +00001716def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001717 let Latency = 12;
1718 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001719 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001720}
Craig Topper8104f262018-04-02 05:33:28 +00001721def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001722 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001723
Craig Topper8104f262018-04-02 05:33:28 +00001724def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1725 let Latency = 12;
1726 let NumMicroOps = 1;
1727 let ResourceCycles = [1,6];
1728}
1729def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1730
Craig Topper58afb4e2018-03-22 21:10:07 +00001731def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732 let Latency = 12;
1733 let NumMicroOps = 4;
1734 let ResourceCycles = [1,1,1,1];
1735}
1736def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1737
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001738def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001739 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740 let NumMicroOps = 3;
1741 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001742}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001743def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001744
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001745def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1746 let Latency = 13;
1747 let NumMicroOps = 3;
1748 let ResourceCycles = [1,1,1];
1749}
1750def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
1751
Craig Topper8104f262018-04-02 05:33:28 +00001752def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001753 let Latency = 14;
1754 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001755 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001756}
Craig Topper8104f262018-04-02 05:33:28 +00001757def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001758 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001759
Craig Topper8104f262018-04-02 05:33:28 +00001760def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1761 let Latency = 14;
1762 let NumMicroOps = 1;
1763 let ResourceCycles = [1,5];
1764}
1765def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
1766
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001767def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1768 let Latency = 14;
1769 let NumMicroOps = 3;
1770 let ResourceCycles = [1,1,1];
1771}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001772def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001773
1774def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001775 let Latency = 14;
1776 let NumMicroOps = 10;
1777 let ResourceCycles = [2,4,1,3];
1778}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001779def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001780
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001781def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001782 let Latency = 15;
1783 let NumMicroOps = 1;
1784 let ResourceCycles = [1];
1785}
Craig Topperfc179c62018-03-22 04:23:41 +00001786def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
1787 "DIVR_FST0r",
1788 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001789
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001790def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1791 let Latency = 15;
1792 let NumMicroOps = 10;
1793 let ResourceCycles = [1,1,1,5,1,1];
1794}
Craig Topper13a16502018-03-19 00:56:09 +00001795def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796
Craig Topper8104f262018-04-02 05:33:28 +00001797def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001798 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001799 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001800 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801}
Craig Topperfc179c62018-03-22 04:23:41 +00001802def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001804def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1805 let Latency = 16;
1806 let NumMicroOps = 14;
1807 let ResourceCycles = [1,1,1,4,2,5];
1808}
1809def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
1810
1811def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001812 let Latency = 16;
1813 let NumMicroOps = 16;
1814 let ResourceCycles = [16];
1815}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001816def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001817
Craig Topper8104f262018-04-02 05:33:28 +00001818def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819 let Latency = 17;
1820 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001821 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001822}
Craig Topper8104f262018-04-02 05:33:28 +00001823def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
1824
1825def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1826 let Latency = 17;
1827 let NumMicroOps = 2;
1828 let ResourceCycles = [1,1,3];
1829}
1830def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001831
1832def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001833 let Latency = 17;
1834 let NumMicroOps = 15;
1835 let ResourceCycles = [2,1,2,4,2,4];
1836}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001837def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001838
Craig Topper8104f262018-04-02 05:33:28 +00001839def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001840 let Latency = 18;
1841 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001842 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001843}
Craig Topper8104f262018-04-02 05:33:28 +00001844def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001845 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001846
Craig Topper8104f262018-04-02 05:33:28 +00001847def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1848 let Latency = 18;
1849 let NumMicroOps = 1;
1850 let ResourceCycles = [1,12];
1851}
1852def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
1853
1854def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001855 let Latency = 18;
1856 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001857 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001858}
Craig Topper8104f262018-04-02 05:33:28 +00001859def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
1860
1861def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1862 let Latency = 18;
1863 let NumMicroOps = 2;
1864 let ResourceCycles = [1,1,3];
1865}
1866def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001867
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869 let Latency = 18;
1870 let NumMicroOps = 8;
1871 let ResourceCycles = [1,1,1,5];
1872}
Craig Topperfc179c62018-03-22 04:23:41 +00001873def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001874
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001875def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001876 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001877 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001878 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001879}
Craig Topper13a16502018-03-19 00:56:09 +00001880def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001881
Craig Topper8104f262018-04-02 05:33:28 +00001882def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001883 let Latency = 19;
1884 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001885 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001886}
Craig Topper8104f262018-04-02 05:33:28 +00001887def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
1888
1889def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1890 let Latency = 19;
1891 let NumMicroOps = 2;
1892 let ResourceCycles = [1,1,6];
1893}
1894def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001897 let Latency = 20;
1898 let NumMicroOps = 1;
1899 let ResourceCycles = [1];
1900}
Craig Topperfc179c62018-03-22 04:23:41 +00001901def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
1902 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001903 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001904
Craig Topper8104f262018-04-02 05:33:28 +00001905def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906 let Latency = 20;
1907 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001908 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001909}
Craig Topperfc179c62018-03-22 04:23:41 +00001910def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001911
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1913 let Latency = 20;
1914 let NumMicroOps = 8;
1915 let ResourceCycles = [1,1,1,1,1,1,2];
1916}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001917def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001918
1919def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001920 let Latency = 20;
1921 let NumMicroOps = 10;
1922 let ResourceCycles = [1,2,7];
1923}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001924def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001925
Craig Topper8104f262018-04-02 05:33:28 +00001926def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001927 let Latency = 21;
1928 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001929 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930}
1931def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
1932
1933def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1934 let Latency = 22;
1935 let NumMicroOps = 2;
1936 let ResourceCycles = [1,1];
1937}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001938def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939
1940def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
1941 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001942 let NumMicroOps = 5;
1943 let ResourceCycles = [1,2,1,1];
1944}
Craig Topper17a31182017-12-16 18:35:29 +00001945def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
1946 VGATHERDPDrm,
1947 VGATHERQPDrm,
1948 VGATHERQPSrm,
1949 VPGATHERDDrm,
1950 VPGATHERDQrm,
1951 VPGATHERQDrm,
1952 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001953
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001954def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
1955 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001956 let NumMicroOps = 5;
1957 let ResourceCycles = [1,2,1,1];
1958}
Craig Topper17a31182017-12-16 18:35:29 +00001959def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
1960 VGATHERQPDYrm,
1961 VGATHERQPSYrm,
1962 VPGATHERDDYrm,
1963 VPGATHERDQYrm,
1964 VPGATHERQDYrm,
1965 VPGATHERQQYrm,
1966 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001967
Craig Topper8104f262018-04-02 05:33:28 +00001968def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001970 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001971 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001972}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001973def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001974
1975def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1976 let Latency = 23;
1977 let NumMicroOps = 19;
1978 let ResourceCycles = [2,1,4,1,1,4,6];
1979}
1980def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
1981
Craig Topper8104f262018-04-02 05:33:28 +00001982def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983 let Latency = 24;
1984 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001985 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001986}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001987def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001988
Craig Topper8104f262018-04-02 05:33:28 +00001989def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001990 let Latency = 25;
1991 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001992 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001994def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001995
1996def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1997 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001998 let NumMicroOps = 3;
1999 let ResourceCycles = [1,1,1];
2000}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002001def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002003def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2004 let Latency = 27;
2005 let NumMicroOps = 2;
2006 let ResourceCycles = [1,1];
2007}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002008def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002009
2010def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2011 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002012 let NumMicroOps = 8;
2013 let ResourceCycles = [2,4,1,1];
2014}
Craig Topper13a16502018-03-19 00:56:09 +00002015def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002016
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002018 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002019 let NumMicroOps = 3;
2020 let ResourceCycles = [1,1,1];
2021}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002022def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002023
2024def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2025 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002026 let NumMicroOps = 23;
2027 let ResourceCycles = [1,5,3,4,10];
2028}
Craig Topperfc179c62018-03-22 04:23:41 +00002029def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2030 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002031
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002032def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2033 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034 let NumMicroOps = 23;
2035 let ResourceCycles = [1,5,2,1,4,10];
2036}
Craig Topperfc179c62018-03-22 04:23:41 +00002037def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2038 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002039
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002040def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2041 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002042 let NumMicroOps = 31;
2043 let ResourceCycles = [1,8,1,21];
2044}
Craig Topper391c6f92017-12-10 01:24:08 +00002045def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002046
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002047def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2048 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002049 let NumMicroOps = 18;
2050 let ResourceCycles = [1,1,2,3,1,1,1,8];
2051}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002053
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2055 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002056 let NumMicroOps = 39;
2057 let ResourceCycles = [1,10,1,1,26];
2058}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002060
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062 let Latency = 42;
2063 let NumMicroOps = 22;
2064 let ResourceCycles = [2,20];
2065}
Craig Topper2d451e72018-03-18 08:38:06 +00002066def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002068def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2069 let Latency = 42;
2070 let NumMicroOps = 40;
2071 let ResourceCycles = [1,11,1,1,26];
2072}
Craig Topper391c6f92017-12-10 01:24:08 +00002073def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002074
2075def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2076 let Latency = 46;
2077 let NumMicroOps = 44;
2078 let ResourceCycles = [1,11,1,1,30];
2079}
2080def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2081
2082def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2083 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002084 let NumMicroOps = 64;
2085 let ResourceCycles = [2,8,5,10,39];
2086}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002087def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002088
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2090 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002091 let NumMicroOps = 88;
2092 let ResourceCycles = [4,4,31,1,2,1,45];
2093}
Craig Topper2d451e72018-03-18 08:38:06 +00002094def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002095
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2097 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002098 let NumMicroOps = 90;
2099 let ResourceCycles = [4,2,33,1,2,1,47];
2100}
Craig Topper2d451e72018-03-18 08:38:06 +00002101def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002102
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002103def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002104 let Latency = 75;
2105 let NumMicroOps = 15;
2106 let ResourceCycles = [6,3,6];
2107}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002108def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111 let Latency = 76;
2112 let NumMicroOps = 32;
2113 let ResourceCycles = [7,2,8,3,1,11];
2114}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118 let Latency = 102;
2119 let NumMicroOps = 66;
2120 let ResourceCycles = [4,2,4,8,14,34];
2121}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002122def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002123
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002124def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2125 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002126 let NumMicroOps = 100;
2127 let ResourceCycles = [9,1,11,16,1,11,21,30];
2128}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130
2131} // SchedModel