blob: 8cb6b14239da61b6e0fdfe9cdea192224239b196 [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]>;
Simon Pilgrim0e51a122018-05-04 18:16:13 +0000153defm : X86WriteRes<WriteEMMS, [SKLPort05,SKLPort0156], 10, [9,1], 10>;
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000154
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000155defm : SKLWriteResPair<WriteFAdd, [SKLPort01], 4, [1], 1, 6>; // Floating point add/sub.
156defm : SKLWriteResPair<WriteFAddY, [SKLPort01], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000157defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
158defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM).
159defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim86d9f232018-05-02 14:25:32 +0000160defm : SKLWriteResPair<WriteFMul, [SKLPort01], 4, [1], 1, 6>; // Floating point multiplication.
161defm : SKLWriteResPair<WriteFMulY, [SKLPort01], 4, [1], 1, 7>; // Floating point multiplication (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000162defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division.
163defm : SKLWriteResPair<WriteFDivY, [SKLPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM).
Simon Pilgrimc7088682018-05-01 18:06:07 +0000164defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root.
165defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM).
166defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
167defm : SKLWriteResPair<WriteFRcpY, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate (YMM/ZMM).
168defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate.
169defm : SKLWriteResPair<WriteFRsqrtY,[SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate (YMM/ZMM).
Simon Pilgrim67cc2462018-05-04 15:20:18 +0000170defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add.
171defm : SKLWriteResPair<WriteFMAX, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add (XMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000172defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrim542b20d2018-05-03 22:31:19 +0000173defm : SKLWriteResPair<WriteDPPD, [SKLPort5,SKLPort01], 9, [1,2], 3, 6>; // Floating point double dot product.
174defm : SKLWriteResPair<WriteDPPS, [SKLPort5,SKLPort01], 13, [1,3], 4, 6>; // Floating point single dot product.
175defm : SKLWriteResPair<WriteDPPSY, [SKLPort5,SKLPort01], 13, [1,3], 4, 7>; // Floating point single dot product (YMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000176defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimbe51b202018-05-04 12:59:24 +0000177defm : SKLWriteResPair<WriteFRnd, [SKLPort01], 8, [2], 2, 6>; // Floating point rounding.
178defm : SKLWriteResPair<WriteFRndY, [SKLPort01], 8, [2], 2, 7>; // Floating point rounding (YMM/ZMM).
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000179defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
180defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000181defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000182defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000183defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
184defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000185defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000186defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000187defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000188defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000190def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
191 let Latency = 6;
192 let NumMicroOps = 4;
193 let ResourceCycles = [1,1,1,1];
194}
195
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000196// FMA Scheduling helper class.
197// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
198
199// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000200def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
201def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
202def : WriteRes<WriteVecMove, [SKLPort015]>;
203
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000204defm : SKLWriteResPair<WriteVecALU, [SKLPort01], 1, [1], 1, 6>; // Vector integer ALU op, no logicals.
205defm : SKLWriteResPair<WriteVecALUY, [SKLPort01], 1, [1], 1, 7>; // Vector integer ALU op, no logicals (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000206defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000207defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000208defm : SKLWriteResPair<WriteVecIMul, [SKLPort0] , 4, [1], 1, 5>; // Vector integer multiply.
209defm : SKLWriteResPair<WriteVecIMulX, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply (XMM).
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000210defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM).
211defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD.
212defm : SKLWriteResPair<WritePMULLDY, [SKLPort01], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000213defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000214defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
215defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Vector shuffles.
216defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
Simon Pilgrim06e16542018-04-22 18:35:53 +0000217defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000218defm : SKLWriteResPair<WriteBlendY, [SKLPort5], 1, [1], 1, 7>; // Vector blends (YMM/ZMM).
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000219defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000220defm : SKLWriteResPair<WriteVarBlendY, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends (YMM/ZMM).
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000221defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000222defm : SKLWriteResPair<WriteMPSADY, [SKLPort5], 4, [2], 2, 7>; // Vector MPSAD.
223defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3, [1], 1, 6>; // Vector PSADBW.
224defm : SKLWriteResPair<WritePSADBWY, [SKLPort5], 3, [1], 1, 7>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000225defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000226
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000227// Vector integer shifts.
228defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1, [1], 1, 5>;
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000229defm : X86WriteRes<WriteVecShiftX, [SKLPort5,SKLPort01], 2, [1,1], 2>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000230defm : X86WriteRes<WriteVecShiftY, [SKLPort5,SKLPort01], 4, [1,1], 2>;
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000231defm : X86WriteRes<WriteVecShiftXLd, [SKLPort01,SKLPort23], 7, [1,1], 2>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000232defm : X86WriteRes<WriteVecShiftYLd, [SKLPort01,SKLPort23], 8, [1,1], 2>;
233
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000234defm : SKLWriteResPair<WriteVecShiftImm, [SKLPort0], 1, [1], 1, 5>;
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000235defm : SKLWriteResPair<WriteVecShiftImmX, [SKLPort01], 1, [1], 1, 6>; // Vector integer immediate shifts (XMM).
236defm : SKLWriteResPair<WriteVecShiftImmY, [SKLPort01], 1, [1], 1, 7>; // Vector integer immediate shifts (YMM/ZMM).
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000237defm : SKLWriteResPair<WriteVarVecShift, [SKLPort01], 1, [1], 1, 6>; // Variable vector shifts.
238defm : SKLWriteResPair<WriteVarVecShiftY, [SKLPort01], 1, [1], 1, 7>; // Variable vector shifts (YMM/ZMM).
Simon Pilgrimf2d2ced2018-05-03 17:56:43 +0000239
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000240// Vector insert/extract operations.
241def : WriteRes<WriteVecInsert, [SKLPort5]> {
242 let Latency = 2;
243 let NumMicroOps = 2;
244 let ResourceCycles = [2];
245}
246def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
247 let Latency = 6;
248 let NumMicroOps = 2;
249}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000250def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000251
252def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
253 let Latency = 3;
254 let NumMicroOps = 2;
255}
256def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
257 let Latency = 2;
258 let NumMicroOps = 3;
259}
260
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000261// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000262defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
263defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
264defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265
266// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000267
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000269def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
270 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000271 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000272 let ResourceCycles = [3];
273}
274def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000275 let Latency = 16;
276 let NumMicroOps = 4;
277 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000278}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000279
280// Packed Compare Explicit Length Strings, Return Mask
281def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
282 let Latency = 19;
283 let NumMicroOps = 9;
284 let ResourceCycles = [4,3,1,1];
285}
286def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
287 let Latency = 25;
288 let NumMicroOps = 10;
289 let ResourceCycles = [4,3,1,1,1];
290}
291
292// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000294 let Latency = 10;
295 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000296 let ResourceCycles = [3];
297}
298def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000299 let Latency = 16;
300 let NumMicroOps = 4;
301 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000302}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000303
304// Packed Compare Explicit Length Strings, Return Index
305def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
306 let Latency = 18;
307 let NumMicroOps = 8;
308 let ResourceCycles = [4,3,1];
309}
310def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
311 let Latency = 24;
312 let NumMicroOps = 9;
313 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000314}
315
Simon Pilgrima2f26782018-03-27 20:38:54 +0000316// MOVMSK Instructions.
Simon Pilgrimbf4c8c02018-05-04 14:54:33 +0000317def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
318def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
319def : WriteRes<WriteVecMOVMSKY, [SKLPort0]> { let Latency = 2; }
320def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
Simon Pilgrima2f26782018-03-27 20:38:54 +0000321
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000323def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
324 let Latency = 4;
325 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000326 let ResourceCycles = [1];
327}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000328def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
329 let Latency = 10;
330 let NumMicroOps = 2;
331 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000332}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000333
334def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
335 let Latency = 8;
336 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000337 let ResourceCycles = [2];
338}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000339def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000340 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000341 let NumMicroOps = 3;
342 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000343}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000344
345def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
346 let Latency = 20;
347 let NumMicroOps = 11;
348 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000350def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
351 let Latency = 25;
352 let NumMicroOps = 11;
353 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000354}
355
356// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000357def : WriteRes<WriteCLMul, [SKLPort5]> {
358 let Latency = 6;
359 let NumMicroOps = 1;
360 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000361}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000362def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
363 let Latency = 12;
364 let NumMicroOps = 2;
365 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000366}
367
368// Catch-all for expensive system instructions.
369def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
370
371// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000372defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
373defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
374defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
375defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000376
377// Old microcoded instructions that nobody use.
378def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
379
380// Fence instructions.
381def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
382
Craig Topper05242bf2018-04-21 18:07:36 +0000383// Load/store MXCSR.
384def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
385def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
386
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000387// Nop, not very useful expect it provides a model for nops!
388def : WriteRes<WriteNop, []>;
389
390////////////////////////////////////////////////////////////////////////////////
391// Horizontal add/sub instructions.
392////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000393
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000394defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
395defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrimf7dd6062018-05-03 13:27:10 +0000396defm : SKLWriteResPair<WritePHAdd, [SKLPort5,SKLPort015], 3, [2,1], 3, 6>;
397defm : SKLWriteResPair<WritePHAddY, [SKLPort5,SKLPort015], 3, [2,1], 3, 7>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000398
399// Remaining instrs.
400
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000401def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000402 let Latency = 1;
403 let NumMicroOps = 1;
404 let ResourceCycles = [1];
405}
Craig Topperfc179c62018-03-22 04:23:41 +0000406def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
407 "MMX_PADDSWirr",
408 "MMX_PADDUSBirr",
409 "MMX_PADDUSWirr",
410 "MMX_PAVGBirr",
411 "MMX_PAVGWirr",
412 "MMX_PCMPEQBirr",
413 "MMX_PCMPEQDirr",
414 "MMX_PCMPEQWirr",
415 "MMX_PCMPGTBirr",
416 "MMX_PCMPGTDirr",
417 "MMX_PCMPGTWirr",
418 "MMX_PMAXSWirr",
419 "MMX_PMAXUBirr",
420 "MMX_PMINSWirr",
421 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000422 "MMX_PSUBSBirr",
423 "MMX_PSUBSWirr",
424 "MMX_PSUBUSBirr",
425 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000426
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000427def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000428 let Latency = 1;
429 let NumMicroOps = 1;
430 let ResourceCycles = [1];
431}
Craig Topperfc179c62018-03-22 04:23:41 +0000432def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
433 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000434 "MMX_MOVD64rr",
435 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000436 "UCOM_FPr",
437 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000438 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000439 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000440
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000441def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000442 let Latency = 1;
443 let NumMicroOps = 1;
444 let ResourceCycles = [1];
445}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000446def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000447
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000448def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000449 let Latency = 1;
450 let NumMicroOps = 1;
451 let ResourceCycles = [1];
452}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000453def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
454def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000455 "MMX_PABS(B|D|W)rr",
456 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000457 "MMX_PANDNirr",
458 "MMX_PANDirr",
459 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000460 "MMX_PSIGN(B|D|W)rr",
461 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000462 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000463
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000464def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000465 let Latency = 1;
466 let NumMicroOps = 1;
467 let ResourceCycles = [1];
468}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000469def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000470def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
471 "ADC(16|32|64)i",
472 "ADC(8|16|32|64)rr",
473 "ADCX(32|64)rr",
474 "ADOX(32|64)rr",
475 "BT(16|32|64)ri8",
476 "BT(16|32|64)rr",
477 "BTC(16|32|64)ri8",
478 "BTC(16|32|64)rr",
479 "BTR(16|32|64)ri8",
480 "BTR(16|32|64)rr",
481 "BTS(16|32|64)ri8",
482 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000483 "SBB(16|32|64)ri",
484 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000485 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000486
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000487def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
488 let Latency = 1;
489 let NumMicroOps = 1;
490 let ResourceCycles = [1];
491}
Craig Topperfc179c62018-03-22 04:23:41 +0000492def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
493 "BLSI(32|64)rr",
494 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000495 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000496
497def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
498 let Latency = 1;
499 let NumMicroOps = 1;
500 let ResourceCycles = [1];
501}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000502def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000503 "(V?)PADDD(Y?)rr",
504 "(V?)PADDQ(Y?)rr",
505 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000506 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000507 "(V?)PSUBB(Y?)rr",
508 "(V?)PSUBD(Y?)rr",
509 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000510 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000511
512def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
513 let Latency = 1;
514 let NumMicroOps = 1;
515 let ResourceCycles = [1];
516}
Craig Topperfbe31322018-04-05 21:56:19 +0000517def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000518def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000519def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000520 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000521 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000522 "SGDT64m",
523 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000524 "SMSW16m",
525 "STC",
526 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000527 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000530 let Latency = 1;
531 let NumMicroOps = 2;
532 let ResourceCycles = [1,1];
533}
Craig Topperfc179c62018-03-22 04:23:41 +0000534def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
535 "MMX_MOVD64from64rm",
536 "MMX_MOVD64mr",
537 "MMX_MOVNTQmr",
538 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "MOVNTI_64mr",
540 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000541 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "VEXTRACTF128mr",
543 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000544 "(V?)MOVAPDYmr",
545 "(V?)MOVAPS(Y?)mr",
546 "(V?)MOVDQA(Y?)mr",
547 "(V?)MOVDQU(Y?)mr",
548 "(V?)MOVHPDmr",
549 "(V?)MOVHPSmr",
550 "(V?)MOVLPDmr",
551 "(V?)MOVLPSmr",
552 "(V?)MOVNTDQ(Y?)mr",
553 "(V?)MOVNTPD(Y?)mr",
554 "(V?)MOVNTPS(Y?)mr",
555 "(V?)MOVPDI2DImr",
556 "(V?)MOVPQI2QImr",
557 "(V?)MOVPQIto64mr",
558 "(V?)MOVSDmr",
559 "(V?)MOVSSmr",
560 "(V?)MOVUPD(Y?)mr",
561 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000562 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000563
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000564def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565 let Latency = 2;
566 let NumMicroOps = 1;
567 let ResourceCycles = [1];
568}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000569def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000570 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000571 "(V?)MOVPDI2DIrr",
572 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000573 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000574 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000575
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000576def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000577 let Latency = 2;
578 let NumMicroOps = 2;
579 let ResourceCycles = [2];
580}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000581def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000582
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000583def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000584 let Latency = 2;
585 let NumMicroOps = 2;
586 let ResourceCycles = [2];
587}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000588def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
589def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000591def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592 let Latency = 2;
593 let NumMicroOps = 2;
594 let ResourceCycles = [2];
595}
Craig Topperfc179c62018-03-22 04:23:41 +0000596def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
597 "ROL(8|16|32|64)r1",
598 "ROL(8|16|32|64)ri",
599 "ROR(8|16|32|64)r1",
600 "ROR(8|16|32|64)ri",
601 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000603def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604 let Latency = 2;
605 let NumMicroOps = 2;
606 let ResourceCycles = [2];
607}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000608def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
609 WAIT,
610 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000612def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000613 let Latency = 2;
614 let NumMicroOps = 2;
615 let ResourceCycles = [1,1];
616}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000617def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
618 "VMASKMOVPS(Y?)mr",
619 "VPMASKMOVD(Y?)mr",
620 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000622def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623 let Latency = 2;
624 let NumMicroOps = 2;
625 let ResourceCycles = [1,1];
626}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000627def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000629def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630 let Latency = 2;
631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000634def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000636def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637 let Latency = 2;
638 let NumMicroOps = 2;
639 let ResourceCycles = [1,1];
640}
Craig Topper498875f2018-04-04 17:54:19 +0000641def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
642
643def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
644 let Latency = 1;
645 let NumMicroOps = 1;
646 let ResourceCycles = [1];
647}
648def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000649
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000650def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652 let NumMicroOps = 2;
653 let ResourceCycles = [1,1];
654}
Craig Topper2d451e72018-03-18 08:38:06 +0000655def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000656def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000657def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
658 "ADC8ri",
659 "SBB8i8",
660 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000662def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
663 let Latency = 2;
664 let NumMicroOps = 3;
665 let ResourceCycles = [1,1,1];
666}
667def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
668
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000669def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
670 let Latency = 2;
671 let NumMicroOps = 3;
672 let ResourceCycles = [1,1,1];
673}
674def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
675
676def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
677 let Latency = 2;
678 let NumMicroOps = 3;
679 let ResourceCycles = [1,1,1];
680}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000681def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
682 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000683def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000684 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000685
686def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
687 let Latency = 3;
688 let NumMicroOps = 1;
689 let ResourceCycles = [1];
690}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000691def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
692 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000693 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000694 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000695 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000696
Clement Courbet327fac42018-03-07 08:14:02 +0000697def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000698 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699 let NumMicroOps = 2;
700 let ResourceCycles = [1,1];
701}
Clement Courbet327fac42018-03-07 08:14:02 +0000702def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000703
704def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
705 let Latency = 3;
706 let NumMicroOps = 1;
707 let ResourceCycles = [1];
708}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000709def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
710 "(ADD|SUB|SUBR)_FST0r",
711 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000712 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000713 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000714 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000715 "VPMOVSXBDYrr",
716 "VPMOVSXBQYrr",
717 "VPMOVSXBWYrr",
718 "VPMOVSXDQYrr",
719 "VPMOVSXWDYrr",
720 "VPMOVSXWQYrr",
721 "VPMOVZXBDYrr",
722 "VPMOVZXBQYrr",
723 "VPMOVZXBWYrr",
724 "VPMOVZXDQYrr",
725 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000726 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727
728def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
729 let Latency = 3;
730 let NumMicroOps = 2;
731 let ResourceCycles = [1,1];
732}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000733def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734
735def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
736 let Latency = 3;
737 let NumMicroOps = 2;
738 let ResourceCycles = [1,1];
739}
740def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
741
742def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
743 let Latency = 3;
744 let NumMicroOps = 3;
745 let ResourceCycles = [3];
746}
Craig Topperfc179c62018-03-22 04:23:41 +0000747def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
748 "ROR(8|16|32|64)rCL",
749 "SAR(8|16|32|64)rCL",
750 "SHL(8|16|32|64)rCL",
751 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000752
753def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000754 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000755 let NumMicroOps = 3;
756 let ResourceCycles = [3];
757}
Craig Topperb5f26592018-04-19 18:00:17 +0000758def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
759 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
760 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000761
762def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
763 let Latency = 3;
764 let NumMicroOps = 3;
765 let ResourceCycles = [1,2];
766}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000767def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000768
769def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
770 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000771 let NumMicroOps = 3;
772 let ResourceCycles = [2,1];
773}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000774def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
775 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000776
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000777def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
778 let Latency = 3;
779 let NumMicroOps = 3;
780 let ResourceCycles = [2,1];
781}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000782def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000783
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
785 let Latency = 3;
786 let NumMicroOps = 3;
787 let ResourceCycles = [2,1];
788}
Craig Topperfc179c62018-03-22 04:23:41 +0000789def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
790 "MMX_PACKSSWBirr",
791 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000792
793def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
794 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000795 let NumMicroOps = 3;
796 let ResourceCycles = [1,2];
797}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000799
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000800def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
801 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000802 let NumMicroOps = 3;
803 let ResourceCycles = [1,2];
804}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000805def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000806
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
808 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000809 let NumMicroOps = 3;
810 let ResourceCycles = [1,2];
811}
Craig Topperfc179c62018-03-22 04:23:41 +0000812def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
813 "RCL(8|16|32|64)ri",
814 "RCR(8|16|32|64)r1",
815 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000816
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000817def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
818 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000819 let NumMicroOps = 3;
820 let ResourceCycles = [1,1,1];
821}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000822def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000823
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000824def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
825 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000826 let NumMicroOps = 4;
827 let ResourceCycles = [1,1,2];
828}
Craig Topperf4cd9082018-01-19 05:47:32 +0000829def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000830
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
832 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000833 let NumMicroOps = 4;
834 let ResourceCycles = [1,1,1,1];
835}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000837
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000838def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
839 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000840 let NumMicroOps = 4;
841 let ResourceCycles = [1,1,1,1];
842}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000846 let Latency = 4;
847 let NumMicroOps = 1;
848 let ResourceCycles = [1];
849}
Simon Pilgrimd7ffbc52018-05-04 17:47:46 +0000850def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FPrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000851 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000852 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000853
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000854def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855 let Latency = 4;
856 let NumMicroOps = 1;
857 let ResourceCycles = [1];
858}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000859def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000860 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000861 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000864 let Latency = 4;
865 let NumMicroOps = 2;
866 let ResourceCycles = [1,1];
867}
Craig Topperf846e2d2018-04-19 05:34:05 +0000868def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000869
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
871 let Latency = 4;
872 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000873 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874}
Craig Topperfc179c62018-03-22 04:23:41 +0000875def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let Latency = 4;
879 let NumMicroOps = 3;
880 let ResourceCycles = [1,1,1];
881}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000882def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
883 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let Latency = 4;
887 let NumMicroOps = 4;
888 let ResourceCycles = [4];
889}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000890def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let Latency = 4;
894 let NumMicroOps = 4;
895 let ResourceCycles = [1,3];
896}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000897def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900 let Latency = 4;
901 let NumMicroOps = 4;
902 let ResourceCycles = [1,3];
903}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000904def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000905
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000906def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000907 let Latency = 4;
908 let NumMicroOps = 4;
909 let ResourceCycles = [1,1,2];
910}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000911def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000912
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
914 let Latency = 5;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000917}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000918def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +0000919 "MOVSX(16|32|64)rm32",
920 "MOVSX(16|32|64)rm8",
921 "MOVZX(16|32|64)rm16",
922 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000923 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000924
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000925def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000926 let Latency = 5;
927 let NumMicroOps = 2;
928 let ResourceCycles = [1,1];
929}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000930def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
931 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000933def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000934 let Latency = 5;
935 let NumMicroOps = 2;
936 let ResourceCycles = [1,1];
937}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000938def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000939 "MMX_CVTPS2PIirr",
940 "MMX_CVTTPD2PIirr",
941 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000942 "(V?)CVTPD2DQrr",
943 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000944 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000945 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000946 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000947 "(V?)CVTSD2SSrr",
948 "(V?)CVTSI642SDrr",
949 "(V?)CVTSI2SDrr",
950 "(V?)CVTSI2SSrr",
951 "(V?)CVTSS2SDrr",
952 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000953
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000954def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000955 let Latency = 5;
956 let NumMicroOps = 3;
957 let ResourceCycles = [1,1,1];
958}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +0000962 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000963 let NumMicroOps = 3;
964 let ResourceCycles = [1,1,1];
965}
Craig Topper4a3be6e2018-03-22 19:22:51 +0000966def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969 let Latency = 5;
970 let NumMicroOps = 5;
971 let ResourceCycles = [1,4];
972}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000973def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000975def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976 let Latency = 5;
977 let NumMicroOps = 5;
978 let ResourceCycles = [2,3];
979}
Craig Topper13a16502018-03-19 00:56:09 +0000980def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000982def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000984 let NumMicroOps = 6;
985 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986}
Craig Topperfc179c62018-03-22 04:23:41 +0000987def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
988 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000990def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
991 let Latency = 6;
992 let NumMicroOps = 1;
993 let ResourceCycles = [1];
994}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000995def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000996 "(V?)MOVSHDUPrm",
997 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +0000998 "VPBROADCASTDrm",
999 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000
1001def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002 let Latency = 6;
1003 let NumMicroOps = 2;
1004 let ResourceCycles = [2];
1005}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001006def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009 let Latency = 6;
1010 let NumMicroOps = 2;
1011 let ResourceCycles = [1,1];
1012}
Craig Topperfc179c62018-03-22 04:23:41 +00001013def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1014 "MMX_PADDSWirm",
1015 "MMX_PADDUSBirm",
1016 "MMX_PADDUSWirm",
1017 "MMX_PAVGBirm",
1018 "MMX_PAVGWirm",
1019 "MMX_PCMPEQBirm",
1020 "MMX_PCMPEQDirm",
1021 "MMX_PCMPEQWirm",
1022 "MMX_PCMPGTBirm",
1023 "MMX_PCMPGTDirm",
1024 "MMX_PCMPGTWirm",
1025 "MMX_PMAXSWirm",
1026 "MMX_PMAXUBirm",
1027 "MMX_PMINSWirm",
1028 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001029 "MMX_PSUBSBirm",
1030 "MMX_PSUBSWirm",
1031 "MMX_PSUBUSBirm",
1032 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001033
Craig Topper58afb4e2018-03-22 21:10:07 +00001034def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035 let Latency = 6;
1036 let NumMicroOps = 2;
1037 let ResourceCycles = [1,1];
1038}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001039def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1040 "(V?)CVTSD2SIrr",
1041 "(V?)CVTSS2SI64rr",
1042 "(V?)CVTSS2SIrr",
1043 "(V?)CVTTSD2SI64rr",
1044 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001046def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1047 let Latency = 6;
1048 let NumMicroOps = 2;
1049 let ResourceCycles = [1,1];
1050}
Craig Topperfc179c62018-03-22 04:23:41 +00001051def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1052 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001053
1054def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1055 let Latency = 6;
1056 let NumMicroOps = 2;
1057 let ResourceCycles = [1,1];
1058}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001059def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1060 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001061 "MMX_PANDNirm",
1062 "MMX_PANDirm",
1063 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001064 "MMX_PSIGN(B|D|W)rm",
1065 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001066 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001067
1068def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1069 let Latency = 6;
1070 let NumMicroOps = 2;
1071 let ResourceCycles = [1,1];
1072}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001073def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001074def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1075 ADCX32rm, ADCX64rm,
1076 ADOX32rm, ADOX64rm,
1077 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078
1079def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1080 let Latency = 6;
1081 let NumMicroOps = 2;
1082 let ResourceCycles = [1,1];
1083}
Craig Topperfc179c62018-03-22 04:23:41 +00001084def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1085 "BLSI(32|64)rm",
1086 "BLSMSK(32|64)rm",
1087 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001088 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001089
1090def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1091 let Latency = 6;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Craig Topper2d451e72018-03-18 08:38:06 +00001095def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001096def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001097
Craig Topper58afb4e2018-03-22 21:10:07 +00001098def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001099 let Latency = 6;
1100 let NumMicroOps = 3;
1101 let ResourceCycles = [2,1];
1102}
Craig Topperfc179c62018-03-22 04:23:41 +00001103def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001105def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001106 let Latency = 6;
1107 let NumMicroOps = 4;
1108 let ResourceCycles = [1,2,1];
1109}
Craig Topperfc179c62018-03-22 04:23:41 +00001110def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1111 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001113def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001114 let Latency = 6;
1115 let NumMicroOps = 4;
1116 let ResourceCycles = [1,1,1,1];
1117}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001119
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001120def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1121 let Latency = 6;
1122 let NumMicroOps = 4;
1123 let ResourceCycles = [1,1,1,1];
1124}
Craig Topperfc179c62018-03-22 04:23:41 +00001125def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1126 "BTR(16|32|64)mi8",
1127 "BTS(16|32|64)mi8",
1128 "SAR(8|16|32|64)m1",
1129 "SAR(8|16|32|64)mi",
1130 "SHL(8|16|32|64)m1",
1131 "SHL(8|16|32|64)mi",
1132 "SHR(8|16|32|64)m1",
1133 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001134
1135def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1136 let Latency = 6;
1137 let NumMicroOps = 4;
1138 let ResourceCycles = [1,1,1,1];
1139}
Craig Topperf0d04262018-04-06 16:16:48 +00001140def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1141 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001142
1143def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001144 let Latency = 6;
1145 let NumMicroOps = 6;
1146 let ResourceCycles = [1,5];
1147}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001148def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001150def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1151 let Latency = 7;
1152 let NumMicroOps = 1;
1153 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001154}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001155def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001156 "VBROADCASTF128",
1157 "VBROADCASTI128",
1158 "VBROADCASTSDYrm",
1159 "VBROADCASTSSYrm",
1160 "VLDDQUYrm",
1161 "VMOVAPDYrm",
1162 "VMOVAPSYrm",
1163 "VMOVDDUPYrm",
1164 "VMOVDQAYrm",
1165 "VMOVDQUYrm",
1166 "VMOVNTDQAYrm",
1167 "VMOVSHDUPYrm",
1168 "VMOVSLDUPYrm",
1169 "VMOVUPDYrm",
1170 "VMOVUPSYrm",
1171 "VPBROADCASTDYrm",
1172 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001173
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001174def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001175 let Latency = 7;
1176 let NumMicroOps = 2;
1177 let ResourceCycles = [1,1];
1178}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001180
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001181def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1182 let Latency = 7;
1183 let NumMicroOps = 2;
1184 let ResourceCycles = [1,1];
1185}
Simon Pilgrim819f2182018-05-02 17:58:50 +00001186def: InstRW<[SKLWriteResGroup88], (instregex "(V?)PACKSSDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001187 "(V?)PACKSSWBrm",
1188 "(V?)PACKUSDWrm",
1189 "(V?)PACKUSWBrm",
1190 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "VPBROADCASTBrm",
1192 "VPBROADCASTWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001193 "(V?)PSHUFDmi",
1194 "(V?)PSHUFHWmi",
1195 "(V?)PSHUFLWmi",
1196 "(V?)PUNPCKHBWrm",
1197 "(V?)PUNPCKHDQrm",
1198 "(V?)PUNPCKHQDQrm",
1199 "(V?)PUNPCKHWDrm",
1200 "(V?)PUNPCKLBWrm",
1201 "(V?)PUNPCKLDQrm",
1202 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001203 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001205def SKLWriteResGroup88a : SchedWriteRes<[SKLPort5,SKLPort23]> {
1206 let Latency = 6;
1207 let NumMicroOps = 2;
1208 let ResourceCycles = [1,1];
1209}
1210def: InstRW<[SKLWriteResGroup88a], (instregex "MMX_PSHUFBrm")>;
1211
Craig Topper58afb4e2018-03-22 21:10:07 +00001212def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213 let Latency = 7;
1214 let NumMicroOps = 2;
1215 let ResourceCycles = [1,1];
1216}
Craig Topperfc179c62018-03-22 04:23:41 +00001217def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1218 "VCVTPD2PSYrr",
1219 "VCVTPH2PSYrr",
1220 "VCVTPS2PDYrr",
1221 "VCVTPS2PHYrr",
1222 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001223
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001224def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1225 let Latency = 7;
1226 let NumMicroOps = 2;
1227 let ResourceCycles = [1,1];
1228}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001229def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001230 "(V?)INSERTI128rm",
1231 "(V?)MASKMOVPDrm",
1232 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001233 "(V?)PADDBrm",
1234 "(V?)PADDDrm",
1235 "(V?)PADDQrm",
1236 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001237 "(V?)PBLENDDrmi",
1238 "(V?)PMASKMOVDrm",
1239 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001240 "(V?)PSUBBrm",
1241 "(V?)PSUBDrm",
1242 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001243 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001244
1245def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1246 let Latency = 7;
1247 let NumMicroOps = 3;
1248 let ResourceCycles = [2,1];
1249}
Craig Topperfc179c62018-03-22 04:23:41 +00001250def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1251 "MMX_PACKSSWBirm",
1252 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001253
1254def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1255 let Latency = 7;
1256 let NumMicroOps = 3;
1257 let ResourceCycles = [1,2];
1258}
Craig Topperf4cd9082018-01-19 05:47:32 +00001259def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001260
1261def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1262 let Latency = 7;
1263 let NumMicroOps = 3;
1264 let ResourceCycles = [1,2];
1265}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001266def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1267 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268
Craig Topper58afb4e2018-03-22 21:10:07 +00001269def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270 let Latency = 7;
1271 let NumMicroOps = 3;
1272 let ResourceCycles = [1,1,1];
1273}
Craig Topperfc179c62018-03-22 04:23:41 +00001274def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1275 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001276
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001277def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278 let Latency = 7;
1279 let NumMicroOps = 3;
1280 let ResourceCycles = [1,1,1];
1281}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001282def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001283
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001285 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286 let NumMicroOps = 3;
1287 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001288}
Craig Topperfc179c62018-03-22 04:23:41 +00001289def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1290 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001291
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001292def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1293 let Latency = 7;
1294 let NumMicroOps = 5;
1295 let ResourceCycles = [1,1,1,2];
1296}
Craig Topperfc179c62018-03-22 04:23:41 +00001297def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1298 "ROL(8|16|32|64)mi",
1299 "ROR(8|16|32|64)m1",
1300 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301
1302def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1303 let Latency = 7;
1304 let NumMicroOps = 5;
1305 let ResourceCycles = [1,1,1,2];
1306}
Craig Topper13a16502018-03-19 00:56:09 +00001307def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001308
1309def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1310 let Latency = 7;
1311 let NumMicroOps = 5;
1312 let ResourceCycles = [1,1,1,1,1];
1313}
Craig Topperfc179c62018-03-22 04:23:41 +00001314def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1315 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001316
1317def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001318 let Latency = 7;
1319 let NumMicroOps = 7;
1320 let ResourceCycles = [1,3,1,2];
1321}
Craig Topper2d451e72018-03-18 08:38:06 +00001322def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001323
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001324def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001325 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001326 let NumMicroOps = 2;
1327 let ResourceCycles = [1,1];
1328}
Craig Topperfc179c62018-03-22 04:23:41 +00001329def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1330 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331
1332def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1333 let Latency = 8;
1334 let NumMicroOps = 2;
1335 let ResourceCycles = [1,1];
1336}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001337def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1338 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001339
1340def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001341 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001342 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001343 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001344}
Craig Topperf846e2d2018-04-19 05:34:05 +00001345def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001346
Craig Topperf846e2d2018-04-19 05:34:05 +00001347def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1348 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001349 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001350 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001351}
Craig Topperfc179c62018-03-22 04:23:41 +00001352def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001353
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001354def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1355 let Latency = 8;
1356 let NumMicroOps = 2;
1357 let ResourceCycles = [1,1];
1358}
Craig Topperfc179c62018-03-22 04:23:41 +00001359def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1360 "FCOM64m",
1361 "FCOMP32m",
1362 "FCOMP64m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001363 "MMX_PSADBWirm", // TODO - SKLWriteResGroup120??
Craig Topperfc179c62018-03-22 04:23:41 +00001364 "VPBROADCASTBYrm",
1365 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001366 "VPMOVSXBDYrm",
1367 "VPMOVSXBQYrm",
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001368 "VPMOVSXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001369
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1371 let Latency = 8;
1372 let NumMicroOps = 2;
1373 let ResourceCycles = [1,1];
1374}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001375def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001376 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001377 "VPADDBYrm",
1378 "VPADDDYrm",
1379 "VPADDQYrm",
1380 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001381 "VPBLENDDYrmi",
1382 "VPMASKMOVDYrm",
1383 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001384 "VPSUBBYrm",
1385 "VPSUBDYrm",
1386 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001387 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001388
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1390 let Latency = 8;
1391 let NumMicroOps = 4;
1392 let ResourceCycles = [1,2,1];
1393}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001394def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001395
1396def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1397 let Latency = 8;
1398 let NumMicroOps = 4;
1399 let ResourceCycles = [2,1,1];
1400}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001401def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001402
Craig Topper58afb4e2018-03-22 21:10:07 +00001403def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001404 let Latency = 8;
1405 let NumMicroOps = 4;
1406 let ResourceCycles = [1,1,1,1];
1407}
1408def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1409
1410def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1411 let Latency = 8;
1412 let NumMicroOps = 5;
1413 let ResourceCycles = [1,1,3];
1414}
Craig Topper13a16502018-03-19 00:56:09 +00001415def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001416
1417def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1418 let Latency = 8;
1419 let NumMicroOps = 5;
1420 let ResourceCycles = [1,1,1,2];
1421}
Craig Topperfc179c62018-03-22 04:23:41 +00001422def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1423 "RCL(8|16|32|64)mi",
1424 "RCR(8|16|32|64)m1",
1425 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426
1427def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1428 let Latency = 8;
1429 let NumMicroOps = 6;
1430 let ResourceCycles = [1,1,1,3];
1431}
Craig Topperfc179c62018-03-22 04:23:41 +00001432def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1433 "SAR(8|16|32|64)mCL",
1434 "SHL(8|16|32|64)mCL",
1435 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001436
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001437def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1438 let Latency = 8;
1439 let NumMicroOps = 6;
1440 let ResourceCycles = [1,1,1,2,1];
1441}
Craig Topper9f834812018-04-01 21:54:24 +00001442def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001443 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001444 "SBB(8|16|32|64)mi")>;
1445def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1446 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447
1448def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1449 let Latency = 9;
1450 let NumMicroOps = 2;
1451 let ResourceCycles = [1,1];
1452}
Craig Topperfc179c62018-03-22 04:23:41 +00001453def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001454 "VTESTPDYrm",
1455 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456
1457def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1458 let Latency = 9;
1459 let NumMicroOps = 2;
1460 let ResourceCycles = [1,1];
1461}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001462def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001463 "VPMOVSXBWYrm",
1464 "VPMOVSXDQYrm",
1465 "VPMOVSXWDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001466 "VPMOVZXWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001467
1468def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1469 let Latency = 9;
1470 let NumMicroOps = 2;
1471 let ResourceCycles = [1,1];
1472}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001473def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1474 "(V?)ADDSSrm",
1475 "(V?)CMPSDrm",
1476 "(V?)CMPSSrm",
1477 "(V?)MAX(C?)SDrm",
1478 "(V?)MAX(C?)SSrm",
1479 "(V?)MIN(C?)SDrm",
1480 "(V?)MIN(C?)SSrm",
1481 "(V?)MULSDrm",
1482 "(V?)MULSSrm",
1483 "(V?)SUBSDrm",
1484 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485
Craig Topper58afb4e2018-03-22 21:10:07 +00001486def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487 let Latency = 9;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [1,1];
1490}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001491def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001492 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001493 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001494 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1497 let Latency = 9;
1498 let NumMicroOps = 3;
1499 let ResourceCycles = [1,1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502
1503def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1504 let Latency = 9;
1505 let NumMicroOps = 3;
1506 let ResourceCycles = [1,1,1];
1507}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001508def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001509
1510def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001511 let Latency = 9;
1512 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001513 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514}
Craig Topperfc179c62018-03-22 04:23:41 +00001515def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1516 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001517
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001518def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1519 let Latency = 9;
1520 let NumMicroOps = 4;
1521 let ResourceCycles = [1,1,1,1];
1522}
Craig Topperfc179c62018-03-22 04:23:41 +00001523def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1524 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525
1526def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1527 let Latency = 9;
1528 let NumMicroOps = 5;
1529 let ResourceCycles = [1,2,1,1];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1532 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001533
1534def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1535 let Latency = 10;
1536 let NumMicroOps = 2;
1537 let ResourceCycles = [1,1];
1538}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001539def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001540 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001541
1542def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1543 let Latency = 10;
1544 let NumMicroOps = 2;
1545 let ResourceCycles = [1,1];
1546}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001547def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1548 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001549 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001550 "VPMOVZXBDYrm",
1551 "VPMOVZXBQYrm",
1552 "VPMOVZXBWYrm",
1553 "VPMOVZXDQYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001554 "VPMOVZXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001555
1556def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1557 let Latency = 10;
1558 let NumMicroOps = 2;
1559 let ResourceCycles = [1,1];
1560}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001561def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001562 "(V?)CVTPH2PSYrm",
1563 "(V?)CVTPS2DQrm",
1564 "(V?)CVTSS2SDrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001565 "(V?)CVTTPS2DQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001566
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001567def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1568 let Latency = 10;
1569 let NumMicroOps = 3;
1570 let ResourceCycles = [1,1,1];
1571}
Craig Topperfc179c62018-03-22 04:23:41 +00001572def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1573 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001574
Craig Topper58afb4e2018-03-22 21:10:07 +00001575def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001576 let Latency = 10;
1577 let NumMicroOps = 3;
1578 let ResourceCycles = [1,1,1];
1579}
Craig Topperfc179c62018-03-22 04:23:41 +00001580def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001581
1582def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001583 let Latency = 10;
1584 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001586}
Craig Topperfc179c62018-03-22 04:23:41 +00001587def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1588 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001589
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001590def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001591 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001592 let NumMicroOps = 4;
1593 let ResourceCycles = [1,1,1,1];
1594}
Craig Topperf846e2d2018-04-19 05:34:05 +00001595def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001596
1597def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1598 let Latency = 10;
1599 let NumMicroOps = 8;
1600 let ResourceCycles = [1,1,1,1,1,3];
1601}
Craig Topper13a16502018-03-19 00:56:09 +00001602def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603
Craig Topper8104f262018-04-02 05:33:28 +00001604def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001605 let Latency = 11;
1606 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001607 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001608}
Craig Topper8104f262018-04-02 05:33:28 +00001609def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001610 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001611
Craig Topper8104f262018-04-02 05:33:28 +00001612def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1613 let Latency = 11;
1614 let NumMicroOps = 1;
1615 let ResourceCycles = [1,5];
1616}
1617def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1618
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001619def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001620 let Latency = 11;
1621 let NumMicroOps = 2;
1622 let ResourceCycles = [1,1];
1623}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001624def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001625 "VRCPPSYm",
1626 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001627
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001628def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1629 let Latency = 11;
1630 let NumMicroOps = 2;
1631 let ResourceCycles = [1,1];
1632}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001633def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001634 "VCVTPS2DQYrm",
1635 "VCVTPS2PDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001636 "VCVTTPS2DQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001637
1638def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1639 let Latency = 11;
1640 let NumMicroOps = 3;
1641 let ResourceCycles = [2,1];
1642}
Craig Topperfc179c62018-03-22 04:23:41 +00001643def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1644 "FICOM32m",
1645 "FICOMP16m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001646 "FICOMP32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001647
1648def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1649 let Latency = 11;
1650 let NumMicroOps = 3;
1651 let ResourceCycles = [1,1,1];
1652}
Craig Topperfc179c62018-03-22 04:23:41 +00001653def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654
Craig Topper58afb4e2018-03-22 21:10:07 +00001655def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001656 let Latency = 11;
1657 let NumMicroOps = 3;
1658 let ResourceCycles = [1,1,1];
1659}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001660def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1661 "(V?)CVTSD2SIrm",
1662 "(V?)CVTSS2SI64rm",
1663 "(V?)CVTSS2SIrm",
1664 "(V?)CVTTSD2SI64rm",
1665 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001666 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001667 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001668
Craig Topper58afb4e2018-03-22 21:10:07 +00001669def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670 let Latency = 11;
1671 let NumMicroOps = 3;
1672 let ResourceCycles = [1,1,1];
1673}
Craig Topperfc179c62018-03-22 04:23:41 +00001674def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1675 "CVTPD2PSrm",
1676 "CVTTPD2DQrm",
1677 "MMX_CVTPD2PIirm",
1678 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001679
1680def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1681 let Latency = 11;
1682 let NumMicroOps = 6;
1683 let ResourceCycles = [1,1,1,2,1];
1684}
Craig Topperfc179c62018-03-22 04:23:41 +00001685def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1686 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001687
1688def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001689 let Latency = 11;
1690 let NumMicroOps = 7;
1691 let ResourceCycles = [2,3,2];
1692}
Craig Topperfc179c62018-03-22 04:23:41 +00001693def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1694 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001695
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001697 let Latency = 11;
1698 let NumMicroOps = 9;
1699 let ResourceCycles = [1,5,1,2];
1700}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001701def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001702
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001703def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001704 let Latency = 11;
1705 let NumMicroOps = 11;
1706 let ResourceCycles = [2,9];
1707}
Craig Topperfc179c62018-03-22 04:23:41 +00001708def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001709
Craig Topper8104f262018-04-02 05:33:28 +00001710def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001711 let Latency = 12;
1712 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001713 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001714}
Craig Topper8104f262018-04-02 05:33:28 +00001715def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001716 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001717
Craig Topper8104f262018-04-02 05:33:28 +00001718def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1719 let Latency = 12;
1720 let NumMicroOps = 1;
1721 let ResourceCycles = [1,6];
1722}
1723def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1724
Craig Topper58afb4e2018-03-22 21:10:07 +00001725def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001726 let Latency = 12;
1727 let NumMicroOps = 4;
1728 let ResourceCycles = [1,1,1,1];
1729}
1730def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001733 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001734 let NumMicroOps = 3;
1735 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001736}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001737def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001738
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001739def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1740 let Latency = 13;
1741 let NumMicroOps = 3;
1742 let ResourceCycles = [1,1,1];
1743}
1744def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
1745
Craig Topper8104f262018-04-02 05:33:28 +00001746def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001747 let Latency = 14;
1748 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001749 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001750}
Craig Topper8104f262018-04-02 05:33:28 +00001751def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001752 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001753
Craig Topper8104f262018-04-02 05:33:28 +00001754def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1755 let Latency = 14;
1756 let NumMicroOps = 1;
1757 let ResourceCycles = [1,5];
1758}
1759def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
1760
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1762 let Latency = 14;
1763 let NumMicroOps = 3;
1764 let ResourceCycles = [1,1,1];
1765}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001766def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001767
1768def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001769 let Latency = 14;
1770 let NumMicroOps = 10;
1771 let ResourceCycles = [2,4,1,3];
1772}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001773def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001774
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001775def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001776 let Latency = 15;
1777 let NumMicroOps = 1;
1778 let ResourceCycles = [1];
1779}
Craig Topperfc179c62018-03-22 04:23:41 +00001780def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
1781 "DIVR_FST0r",
1782 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001783
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001784def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1785 let Latency = 15;
1786 let NumMicroOps = 10;
1787 let ResourceCycles = [1,1,1,5,1,1];
1788}
Craig Topper13a16502018-03-19 00:56:09 +00001789def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001790
Craig Topper8104f262018-04-02 05:33:28 +00001791def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001792 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001794 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001795}
Craig Topperfc179c62018-03-22 04:23:41 +00001796def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001797
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001798def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
1799 let Latency = 16;
1800 let NumMicroOps = 14;
1801 let ResourceCycles = [1,1,1,4,2,5];
1802}
1803def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
1804
1805def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806 let Latency = 16;
1807 let NumMicroOps = 16;
1808 let ResourceCycles = [16];
1809}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001810def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001811
Craig Topper8104f262018-04-02 05:33:28 +00001812def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001813 let Latency = 17;
1814 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001815 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001816}
Craig Topper8104f262018-04-02 05:33:28 +00001817def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
1818
1819def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1820 let Latency = 17;
1821 let NumMicroOps = 2;
1822 let ResourceCycles = [1,1,3];
1823}
1824def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001827 let Latency = 17;
1828 let NumMicroOps = 15;
1829 let ResourceCycles = [2,1,2,4,2,4];
1830}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001831def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001832
Craig Topper8104f262018-04-02 05:33:28 +00001833def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001834 let Latency = 18;
1835 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001836 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001837}
Craig Topper8104f262018-04-02 05:33:28 +00001838def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001839 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001840
Craig Topper8104f262018-04-02 05:33:28 +00001841def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1842 let Latency = 18;
1843 let NumMicroOps = 1;
1844 let ResourceCycles = [1,12];
1845}
1846def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
1847
1848def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001849 let Latency = 18;
1850 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001851 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001852}
Craig Topper8104f262018-04-02 05:33:28 +00001853def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
1854
1855def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1856 let Latency = 18;
1857 let NumMicroOps = 2;
1858 let ResourceCycles = [1,1,3];
1859}
1860def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001862def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001863 let Latency = 18;
1864 let NumMicroOps = 8;
1865 let ResourceCycles = [1,1,1,5];
1866}
Craig Topperfc179c62018-03-22 04:23:41 +00001867def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001868
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001870 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001871 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001872 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001873}
Craig Topper13a16502018-03-19 00:56:09 +00001874def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001875
Craig Topper8104f262018-04-02 05:33:28 +00001876def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001877 let Latency = 19;
1878 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001879 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001880}
Craig Topper8104f262018-04-02 05:33:28 +00001881def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
1882
1883def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
1884 let Latency = 19;
1885 let NumMicroOps = 2;
1886 let ResourceCycles = [1,1,6];
1887}
1888def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001891 let Latency = 20;
1892 let NumMicroOps = 1;
1893 let ResourceCycles = [1];
1894}
Craig Topperfc179c62018-03-22 04:23:41 +00001895def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
1896 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001897 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001898
Craig Topper8104f262018-04-02 05:33:28 +00001899def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001900 let Latency = 20;
1901 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001902 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001903}
Craig Topperfc179c62018-03-22 04:23:41 +00001904def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1907 let Latency = 20;
1908 let NumMicroOps = 8;
1909 let ResourceCycles = [1,1,1,1,1,1,2];
1910}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001911def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912
1913def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001914 let Latency = 20;
1915 let NumMicroOps = 10;
1916 let ResourceCycles = [1,2,7];
1917}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001918def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001919
Craig Topper8104f262018-04-02 05:33:28 +00001920def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921 let Latency = 21;
1922 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001923 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001924}
1925def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
1926
1927def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1928 let Latency = 22;
1929 let NumMicroOps = 2;
1930 let ResourceCycles = [1,1];
1931}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001932def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001933
1934def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
1935 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001936 let NumMicroOps = 5;
1937 let ResourceCycles = [1,2,1,1];
1938}
Craig Topper17a31182017-12-16 18:35:29 +00001939def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
1940 VGATHERDPDrm,
1941 VGATHERQPDrm,
1942 VGATHERQPSrm,
1943 VPGATHERDDrm,
1944 VPGATHERDQrm,
1945 VPGATHERQDrm,
1946 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001948def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
1949 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001950 let NumMicroOps = 5;
1951 let ResourceCycles = [1,2,1,1];
1952}
Craig Topper17a31182017-12-16 18:35:29 +00001953def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
1954 VGATHERQPDYrm,
1955 VGATHERQPSYrm,
1956 VPGATHERDDYrm,
1957 VPGATHERDQYrm,
1958 VPGATHERQDYrm,
1959 VPGATHERQQYrm,
1960 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001961
Craig Topper8104f262018-04-02 05:33:28 +00001962def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001963 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001964 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001965 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001966}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001967def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968
1969def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1970 let Latency = 23;
1971 let NumMicroOps = 19;
1972 let ResourceCycles = [2,1,4,1,1,4,6];
1973}
1974def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
1975
Craig Topper8104f262018-04-02 05:33:28 +00001976def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001977 let Latency = 24;
1978 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001979 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001981def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001982
Craig Topper8104f262018-04-02 05:33:28 +00001983def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001984 let Latency = 25;
1985 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001986 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001987}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001988def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001989
1990def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1991 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001992 let NumMicroOps = 3;
1993 let ResourceCycles = [1,1,1];
1994}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001995def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001996
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001997def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1998 let Latency = 27;
1999 let NumMicroOps = 2;
2000 let ResourceCycles = [1,1];
2001}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002002def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002003
2004def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2005 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002006 let NumMicroOps = 8;
2007 let ResourceCycles = [2,4,1,1];
2008}
Craig Topper13a16502018-03-19 00:56:09 +00002009def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002010
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002011def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002012 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013 let NumMicroOps = 3;
2014 let ResourceCycles = [1,1,1];
2015}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002016def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017
2018def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2019 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002020 let NumMicroOps = 23;
2021 let ResourceCycles = [1,5,3,4,10];
2022}
Craig Topperfc179c62018-03-22 04:23:41 +00002023def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2024 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2027 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002028 let NumMicroOps = 23;
2029 let ResourceCycles = [1,5,2,1,4,10];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2032 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002033
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002034def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2035 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002036 let NumMicroOps = 31;
2037 let ResourceCycles = [1,8,1,21];
2038}
Craig Topper391c6f92017-12-10 01:24:08 +00002039def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002040
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002041def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2042 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002043 let NumMicroOps = 18;
2044 let ResourceCycles = [1,1,2,3,1,1,1,8];
2045}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002046def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002047
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002048def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2049 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002050 let NumMicroOps = 39;
2051 let ResourceCycles = [1,10,1,1,26];
2052}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002055def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002056 let Latency = 42;
2057 let NumMicroOps = 22;
2058 let ResourceCycles = [2,20];
2059}
Craig Topper2d451e72018-03-18 08:38:06 +00002060def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2063 let Latency = 42;
2064 let NumMicroOps = 40;
2065 let ResourceCycles = [1,11,1,1,26];
2066}
Craig Topper391c6f92017-12-10 01:24:08 +00002067def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002068
2069def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2070 let Latency = 46;
2071 let NumMicroOps = 44;
2072 let ResourceCycles = [1,11,1,1,30];
2073}
2074def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2075
2076def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2077 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002078 let NumMicroOps = 64;
2079 let ResourceCycles = [2,8,5,10,39];
2080}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002081def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002082
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002083def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2084 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002085 let NumMicroOps = 88;
2086 let ResourceCycles = [4,4,31,1,2,1,45];
2087}
Craig Topper2d451e72018-03-18 08:38:06 +00002088def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2091 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002092 let NumMicroOps = 90;
2093 let ResourceCycles = [4,2,33,1,2,1,47];
2094}
Craig Topper2d451e72018-03-18 08:38:06 +00002095def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002096
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002098 let Latency = 75;
2099 let NumMicroOps = 15;
2100 let ResourceCycles = [6,3,6];
2101}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002102def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002105 let Latency = 76;
2106 let NumMicroOps = 32;
2107 let ResourceCycles = [7,2,8,3,1,11];
2108}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002109def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002111def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002112 let Latency = 102;
2113 let NumMicroOps = 66;
2114 let ResourceCycles = [4,2,4,8,14,34];
2115}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002116def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002118def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2119 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002120 let NumMicroOps = 100;
2121 let ResourceCycles = [9,1,11,16,1,11,21,30];
2122}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002124
2125} // SchedModel