xref: /llvm-project/llvm/lib/Target/X86/X86SchedAlderlakeP.td (revision 512dc5cb32e65081f4481afc757beade9bd64d04)
1//===- X86SchedAlderlakeP.td - X86 Alderlake-P Scheduling ----*- tablegen -*-=//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines the machine model for Alderlake-P core to support
10// instruction scheduling and other instruction cost heuristics.
11//
12//===----------------------------------------------------------------------===//
13
14def AlderlakePModel : SchedMachineModel {
15  // Alderlake-P core can allocate 6 uops per cycle.
16  let IssueWidth = 6; // Based on allocator width.
17  let MicroOpBufferSize = 512; // Based on the reorder buffer.
18  let LoadLatency = 5;
19  let MispredictPenalty = 14;
20
21  // Latency for microcoded instructions or instructions without latency info.
22  int MaxLatency = 100;
23
24  // Based on the LSD (loop-stream detector) queue size (ST).
25  let LoopMicroOpBufferSize = 72;
26
27  // This flag is set to allow the scheduler to assign a default model to
28  // unrecognized opcodes.
29  let CompleteModel = 0;
30}
31
32let SchedModel = AlderlakePModel in {
33
34// Alderlake-P core can issue micro-ops to 12 different ports in one cycle.
35def ADLPPort00 : ProcResource<1>;
36def ADLPPort01 : ProcResource<1>;
37def ADLPPort02 : ProcResource<1>;
38def ADLPPort03 : ProcResource<1>;
39def ADLPPort04 : ProcResource<1>;
40def ADLPPort05 : ProcResource<1>;
41def ADLPPort06 : ProcResource<1>;
42def ADLPPort07 : ProcResource<1>;
43def ADLPPort08 : ProcResource<1>;
44def ADLPPort09 : ProcResource<1>;
45def ADLPPort10 : ProcResource<1>;
46def ADLPPort11 : ProcResource<1>;
47
48// Workaround to represent invalid ports. WriteRes shouldn't use this resource.
49def ADLPPortInvalid : ProcResource<1>;
50
51// Many micro-ops are capable of issuing on multiple ports.
52def ADLPPort00_01          : ProcResGroup<[ADLPPort00, ADLPPort01]>;
53def ADLPPort00_01_05       : ProcResGroup<[ADLPPort00, ADLPPort01, ADLPPort05]>;
54def ADLPPort00_01_05_06    : ProcResGroup<[ADLPPort00, ADLPPort01, ADLPPort05, ADLPPort06]>;
55def ADLPPort00_05          : ProcResGroup<[ADLPPort00, ADLPPort05]>;
56def ADLPPort00_05_06       : ProcResGroup<[ADLPPort00, ADLPPort05, ADLPPort06]>;
57def ADLPPort00_06          : ProcResGroup<[ADLPPort00, ADLPPort06]>;
58def ADLPPort01_05          : ProcResGroup<[ADLPPort01, ADLPPort05]>;
59def ADLPPort01_05_11       : ProcResGroup<[ADLPPort01, ADLPPort05, ADLPPort11]>;
60def ADLPPort02_03          : ProcResGroup<[ADLPPort02, ADLPPort03]>;
61def ADLPPort02_03_07       : ProcResGroup<[ADLPPort02, ADLPPort03, ADLPPort07]>;
62def ADLPPort02_03_10       : ProcResGroup<[ADLPPort02, ADLPPort03, ADLPPort10]>;
63def ADLPPort07_08          : ProcResGroup<[ADLPPort07, ADLPPort08]>;
64
65// EU has 112 reservation stations.
66def ADLPPort00_01_05_06_11 : ProcResGroup<[ADLPPort00, ADLPPort01, ADLPPort05,
67                                           ADLPPort06, ADLPPort11]> {
68  let BufferSize = 112;
69}
70
71// STD has 48 reservation stations.
72def ADLPPort04_09          : ProcResGroup<[ADLPPort04, ADLPPort09]> {
73  let BufferSize = 48;
74}
75
76// MEM has 72 reservation stations.
77def ADLPPort02_03_07_08_10 : ProcResGroup<[ADLPPort02, ADLPPort03, ADLPPort07,
78                                           ADLPPort08, ADLPPort10]> {
79  let BufferSize = 72;
80}
81
82def ADLPPortAny : ProcResGroup<[ADLPPort00, ADLPPort01, ADLPPort02, ADLPPort03,
83                                ADLPPort04, ADLPPort05, ADLPPort06, ADLPPort07,
84                                ADLPPort08, ADLPPort09, ADLPPort10, ADLPPort11]>;
85
86// Integer loads are 5 cycles, so ReadAfterLd registers needn't be available
87// until 5 cycles after the memory operand.
88def : ReadAdvance<ReadAfterLd, 5>;
89
90// Vector loads are 6 cycles, so ReadAfterVec*Ld registers needn't be available
91// until 6 cycles after the memory operand.
92def : ReadAdvance<ReadAfterVecLd, 6>;
93def : ReadAdvance<ReadAfterVecXLd, 6>;
94def : ReadAdvance<ReadAfterVecYLd, 6>;
95
96def : ReadAdvance<ReadInt2Fpu, 0>;
97
98// Many SchedWrites are defined in pairs with and without a folded load.
99// Instructions with folded loads are usually micro-fused, so they only appear
100// as two micro-ops when queued in the reservation station.
101// This multiclass defines the resource usage for variants with and without
102// folded loads.
103multiclass ADLPWriteResPair<X86FoldableSchedWrite SchedRW,
104                            list<ProcResourceKind> ExePorts,
105                            int Lat, list<int> Res = [1], int UOps = 1,
106                            int LoadLat = 5, int LoadUOps = 1> {
107  // Register variant is using a single cycle on ExePort.
108  def : WriteRes<SchedRW, ExePorts> {
109    let Latency = Lat;
110    let ReleaseAtCycles = Res;
111    let NumMicroOps = UOps;
112  }
113
114  // Memory variant also uses a cycle on port 2/3/11 and adds LoadLat cycles to
115  // the latency (default = 5).
116  def : WriteRes<SchedRW.Folded, !listconcat([ADLPPort02_03_10], ExePorts)> {
117    let Latency = !add(Lat, LoadLat);
118    let ReleaseAtCycles = !listconcat([1], Res);
119    let NumMicroOps = !add(UOps, LoadUOps);
120  }
121}
122
123//===----------------------------------------------------------------------===//
124// The following definitons are infered by smg.
125//===----------------------------------------------------------------------===//
126
127// Infered SchedWrite definition.
128def : WriteRes<WriteADC, [ADLPPort00_06]>;
129defm : X86WriteRes<WriteADCLd, [ADLPPort00_01_05_06_11, ADLPPort00_06], 11, [1, 1], 2>;
130defm : ADLPWriteResPair<WriteAESDecEnc, [ADLPPort00_01], 5, [1], 1, 7>;
131defm : ADLPWriteResPair<WriteAESIMC, [ADLPPort00_01], 8, [2], 2, 7>;
132defm : X86WriteRes<WriteAESKeyGen, [ADLPPort00, ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01_05, ADLPPort05], 7, [4, 1, 1, 2, 3, 3], 14>;
133defm : X86WriteRes<WriteAESKeyGenLd, [ADLPPort00, ADLPPort00_01, ADLPPort00_06, ADLPPort01_05, ADLPPort02_03_10, ADLPPort05], 12, [4, 1, 2, 3, 1, 3], 14>;
134def : WriteRes<WriteALU, [ADLPPort00_01_05_06_11]>;
135def : WriteRes<WriteALULd, [ADLPPort00_01_05_06_11]> {
136  let Latency = 11;
137}
138defm : ADLPWriteResPair<WriteBEXTR, [ADLPPort00_06, ADLPPort01], 6, [1, 1], 2>;
139defm : ADLPWriteResPair<WriteBLS, [ADLPPort01_05_11], 2, [1]>;
140defm : ADLPWriteResPair<WriteBSF, [ADLPPort01], 3, [1]>;
141defm : ADLPWriteResPair<WriteBSR, [ADLPPort01], 3, [1]>;
142def : WriteRes<WriteBSWAP32, [ADLPPort01]>;
143defm : X86WriteRes<WriteBSWAP64, [ADLPPort00_06, ADLPPort01], 2, [1, 1], 2>;
144defm : ADLPWriteResPair<WriteBZHI, [ADLPPort01], 3, [1]>;
145def : WriteRes<WriteBitTest, [ADLPPort01]>;
146defm : X86WriteRes<WriteBitTestImmLd, [ADLPPort01, ADLPPort02_03_10], 6, [1, 1], 2>;
147defm : X86WriteRes<WriteBitTestRegLd, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10], 11, [4, 2, 1, 2, 1], 10>;
148def : WriteRes<WriteBitTestSet, [ADLPPort01]>;
149def : WriteRes<WriteBitTestSetImmLd, [ADLPPort01]> {
150  let Latency = 11;
151}
152defm : X86WriteRes<WriteBitTestSetRegLd, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11], 17, [3, 2, 1, 2], 8>;
153defm : ADLPWriteResPair<WriteBlend, [ADLPPort01_05], 1, [1], 1, 7>;
154defm : ADLPWriteResPair<WriteBlendY, [ADLPPort00_01_05], 1, [1], 1, 8>;
155defm : ADLPWriteResPair<WriteCLMul, [ADLPPort05], 3, [1], 1, 7>;
156defm : ADLPWriteResPair<WriteCMOV, [ADLPPort00_06], 1, [1], 1, 6>;
157defm : X86WriteRes<WriteCMPXCHG, [ADLPPort00_01_05_06_11, ADLPPort00_06], 3, [3, 2], 5>;
158defm : X86WriteRes<WriteCMPXCHGRMW, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08], 12, [1, 2, 1, 1, 1], 6>;
159defm : ADLPWriteResPair<WriteCRC32, [ADLPPort01], 3, [1]>;
160defm : X86WriteRes<WriteCvtI2PD, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2>;
161defm : X86WriteRes<WriteCvtI2PDLd, [ADLPPort00_01, ADLPPort02_03_10], 11, [1, 1], 2>;
162defm : X86WriteRes<WriteCvtI2PDY, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2>;
163defm : X86WriteRes<WriteCvtI2PDYLd, [ADLPPort00_01, ADLPPort02_03_10], 12, [1, 1], 2>;
164defm : X86WriteResPairUnsupported<WriteCvtI2PDZ>;
165defm : ADLPWriteResPair<WriteCvtI2PS, [ADLPPort00_01], 4, [1], 1, 7>;
166defm : ADLPWriteResPair<WriteCvtI2PSY, [ADLPPort00_01], 4, [1], 1, 8>;
167defm : X86WriteResPairUnsupported<WriteCvtI2PSZ>;
168defm : X86WriteRes<WriteCvtI2SD, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2>;
169defm : X86WriteRes<WriteCvtI2SDLd, [ADLPPort00_01, ADLPPort02_03_10], 11, [1, 1], 2>;
170defm : X86WriteRes<WriteCvtI2SS, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2>;
171defm : X86WriteRes<WriteCvtI2SSLd, [ADLPPort00_01, ADLPPort02_03_10], 11, [1, 1], 2>;
172defm : ADLPWriteResPair<WriteCvtPD2I, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2, 7>;
173defm : ADLPWriteResPair<WriteCvtPD2IY, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2, 8>;
174defm : X86WriteResPairUnsupported<WriteCvtPD2IZ>;
175defm : ADLPWriteResPair<WriteCvtPD2PS, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2, 7>;
176defm : ADLPWriteResPair<WriteCvtPD2PSY, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2, 8>;
177defm : X86WriteResPairUnsupported<WriteCvtPD2PSZ>;
178defm : X86WriteRes<WriteCvtPH2PS, [ADLPPort00_01, ADLPPort05], 6, [1, 1], 2>;
179defm : X86WriteRes<WriteCvtPH2PSLd, [ADLPPort00_01, ADLPPort02_03_10], 12, [1, 1], 2>;
180defm : X86WriteRes<WriteCvtPH2PSY, [ADLPPort00_01, ADLPPort05], 8, [1, 1], 2>;
181defm : X86WriteRes<WriteCvtPH2PSYLd, [ADLPPort00_01, ADLPPort02_03_10], 12, [1, 1], 2>;
182defm : X86WriteResPairUnsupported<WriteCvtPH2PSZ>;
183defm : ADLPWriteResPair<WriteCvtPS2I, [ADLPPort00_01], 4, [1], 1, 7>;
184defm : ADLPWriteResPair<WriteCvtPS2IY, [ADLPPort00_01], 4, [1], 1, 8>;
185defm : X86WriteResPairUnsupported<WriteCvtPS2IZ>;
186defm : X86WriteRes<WriteCvtPS2PD, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2>;
187defm : X86WriteRes<WriteCvtPS2PDLd, [ADLPPort00_01, ADLPPort02_03_10], 11, [1, 1], 2>;
188defm : X86WriteRes<WriteCvtPS2PDY, [ADLPPort00_01, ADLPPort05], 7, [1, 1], 2>;
189defm : X86WriteRes<WriteCvtPS2PDYLd, [ADLPPort00_01, ADLPPort02_03_10], 12, [1, 1], 2>;
190defm : X86WriteResPairUnsupported<WriteCvtPS2PDZ>;
191defm : X86WriteRes<WriteCvtPS2PH, [ADLPPort00_01, ADLPPort05], 6, [1, 1], 2>;
192defm : X86WriteRes<WriteCvtPS2PHSt, [ADLPPort00_01, ADLPPort04_09, ADLPPort07_08], 12, [1, 1, 1], 3>;
193defm : X86WriteRes<WriteCvtPS2PHY, [ADLPPort00_01, ADLPPort05], 8, [1, 1], 2>;
194defm : X86WriteRes<WriteCvtPS2PHYSt, [ADLPPort00_01, ADLPPort04_09, ADLPPort07_08], 12, [1, 1, 1], 3>;
195defm : X86WriteResUnsupported<WriteCvtPS2PHZ>;
196defm : X86WriteResUnsupported<WriteCvtPS2PHZSt>;
197defm : ADLPWriteResPair<WriteCvtSD2I, [ADLPPort00, ADLPPort00_01], 7, [1, 1], 2>;
198defm : ADLPWriteResPair<WriteCvtSD2SS, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2, 7>;
199defm : ADLPWriteResPair<WriteCvtSS2I, [ADLPPort00, ADLPPort00_01], 7, [1, 1], 2>;
200defm : X86WriteRes<WriteCvtSS2SD, [ADLPPort00_01, ADLPPort05], 5, [1, 1], 2>;
201defm : X86WriteRes<WriteCvtSS2SDLd, [ADLPPort00_01, ADLPPort02_03_10], 11, [1, 1], 2>;
202defm : ADLPWriteResPair<WriteDPPD, [ADLPPort00_01, ADLPPort01_05], 9, [2, 1], 3, 7>;
203defm : ADLPWriteResPair<WriteDPPS, [ADLPPort00_01, ADLPPort00_06, ADLPPort01_05, ADLPPort05], 14, [2, 1, 2, 1], 6, 7>;
204defm : ADLPWriteResPair<WriteDPPSY, [ADLPPort00_01, ADLPPort00_06, ADLPPort01_05, ADLPPort05], 14, [2, 1, 2, 1], 6, 8>;
205defm : ADLPWriteResPair<WriteDiv16, [ADLPPort00_01_05_06_11, ADLPPort01], 16, [1, 3], 4, 4>;
206defm : ADLPWriteResPair<WriteDiv32, [ADLPPort00_01_05_06_11, ADLPPort01], 15, [1, 3], 4, 4>;
207defm : ADLPWriteResPair<WriteDiv64, [ADLPPort01], 18, [3], 3>;
208defm : X86WriteRes<WriteDiv8, [ADLPPort01], 17, [3], 3>;
209defm : X86WriteRes<WriteDiv8Ld, [ADLPPort01], 22, [3], 3>;
210defm : X86WriteRes<WriteEMMS, [ADLPPort00, ADLPPort00_05, ADLPPort00_06], 10, [1, 8, 1], 10>;
211def : WriteRes<WriteFAdd, [ADLPPort05]> {
212  let Latency = 3;
213}
214defm : X86WriteRes<WriteFAddLd, [ADLPPort01_05, ADLPPort02_03_10], 10, [1, 1], 2>;
215defm : ADLPWriteResPair<WriteFAdd64, [ADLPPort01_05], 3, [1], 1, 7>;
216defm : ADLPWriteResPair<WriteFAdd64X, [ADLPPort01_05], 3, [1], 1, 7>;
217defm : ADLPWriteResPair<WriteFAdd64Y, [ADLPPort01_05], 3, [1], 1, 8>;
218defm : X86WriteResPairUnsupported<WriteFAdd64Z>;
219defm : ADLPWriteResPair<WriteFAddX, [ADLPPort01_05], 3, [1], 1, 7>;
220defm : ADLPWriteResPair<WriteFAddY, [ADLPPort01_05], 3, [1], 1, 8>;
221defm : X86WriteResPairUnsupported<WriteFAddZ>;
222defm : ADLPWriteResPair<WriteFBlend, [ADLPPort00_01_05], 1, [1], 1, 7>;
223defm : ADLPWriteResPair<WriteFBlendY, [ADLPPort00_01_05], 1, [1], 1, 8>;
224def : WriteRes<WriteFCMOV, [ADLPPort01]> {
225  let Latency = 3;
226}
227defm : ADLPWriteResPair<WriteFCmp, [ADLPPort00_01], 4, [1], 1, 7>;
228defm : ADLPWriteResPair<WriteFCmp64, [ADLPPort00_01], 4, [1], 1, 7>;
229defm : ADLPWriteResPair<WriteFCmp64X, [ADLPPort00_01], 4, [1], 1, 7>;
230defm : ADLPWriteResPair<WriteFCmp64Y, [ADLPPort00_01], 4, [1], 1, 8>;
231defm : X86WriteResPairUnsupported<WriteFCmp64Z>;
232defm : ADLPWriteResPair<WriteFCmpX, [ADLPPort00_01], 4, [1], 1, 7>;
233defm : ADLPWriteResPair<WriteFCmpY, [ADLPPort00_01], 4, [1], 1, 8>;
234defm : X86WriteResPairUnsupported<WriteFCmpZ>;
235def : WriteRes<WriteFCom, [ADLPPort05]>;
236defm : X86WriteRes<WriteFComLd, [ADLPPort02_03, ADLPPort05], 8, [1, 1], 2>;
237defm : ADLPWriteResPair<WriteFComX, [ADLPPort00], 3, [1]>;
238defm : ADLPWriteResPair<WriteFDiv, [ADLPPort00], 11, [1], 1, 7>;
239defm : ADLPWriteResPair<WriteFDiv64, [ADLPPort00], 14, [1]>;
240defm : ADLPWriteResPair<WriteFDiv64X, [ADLPPort00], 14, [1], 1, 6>;
241defm : ADLPWriteResPair<WriteFDiv64Y, [ADLPPort00], 14, [1], 1, 7>;
242defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
243defm : ADLPWriteResPair<WriteFDivX, [ADLPPort00], 11, [1], 1, 7>;
244defm : ADLPWriteResPair<WriteFDivY, [ADLPPort00], 11, [1], 1, 8>;
245defm : X86WriteResPairUnsupported<WriteFDivZ>;
246defm : ADLPWriteResPair<WriteFHAdd, [ADLPPort01_05, ADLPPort05], 6, [1, 2], 3, 6>;
247defm : ADLPWriteResPair<WriteFHAddY, [ADLPPort01_05, ADLPPort05], 5, [1, 2], 3, 8>;
248def : WriteRes<WriteFLD0, [ADLPPort00_05]>;
249defm : X86WriteRes<WriteFLD1, [ADLPPort00_05], 1, [2], 2>;
250defm : X86WriteRes<WriteFLDC, [ADLPPort00_05], 1, [2], 2>;
251def : WriteRes<WriteFLoad, [ADLPPort02_03_10]> {
252  let Latency = 7;
253}
254def : WriteRes<WriteFLoadX, [ADLPPort02_03_10]> {
255  let Latency = 7;
256}
257def : WriteRes<WriteFLoadY, [ADLPPort02_03_10]> {
258  let Latency = 8;
259}
260defm : ADLPWriteResPair<WriteFLogic, [ADLPPort00_01_05], 1, [1], 1, 7>;
261defm : ADLPWriteResPair<WriteFLogicY, [ADLPPort00_01_05], 1, [1], 1, 8>;
262defm : X86WriteResPairUnsupported<WriteFLogicZ>;
263defm : ADLPWriteResPair<WriteFMA, [ADLPPort00_01], 4, [1], 1, 7>;
264defm : ADLPWriteResPair<WriteFMAX, [ADLPPort00_01], 4, [1], 1, 7>;
265defm : ADLPWriteResPair<WriteFMAY, [ADLPPort00_01], 4, [1], 1, 8>;
266defm : X86WriteResPairUnsupported<WriteFMAZ>;
267def : WriteRes<WriteFMOVMSK, [ADLPPort00]> {
268  let Latency = 3;
269}
270defm : X86WriteRes<WriteFMaskedLoad, [ADLPPort00_01_05, ADLPPort02_03_10], 8, [1, 1], 2>;
271defm : X86WriteRes<WriteFMaskedLoadY, [ADLPPort00_01_05, ADLPPort02_03_10], 9, [1, 1], 2>;
272defm : X86WriteRes<WriteFMaskedStore32, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
273defm : X86WriteRes<WriteFMaskedStore32Y, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
274defm : X86WriteRes<WriteFMaskedStore64, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
275defm : X86WriteRes<WriteFMaskedStore64Y, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
276defm : X86WriteRes<WriteFMoveX, [], 1, [], 0>;
277defm : X86WriteRes<WriteFMoveY, [], 1, [], 0>;
278defm : X86WriteResUnsupported<WriteFMoveZ>;
279defm : ADLPWriteResPair<WriteFMul, [ADLPPort00_01], 4, [1], 1, 7>;
280defm : ADLPWriteResPair<WriteFMul64, [ADLPPort00_01], 4, [1], 1, 7>;
281defm : ADLPWriteResPair<WriteFMul64X, [ADLPPort00_01], 4, [1], 1, 7>;
282defm : ADLPWriteResPair<WriteFMul64Y, [ADLPPort00_01], 4, [1], 1, 8>;
283defm : X86WriteResPairUnsupported<WriteFMul64Z>;
284defm : ADLPWriteResPair<WriteFMulX, [ADLPPort00_01], 4, [1], 1, 7>;
285defm : ADLPWriteResPair<WriteFMulY, [ADLPPort00_01], 4, [1], 1, 8>;
286defm : X86WriteResPairUnsupported<WriteFMulZ>;
287defm : ADLPWriteResPair<WriteFRcp, [ADLPPort00], 4, [1], 1, 7>;
288defm : ADLPWriteResPair<WriteFRcpX, [ADLPPort00], 4, [1], 1, 7>;
289defm : ADLPWriteResPair<WriteFRcpY, [ADLPPort00], 4, [1], 1, 8>;
290defm : X86WriteResPairUnsupported<WriteFRcpZ>;
291defm : ADLPWriteResPair<WriteFRnd, [ADLPPort00_01], 8, [2], 2, 7>;
292defm : ADLPWriteResPair<WriteFRndY, [ADLPPort00_01], 8, [2], 2, 8>;
293defm : X86WriteResPairUnsupported<WriteFRndZ>;
294defm : ADLPWriteResPair<WriteFRsqrt, [ADLPPort00], 4, [1], 1, 7>;
295defm : ADLPWriteResPair<WriteFRsqrtX, [ADLPPort00], 4, [1], 1, 7>;
296defm : ADLPWriteResPair<WriteFRsqrtY, [ADLPPort00], 4, [1], 1, 8>;
297defm : X86WriteResPairUnsupported<WriteFRsqrtZ>;
298defm : ADLPWriteResPair<WriteFShuffle, [ADLPPort05], 1, [1], 1, 7>;
299defm : ADLPWriteResPair<WriteFShuffle256, [ADLPPort05], 3, [1], 1, 8>;
300defm : ADLPWriteResPair<WriteFShuffleY, [ADLPPort05], 1, [1], 1, 8>;
301defm : X86WriteResPairUnsupported<WriteFShuffleZ>;
302def : WriteRes<WriteFSign, [ADLPPort00]>;
303defm : ADLPWriteResPair<WriteFSqrt, [ADLPPort00], 12, [1], 1, 7>;
304defm : ADLPWriteResPair<WriteFSqrt64, [ADLPPort00], 18, [1]>;
305defm : ADLPWriteResPair<WriteFSqrt64X, [ADLPPort00], 18, [1], 1, 6>;
306defm : ADLPWriteResPair<WriteFSqrt64Y, [ADLPPort00], 18, [1], 1, 7>;
307defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
308def : WriteRes<WriteFSqrt80, [ADLPPortInvalid, ADLPPort00]> {
309  let ReleaseAtCycles = [7, 1];
310  let Latency = 21;
311}
312defm : ADLPWriteResPair<WriteFSqrtX, [ADLPPort00], 12, [1], 1, 7>;
313defm : ADLPWriteResPair<WriteFSqrtY, [ADLPPort00], 12, [1], 1, 8>;
314defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
315defm : X86WriteRes<WriteFStore, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
316defm : X86WriteResUnsupported<WriteFStoreNT>;
317defm : X86WriteRes<WriteFStoreNTX, [ADLPPort04_09, ADLPPort07_08], 518, [1, 1], 2>;
318defm : X86WriteRes<WriteFStoreNTY, [ADLPPort04_09, ADLPPort07_08], 542, [1, 1], 2>;
319defm : X86WriteRes<WriteFStoreX, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
320defm : X86WriteRes<WriteFStoreY, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
321defm : ADLPWriteResPair<WriteFTest, [ADLPPort00], 3, [1]>;
322defm : ADLPWriteResPair<WriteFTestY, [ADLPPort00], 5, [1], 1, 6>;
323defm : ADLPWriteResPair<WriteFVarBlend, [ADLPPort00_01_05], 1, [1], 1, 7>;
324defm : ADLPWriteResPair<WriteFVarBlendY, [ADLPPort00_01_05], 3, [3], 3, 7>;
325defm : X86WriteResPairUnsupported<WriteFVarBlendZ>;
326defm : ADLPWriteResPair<WriteFVarShuffle, [ADLPPort05], 1, [1], 1, 7>;
327defm : ADLPWriteResPair<WriteFVarShuffle256, [ADLPPort05], 3, [1], 1, 8>;
328defm : ADLPWriteResPair<WriteFVarShuffleY, [ADLPPort05], 1, [1], 1, 8>;
329defm : X86WriteResPairUnsupported<WriteFVarShuffleZ>;
330def : WriteRes<WriteFence, [ADLPPort00_06]> {
331  let Latency = 2;
332}
333defm : ADLPWriteResPair<WriteIDiv16, [ADLPPort00_01_05_06_11, ADLPPort01], 16, [1, 3], 4, 4>;
334defm : ADLPWriteResPair<WriteIDiv32, [ADLPPort00_01_05_06_11, ADLPPort01], 15, [1, 3], 4, 4>;
335defm : ADLPWriteResPair<WriteIDiv64, [ADLPPort01], 18, [3], 3>;
336defm : X86WriteRes<WriteIDiv8, [ADLPPort01], 17, [3], 3>;
337defm : X86WriteRes<WriteIDiv8Ld, [ADLPPort01], 22, [3], 3>;
338defm : ADLPWriteResPair<WriteIMul16, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01], 5, [2, 1, 1], 4>;
339defm : ADLPWriteResPair<WriteIMul16Imm, [ADLPPort00_01_05_06_11, ADLPPort01], 4, [1, 1], 2>;
340defm : ADLPWriteResPair<WriteIMul16Reg, [ADLPPort01], 3, [1]>;
341defm : ADLPWriteResPair<WriteIMul32, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01], 4, [1, 1, 1], 3>;
342defm : ADLPWriteResPair<WriteIMul32Imm, [ADLPPort01], 3, [1]>;
343defm : ADLPWriteResPair<WriteIMul32Reg, [ADLPPort01], 3, [1]>;
344defm : ADLPWriteResPair<WriteIMul64, [ADLPPort01, ADLPPort05], 4, [1, 1], 2>;
345defm : ADLPWriteResPair<WriteIMul64Imm, [ADLPPort01], 3, [1]>;
346defm : ADLPWriteResPair<WriteIMul64Reg, [ADLPPort01], 3, [1]>;
347defm : ADLPWriteResPair<WriteIMul8, [ADLPPort01], 3, [1]>;
348def : WriteRes<WriteIMulH, []> {
349  let Latency = 3;
350}
351def : WriteRes<WriteIMulHLd, []> {
352  let Latency = 3;
353}
354def : WriteRes<WriteJump, [ADLPPort00_06]>;
355defm : X86WriteRes<WriteJumpLd, [ADLPPort00_06, ADLPPort02_03], 6, [1, 1], 2>;
356def : WriteRes<WriteLAHFSAHF, [ADLPPort00_06]> {
357  let Latency = 3;
358}
359defm : X86WriteRes<WriteLDMXCSR, [ADLPPort00, ADLPPort00_01_05, ADLPPort00_06, ADLPPort02_03_10], 7, [1, 1, 1, 1], 4>;
360def : WriteRes<WriteLEA, [ADLPPort01]>;
361defm : ADLPWriteResPair<WriteLZCNT, [ADLPPort01], 3, [1]>;
362def : WriteRes<WriteLoad, [ADLPPort02_03_10]> {
363  let Latency = 5;
364}
365def : WriteRes<WriteMMXMOVMSK, [ADLPPort00]> {
366  let Latency = 3;
367}
368defm : ADLPWriteResPair<WriteMPSAD, [ADLPPort01_05, ADLPPort05], 4, [1, 1], 2, 7>;
369defm : ADLPWriteResPair<WriteMPSADY, [ADLPPort01_05, ADLPPort05], 4, [1, 1], 2, 8>;
370defm : ADLPWriteResPair<WriteMULX32, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01], 4, [1, 1, 1], 2>;
371defm : ADLPWriteResPair<WriteMULX64, [ADLPPort01, ADLPPort05], 4, [1, 1]>;
372def : WriteRes<WriteMicrocoded, [ADLPPort00_01_05_06]> {
373  let Latency = AlderlakePModel.MaxLatency;
374}
375def : WriteRes<WriteMove, [ADLPPort00_01_05_06_11]>;
376defm : X86WriteRes<WriteNop, [], 1, [], 0>;
377defm : X86WriteRes<WritePCmpEStrI, [ADLPPort00, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01, ADLPPort05], 16, [3, 2, 1, 1, 1], 8>;
378defm : X86WriteRes<WritePCmpEStrILd, [ADLPPort00, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05], 31, [3, 1, 1, 1, 1, 1], 8>;
379defm : X86WriteRes<WritePCmpEStrM, [ADLPPort00, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01, ADLPPort05], 16, [3, 3, 1, 1, 1], 9>;
380defm : X86WriteRes<WritePCmpEStrMLd, [ADLPPort00, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05], 17, [3, 2, 1, 1, 1, 1], 9>;
381defm : ADLPWriteResPair<WritePCmpIStrI, [ADLPPort00], 11, [3], 3, 20>;
382defm : ADLPWriteResPair<WritePCmpIStrM, [ADLPPort00], 11, [3], 3>;
383defm : ADLPWriteResPair<WritePHAdd, [ADLPPort00_05, ADLPPort05], 3, [1, 2], 3, 8>;
384defm : ADLPWriteResPair<WritePHAddX, [ADLPPort00_01_05, ADLPPort01_05], 2, [1, 2], 3, 7>;
385defm : ADLPWriteResPair<WritePHAddY, [ADLPPort00_01_05, ADLPPort01_05], 2, [1, 2], 3, 8>;
386defm : ADLPWriteResPair<WritePHMINPOS, [ADLPPort00], 4, [1], 1, 7>;
387defm : ADLPWriteResPair<WritePMULLD, [ADLPPort00_01], 10, [2], 2, 8>;
388defm : ADLPWriteResPair<WritePMULLDY, [ADLPPort00_01], 10, [2], 2, 8>;
389defm : X86WriteResPairUnsupported<WritePMULLDZ>;
390defm : ADLPWriteResPair<WritePOPCNT, [ADLPPort01], 3, [1]>;
391defm : ADLPWriteResPair<WritePSADBW, [ADLPPort05], 3, [1], 1, 8>;
392defm : ADLPWriteResPair<WritePSADBWX, [ADLPPort05], 3, [1], 1, 7>;
393defm : ADLPWriteResPair<WritePSADBWY, [ADLPPort05], 3, [1], 1, 8>;
394defm : X86WriteResPairUnsupported<WritePSADBWZ>;
395defm : X86WriteRes<WriteRMW, [ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08], 1, [1, 1, 1], 3>;
396defm : X86WriteRes<WriteRotate, [ADLPPort00_01_05_06_11, ADLPPort00_06], 2, [1, 2], 3>;
397defm : X86WriteRes<WriteRotateLd, [ADLPPort00_01_05_06_11, ADLPPort00_06], 12, [1, 2], 3>;
398defm : X86WriteRes<WriteRotateCL, [ADLPPort00_06], 2, [2], 2>;
399defm : X86WriteRes<WriteRotateCLLd, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01], 19, [2, 3, 2], 7>;
400defm : X86WriteRes<WriteSETCC, [ADLPPort00_06], 2, [2], 2>;
401defm : X86WriteRes<WriteSETCCStore, [ADLPPort00_06, ADLPPort04_09, ADLPPort07_08], 13, [2, 1, 1], 4>;
402defm : X86WriteRes<WriteSHDmrcl, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08], 12, [1, 1, 1, 1, 1, 1], 6>;
403defm : X86WriteRes<WriteSHDmri, [ADLPPort00_01_05_06_11, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08], 12, [1, 1, 1, 1, 1], 5>;
404defm : X86WriteRes<WriteSHDrrcl, [ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01], 5, [1, 1, 1], 3>;
405def : WriteRes<WriteSHDrri, [ADLPPort01]> {
406  let Latency = 3;
407}
408defm : X86WriteRes<WriteSTMXCSR, [ADLPPort00, ADLPPort00_06, ADLPPort04_09, ADLPPort07_08], 12, [1, 1, 1, 1], 4>;
409def : WriteRes<WriteShift, [ADLPPort00_06]>;
410def : WriteRes<WriteShiftLd, [ADLPPort00_06]> {
411  let Latency = 12;
412}
413defm : X86WriteRes<WriteShiftCL, [ADLPPort00_06], 2, [2], 2>;
414defm : X86WriteRes<WriteShiftCLLd, [ADLPPort00_06], 12, [2], 2>;
415defm : ADLPWriteResPair<WriteShuffle, [ADLPPort05], 1, [1], 1, 8>;
416defm : ADLPWriteResPair<WriteShuffle256, [ADLPPort05], 3, [1], 1, 8>;
417defm : ADLPWriteResPair<WriteShuffleX, [ADLPPort01_05], 1, [1], 1, 7>;
418defm : ADLPWriteResPair<WriteShuffleY, [ADLPPort01_05], 1, [1], 1, 8>;
419defm : X86WriteResPairUnsupported<WriteShuffleZ>;
420defm : X86WriteRes<WriteStore, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
421defm : X86WriteRes<WriteStoreNT, [ADLPPort04_09, ADLPPort07_08], 512, [1, 1], 2>;
422def : WriteRes<WriteSystem, [ADLPPort00_01_05_06]> {
423  let Latency = AlderlakePModel.MaxLatency;
424}
425defm : ADLPWriteResPair<WriteTZCNT, [ADLPPort01], 3, [1]>;
426defm : ADLPWriteResPair<WriteVPMOV256, [ADLPPort05], 3, [1], 1, 8>;
427defm : ADLPWriteResPair<WriteVarBlend, [ADLPPort00_01_05], 1, [1], 1, 7>;
428defm : ADLPWriteResPair<WriteVarBlendY, [ADLPPort00_01_05], 3, [3], 3, 7>;
429defm : X86WriteResPairUnsupported<WriteVarBlendZ>;
430defm : ADLPWriteResPair<WriteVarShuffle, [ADLPPort00, ADLPPort05], 3, [1, 1], 2, 8>;
431defm : ADLPWriteResPair<WriteVarShuffle256, [ADLPPort05], 3, [1], 1, 8>;
432defm : ADLPWriteResPair<WriteVarShuffleX, [ADLPPort01_05], 1, [1], 1, 7>;
433defm : ADLPWriteResPair<WriteVarShuffleY, [ADLPPort01_05], 1, [1], 1, 8>;
434defm : X86WriteResPairUnsupported<WriteVarShuffleZ>;
435defm : ADLPWriteResPair<WriteVarVecShift, [ADLPPort00_01], 1, [1], 1, 7>;
436defm : ADLPWriteResPair<WriteVarVecShiftY, [ADLPPort00_01], 1, [1], 1, 8>;
437defm : X86WriteResPairUnsupported<WriteVarVecShiftZ>;
438defm : ADLPWriteResPair<WriteVecALU, [ADLPPort00], 1, [1], 1, 8>;
439defm : ADLPWriteResPair<WriteVecALUX, [ADLPPort00_01], 1, [1], 1, 7>;
440defm : ADLPWriteResPair<WriteVecALUY, [ADLPPort00_01], 1, [1], 1, 8>;
441defm : X86WriteResPairUnsupported<WriteVecALUZ>;
442defm : X86WriteRes<WriteVecExtract, [ADLPPort00, ADLPPort01_05], 4, [1, 1], 2>;
443defm : X86WriteRes<WriteVecExtractSt, [ADLPPort01_05, ADLPPort04_09, ADLPPort07_08], 19, [1, 1, 1], 3>;
444defm : ADLPWriteResPair<WriteVecIMul, [ADLPPort00], 5, [1], 1, 8>;
445defm : ADLPWriteResPair<WriteVecIMulX, [ADLPPort00_01], 5, [1], 1, 8>;
446defm : ADLPWriteResPair<WriteVecIMulY, [ADLPPort00_01], 5, [1], 1, 8>;
447defm : X86WriteResPairUnsupported<WriteVecIMulZ>;
448defm : X86WriteRes<WriteVecInsert, [ADLPPort01_05, ADLPPort05], 4, [1, 1], 2>;
449defm : X86WriteRes<WriteVecInsertLd, [ADLPPort01_05, ADLPPort02_03_10], 8, [1, 1], 2>;
450def : WriteRes<WriteVecLoad, [ADLPPort02_03_10]> {
451  let Latency = 7;
452}
453def : WriteRes<WriteVecLoadNT, [ADLPPort02_03_10]> {
454  let Latency = 7;
455}
456def : WriteRes<WriteVecLoadNTY, [ADLPPort02_03_10]> {
457  let Latency = 8;
458}
459def : WriteRes<WriteVecLoadX, [ADLPPort02_03_10]> {
460  let Latency = 7;
461}
462def : WriteRes<WriteVecLoadY, [ADLPPort02_03_10]> {
463  let Latency = 8;
464}
465defm : ADLPWriteResPair<WriteVecLogic, [ADLPPort00_05], 1, [1], 1, 8>;
466defm : ADLPWriteResPair<WriteVecLogicX, [ADLPPort00_01_05], 1, [1], 1, 7>;
467defm : ADLPWriteResPair<WriteVecLogicY, [ADLPPort00_01_05], 1, [1], 1, 8>;
468defm : X86WriteResPairUnsupported<WriteVecLogicZ>;
469def : WriteRes<WriteVecMOVMSK, [ADLPPort00]> {
470  let Latency = 3;
471}
472def : WriteRes<WriteVecMOVMSKY, [ADLPPort00]> {
473  let Latency = 4;
474}
475defm : X86WriteRes<WriteVecMaskedGatherWriteback, [], 5, [], 0>;
476defm : X86WriteRes<WriteVecMaskedLoad, [ADLPPort00_01_05, ADLPPort02_03_10], 8, [1, 1], 2>;
477defm : X86WriteRes<WriteVecMaskedLoadY, [ADLPPort00_01_05, ADLPPort02_03_10], 9, [1, 1], 2>;
478defm : X86WriteRes<WriteVecMaskedStore32, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
479defm : X86WriteRes<WriteVecMaskedStore32Y, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
480defm : X86WriteRes<WriteVecMaskedStore64, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
481defm : X86WriteRes<WriteVecMaskedStore64Y, [ADLPPort00, ADLPPort04_09, ADLPPort07_08], 14, [1, 1, 1], 3>;
482def : WriteRes<WriteVecMove, [ADLPPort00_05]>;
483def : WriteRes<WriteVecMoveFromGpr, [ADLPPort05]> {
484  let Latency = 3;
485}
486def : WriteRes<WriteVecMoveToGpr, [ADLPPort00]> {
487  let Latency = 3;
488}
489defm : X86WriteRes<WriteVecMoveX, [], 1, [], 0>;
490defm : X86WriteRes<WriteVecMoveY, [], 1, [], 0>;
491defm : X86WriteResUnsupported<WriteVecMoveZ>;
492defm : ADLPWriteResPair<WriteVecShift, [ADLPPort00], 1, [1], 1, 8>;
493def : WriteRes<WriteVecShiftImm, [ADLPPort00]>;
494def : WriteRes<WriteVecShiftImmX, [ADLPPort00_01]>;
495defm : X86WriteResUnsupported<WriteVecShiftImmXLd>;
496def : WriteRes<WriteVecShiftImmY, [ADLPPort00_01]>;
497defm : X86WriteResUnsupported<WriteVecShiftImmYLd>;
498defm : X86WriteResPairUnsupported<WriteVecShiftImmZ>;
499defm : X86WriteRes<WriteVecShiftX, [ADLPPort00_01, ADLPPort01_05], 2, [1, 1], 2>;
500defm : X86WriteRes<WriteVecShiftXLd, [ADLPPort00_01, ADLPPort02_03_10], 8, [1, 1], 2>;
501defm : X86WriteRes<WriteVecShiftY, [ADLPPort00_01, ADLPPort05], 4, [1, 1], 2>;
502defm : X86WriteRes<WriteVecShiftYLd, [ADLPPort00_01, ADLPPort02_03_10], 9, [1, 1], 2>;
503defm : X86WriteResPairUnsupported<WriteVecShiftZ>;
504defm : X86WriteRes<WriteVecStore, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
505defm : X86WriteRes<WriteVecStoreNT, [ADLPPort04_09, ADLPPort07_08], 511, [1, 1], 2>;
506defm : X86WriteRes<WriteVecStoreNTY, [ADLPPort04_09, ADLPPort07_08], 507, [1, 1], 2>;
507defm : X86WriteRes<WriteVecStoreX, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
508defm : X86WriteRes<WriteVecStoreY, [ADLPPort04_09, ADLPPort07_08], 12, [1, 1], 2>;
509defm : ADLPWriteResPair<WriteVecTest, [ADLPPort00, ADLPPort05], 4, [1, 1], 2>;
510defm : ADLPWriteResPair<WriteVecTestY, [ADLPPort00, ADLPPort05], 6, [1, 1], 2, 6>;
511defm : X86WriteRes<WriteXCHG, [ADLPPort00_01_05_06_11], 2, [3], 3>;
512def : WriteRes<WriteZero, []>;
513
514// Infered SchedWriteRes and InstRW definition.
515
516def ADLPWriteResGroup0 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort02_03, ADLPPort02_03_07, ADLPPort04]> {
517  let Latency = 7;
518  let NumMicroOps = 3;
519}
520def : InstRW<[ADLPWriteResGroup0], (instregex "^AA(D|N)D64mr$",
521                                              "^A(X?)OR64mr$")>;
522
523def ADLPWriteResGroup1 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
524  let ReleaseAtCycles = [2, 1, 1, 1, 1];
525  let Latency = 12;
526  let NumMicroOps = 6;
527}
528def : InstRW<[ADLPWriteResGroup1, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)(16|32|64)mr$")>;
529
530def ADLPWriteResGroup2 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10]> {
531  let Latency = 6;
532  let NumMicroOps = 2;
533}
534def : InstRW<[ADLPWriteResGroup2], (instregex "^JMP(16|32|64)m((_NT)?)$",
535                                              "^RET(16|32)$",
536                                              "^RORX(32|64)mi$")>;
537def : InstRW<[ADLPWriteResGroup2, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)(8|16|32|64)rm$",
538                                                                                                                                         "^AD(C|O)X(32|64)rm$")>;
539
540def ADLPWriteResGroup3 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
541  let Latency = 13;
542  let NumMicroOps = 5;
543}
544def : InstRW<[ADLPWriteResGroup3], (instregex "^(ADC|SBB)8mi(8?)$")>;
545
546def ADLPWriteResGroup4 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
547  let ReleaseAtCycles = [2, 1, 1, 1, 1];
548  let Latency = 13;
549  let NumMicroOps = 6;
550}
551def : InstRW<[ADLPWriteResGroup4, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)8mr$")>;
552
553def ADLPWriteResGroup5 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
554  let Latency = 6;
555  let NumMicroOps = 2;
556}
557def : InstRW<[ADLPWriteResGroup5], (instregex "^CMP(8|16|32)mi$",
558                                              "^CMP(8|16|32|64)mi8$",
559                                              "^MOV(8|16)rm$",
560                                              "^POP(16|32)r((mr)?)$")>;
561def : InstRW<[ADLPWriteResGroup5], (instrs CMP64mi32,
562                                           MOV8rm_NOREX,
563                                           MOVZX16rm8)>;
564def : InstRW<[ADLPWriteResGroup5, ReadAfterLd], (instregex "^(ADD|CMP|SUB)(8|16|32|64)rm$",
565                                                           "^AND(8|16|32)rm$",
566                                                           "^(X?)OR(8|16|32)rm$")>;
567def : InstRW<[ADLPWriteResGroup5, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^CMP(8|16|32|64)mr$")>;
568
569def ADLPWriteResGroup6 : SchedWriteRes<[]> {
570  let NumMicroOps = 0;
571}
572def : InstRW<[ADLPWriteResGroup6], (instregex "^(ADD|SUB)64ri8$",
573                                              "^(DE|IN)C64r$",
574                                              "^MOV64rr((_REV)?)$")>;
575def : InstRW<[ADLPWriteResGroup6], (instrs CLC,
576                                           JMP_2)>;
577
578def ADLPWriteResGroup7 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
579  let Latency = 13;
580  let NumMicroOps = 4;
581}
582def : InstRW<[ADLPWriteResGroup7], (instregex "^A(D|N)D8mi(8?)$",
583                                              "^(DE|IN)C8m$",
584                                              "^N(EG|OT)8m$",
585                                              "^(X?)OR8mi(8?)$",
586                                              "^SUB8mi(8?)$")>;
587def : InstRW<[ADLPWriteResGroup7, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^A(D|N)D8mr$",
588                                                                                                                            "^(X?)OR8mr$")>;
589def : InstRW<[ADLPWriteResGroup7, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instrs SUB8mr)>;
590
591def ADLPWriteResGroup8 : SchedWriteRes<[ADLPPort01_05]> {
592  let Latency = 3;
593}
594def : InstRW<[ADLPWriteResGroup8], (instregex "^(V?)(ADD|SUB)SSrr((_Int)?)$")>;
595
596def ADLPWriteResGroup9 : SchedWriteRes<[ADLPPort02_03, ADLPPort05]> {
597  let Latency = 10;
598  let NumMicroOps = 2;
599}
600def : InstRW<[ADLPWriteResGroup9], (instregex "^ADD_F(32|64)m$",
601                                              "^ILD_F(16|32|64)m$",
602                                              "^SUB(R?)_F(32|64)m$")>;
603
604def ADLPWriteResGroup10 : SchedWriteRes<[ADLPPort02_03, ADLPPort05]> {
605  let ReleaseAtCycles = [1, 2];
606  let Latency = 13;
607  let NumMicroOps = 3;
608}
609def : InstRW<[ADLPWriteResGroup10], (instregex "^ADD_FI(16|32)m$",
610                                               "^SUB(R?)_FI(16|32)m$")>;
611
612def ADLPWriteResGroup11 : SchedWriteRes<[ADLPPort00_01_05_06_11]> {
613  let Latency = 2;
614}
615def : InstRW<[ADLPWriteResGroup11], (instregex "^AND(8|16|32|64)r(r|i8)$",
616                                               "^AND(8|16|32|64)rr_REV$",
617                                               "^(AND|TEST)(32|64)i32$",
618                                               "^(AND|TEST)(8|32)ri$",
619                                               "^(AND|TEST)64ri32$",
620                                               "^(AND|TEST)8i8$",
621                                               "^(X?)OR(8|16|32|64)r(r|i8)$",
622                                               "^(X?)OR(8|16|32|64)rr_REV$",
623                                               "^(X?)OR(32|64)i32$",
624                                               "^(X?)OR(8|32)ri$",
625                                               "^(X?)OR64ri32$",
626                                               "^(X?)OR8i8$",
627                                               "^TEST(8|16|32|64)rr$")>;
628def : InstRW<[ADLPWriteResGroup11], (instrs XOR8rr_NOREX)>;
629
630def ADLPWriteResGroup12 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
631  let Latency = 7;
632  let NumMicroOps = 2;
633}
634def : InstRW<[ADLPWriteResGroup12], (instregex "^TEST(8|16|32)mi$")>;
635def : InstRW<[ADLPWriteResGroup12], (instrs TEST64mi32)>;
636def : InstRW<[ADLPWriteResGroup12, ReadAfterLd], (instregex "^(X?)OR64rm$")>;
637def : InstRW<[ADLPWriteResGroup12, ReadAfterLd], (instrs AND64rm)>;
638def : InstRW<[ADLPWriteResGroup12, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^TEST(8|16|32|64)mr$")>;
639
640def ADLPWriteResGroup13 : SchedWriteRes<[ADLPPort01_05_11, ADLPPort02_03_10]> {
641  let Latency = 7;
642  let NumMicroOps = 2;
643}
644def : InstRW<[ADLPWriteResGroup13, ReadAfterLd], (instregex "^ANDN(32|64)rm$")>;
645
646def ADLPWriteResGroup14 : SchedWriteRes<[ADLPPort01_05_11]> {
647  let Latency = 2;
648}
649def : InstRW<[ADLPWriteResGroup14], (instregex "^ANDN(32|64)rr$")>;
650
651def ADLPWriteResGroup15 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10]> {
652  let ReleaseAtCycles = [5, 2, 1, 1];
653  let Latency = 10;
654  let NumMicroOps = 9;
655}
656def : InstRW<[ADLPWriteResGroup15], (instrs BT64mr)>;
657
658def ADLPWriteResGroup16 : SchedWriteRes<[ADLPPort01]> {
659  let Latency = 3;
660}
661def : InstRW<[ADLPWriteResGroup16], (instregex "^BT((C|R|S)?)64rr$",
662                                               "^P(DEP|EXT)(32|64)rr$")>;
663
664def ADLPWriteResGroup17 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
665  let ReleaseAtCycles = [4, 2, 1, 1, 1, 1];
666  let Latency = 17;
667  let NumMicroOps = 10;
668}
669def : InstRW<[ADLPWriteResGroup17], (instregex "^BT(C|R|S)64mr$")>;
670
671def ADLPWriteResGroup18 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
672  let Latency = 7;
673  let NumMicroOps = 5;
674}
675def : InstRW<[ADLPWriteResGroup18], (instregex "^CALL(16|32|64)m((_NT)?)$")>;
676
677def ADLPWriteResGroup19 : SchedWriteRes<[ADLPPort00_06, ADLPPort04_09, ADLPPort07_08]> {
678  let Latency = 3;
679  let NumMicroOps = 3;
680}
681def : InstRW<[ADLPWriteResGroup19], (instregex "^CALL(16|32|64)r((_NT)?)$")>;
682
683def ADLPWriteResGroup20 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
684  let Latency = 3;
685  let NumMicroOps = 2;
686}
687def : InstRW<[ADLPWriteResGroup20], (instrs CALL64pcrel32,
688                                            MFENCE)>;
689
690def ADLPWriteResGroup21 : SchedWriteRes<[ADLPPort01_05]>;
691def : InstRW<[ADLPWriteResGroup21], (instregex "^C(DQ|WD)E$",
692                                               "^(V?)MOVS(H|L)DUPrr$",
693                                               "^(V?)SHUFP(D|S)rri$",
694                                               "^VMOVS(H|L)DUPYrr$",
695                                               "^VSHUFP(D|S)Yrri$")>;
696def : InstRW<[ADLPWriteResGroup21], (instrs CBW,
697                                            VPBLENDWYrri)>;
698
699def ADLPWriteResGroup22 : SchedWriteRes<[ADLPPort00_06]>;
700def : InstRW<[ADLPWriteResGroup22], (instregex "^C(DQ|QO)$",
701                                               "^(CL|ST)AC$")>;
702
703def ADLPWriteResGroup23 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
704  let Latency = 3;
705  let NumMicroOps = 2;
706}
707def : InstRW<[ADLPWriteResGroup23], (instrs CLD)>;
708
709def ADLPWriteResGroup24 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
710  let Latency = 3;
711  let NumMicroOps = 3;
712}
713def : InstRW<[ADLPWriteResGroup24], (instrs CLDEMOTE)>;
714
715def ADLPWriteResGroup25 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort04_09, ADLPPort07_08]> {
716  let Latency = 2;
717  let NumMicroOps = 4;
718}
719def : InstRW<[ADLPWriteResGroup25], (instrs CLFLUSH)>;
720
721def ADLPWriteResGroup26 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
722  let Latency = 2;
723  let NumMicroOps = 3;
724}
725def : InstRW<[ADLPWriteResGroup26], (instrs CLFLUSHOPT)>;
726
727def ADLPWriteResGroup27 : SchedWriteRes<[ADLPPort00_06, ADLPPort01]> {
728  let ReleaseAtCycles = [2, 1];
729  let Latency = AlderlakePModel.MaxLatency;
730  let NumMicroOps = 3;
731}
732def : InstRW<[ADLPWriteResGroup27], (instrs CLI)>;
733
734def ADLPWriteResGroup28 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort05]> {
735  let ReleaseAtCycles = [6, 1, 3];
736  let Latency = AlderlakePModel.MaxLatency;
737  let NumMicroOps = 10;
738}
739def : InstRW<[ADLPWriteResGroup28], (instrs CLTS)>;
740
741def ADLPWriteResGroup29 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
742  let Latency = 5;
743  let NumMicroOps = 3;
744}
745def : InstRW<[ADLPWriteResGroup29], (instregex "^MOV16o(16|32|64)a$")>;
746def : InstRW<[ADLPWriteResGroup29], (instrs CLWB)>;
747
748def ADLPWriteResGroup30 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
749  let ReleaseAtCycles = [5, 2];
750  let Latency = 6;
751  let NumMicroOps = 7;
752}
753def : InstRW<[ADLPWriteResGroup30], (instregex "^CMPS(B|L|Q|W)$")>;
754
755def ADLPWriteResGroup31 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01_05, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
756  let ReleaseAtCycles = [2, 7, 6, 2, 1, 1, 2, 1];
757  let Latency = 32;
758  let NumMicroOps = 22;
759}
760def : InstRW<[ADLPWriteResGroup31], (instrs CMPXCHG16B)>;
761
762def ADLPWriteResGroup32 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
763  let ReleaseAtCycles = [4, 7, 2, 1, 1, 1];
764  let Latency = 25;
765  let NumMicroOps = 16;
766}
767def : InstRW<[ADLPWriteResGroup32], (instrs CMPXCHG8B)>;
768
769def ADLPWriteResGroup33 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
770  let ReleaseAtCycles = [1, 2, 1, 1, 1];
771  let Latency = 13;
772  let NumMicroOps = 6;
773}
774def : InstRW<[ADLPWriteResGroup33], (instrs CMPXCHG8rm)>;
775
776def ADLPWriteResGroup34 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_06, ADLPPort01, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
777  let ReleaseAtCycles = [2, 1, 10, 6, 1, 5, 1];
778  let Latency = 18;
779  let NumMicroOps = 26;
780}
781def : InstRW<[ADLPWriteResGroup34], (instrs CPUID)>;
782
783def ADLPWriteResGroup35 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort02_03_10]> {
784  let Latency = 26;
785  let NumMicroOps = 3;
786}
787def : InstRW<[ADLPWriteResGroup35], (instregex "^(V?)CVT(T?)SD2SIrm((_Int)?)$")>;
788
789def ADLPWriteResGroup36 : SchedWriteRes<[ADLPPort00_01, ADLPPort02_03_10, ADLPPort05]> {
790  let Latency = 12;
791  let NumMicroOps = 3;
792}
793def : InstRW<[ADLPWriteResGroup36], (instrs CVTSI642SSrm)>;
794def : InstRW<[ADLPWriteResGroup36, ReadAfterVecLd], (instregex "^(V?)CVTSI642SSrm_Int$")>;
795def : InstRW<[ADLPWriteResGroup36, ReadAfterVecLd], (instrs VCVTSI642SSrm)>;
796
797def ADLPWriteResGroup37 : SchedWriteRes<[ADLPPort00_01, ADLPPort05]> {
798  let ReleaseAtCycles = [1, 2];
799  let Latency = 8;
800  let NumMicroOps = 3;
801}
802def : InstRW<[ADLPWriteResGroup37, ReadInt2Fpu], (instrs CVTSI642SSrr)>;
803def : InstRW<[ADLPWriteResGroup37, ReadDefault, ReadInt2Fpu], (instregex "^(V?)CVTSI642SSrr_Int$")>;
804def : InstRW<[ADLPWriteResGroup37, ReadDefault, ReadInt2Fpu], (instrs VCVTSI642SSrr)>;
805
806def ADLPWriteResGroup38 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort05]> {
807  let Latency = 8;
808  let NumMicroOps = 3;
809}
810def : InstRW<[ADLPWriteResGroup38], (instregex "^(V?)CVT(T?)SS2SI64rr_Int$")>;
811def : InstRW<[ADLPWriteResGroup38, ReadDefault], (instregex "^(V?)CVT(T?)SS2SI64rr$")>;
812
813def ADLPWriteResGroup39 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
814  let Latency = 2;
815  let NumMicroOps = 2;
816}
817def : InstRW<[ADLPWriteResGroup39], (instregex "^J(E|R)CXZ$")>;
818def : InstRW<[ADLPWriteResGroup39], (instrs CWD)>;
819
820def ADLPWriteResGroup40 : SchedWriteRes<[ADLPPort00_01_05_06]>;
821def : InstRW<[ADLPWriteResGroup40], (instregex "^(LD|ST)_Frr$",
822                                               "^MOV16s(m|r)$",
823                                               "^MOV(32|64)sr$")>;
824def : InstRW<[ADLPWriteResGroup40], (instrs DEC16r_alt,
825                                            SALC,
826                                            ST_FPrr,
827                                            SYSCALL)>;
828
829def ADLPWriteResGroup41 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
830  let Latency = 7;
831}
832def : InstRW<[ADLPWriteResGroup41], (instrs DEC32r_alt)>;
833
834def ADLPWriteResGroup42 : SchedWriteRes<[ADLPPort00, ADLPPort02_03]> {
835  let Latency = 27;
836  let NumMicroOps = 2;
837}
838def : InstRW<[ADLPWriteResGroup42], (instregex "^DIVR_F(32|64)m$")>;
839
840def ADLPWriteResGroup43 : SchedWriteRes<[ADLPPort00, ADLPPort02_03, ADLPPort05]> {
841  let Latency = 30;
842  let NumMicroOps = 3;
843}
844def : InstRW<[ADLPWriteResGroup43], (instregex "^DIVR_FI(16|32)m$")>;
845
846def ADLPWriteResGroup44 : SchedWriteRes<[ADLPPort00]> {
847  let Latency = 15;
848}
849def : InstRW<[ADLPWriteResGroup44], (instregex "^DIVR_F(P?)rST0$")>;
850def : InstRW<[ADLPWriteResGroup44], (instrs DIVR_FST0r)>;
851
852def ADLPWriteResGroup45 : SchedWriteRes<[ADLPPort00, ADLPPort02_03_10]> {
853  let Latency = 20;
854  let NumMicroOps = 2;
855}
856def : InstRW<[ADLPWriteResGroup45, ReadAfterVecLd], (instregex "^(V?)DIVSDrm_Int$")>;
857
858def ADLPWriteResGroup46 : SchedWriteRes<[ADLPPort00, ADLPPort02_03]> {
859  let Latency = 22;
860  let NumMicroOps = 2;
861}
862def : InstRW<[ADLPWriteResGroup46], (instregex "^DIV_F(32|64)m$")>;
863
864def ADLPWriteResGroup47 : SchedWriteRes<[ADLPPort00, ADLPPort02_03, ADLPPort05]> {
865  let Latency = 25;
866  let NumMicroOps = 3;
867}
868def : InstRW<[ADLPWriteResGroup47], (instregex "^DIV_FI(16|32)m$")>;
869
870def ADLPWriteResGroup48 : SchedWriteRes<[ADLPPort00]> {
871  let Latency = 20;
872}
873def : InstRW<[ADLPWriteResGroup48], (instregex "^DIV_F(P?)rST0$")>;
874def : InstRW<[ADLPWriteResGroup48], (instrs DIV_FST0r)>;
875
876def ADLPWriteResGroup49 : SchedWriteRes<[ADLPPort00, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
877  let ReleaseAtCycles = [2, 21, 2, 14, 4, 9, 5];
878  let Latency = 126;
879  let NumMicroOps = 57;
880}
881def : InstRW<[ADLPWriteResGroup49], (instrs ENTER)>;
882
883def ADLPWriteResGroup50 : SchedWriteRes<[ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
884  let Latency = 12;
885  let NumMicroOps = 3;
886}
887def : InstRW<[ADLPWriteResGroup50], (instregex "^(V?)EXTRACTPSmri$")>;
888def : InstRW<[ADLPWriteResGroup50], (instrs SMSW16m)>;
889
890def ADLPWriteResGroup51 : SchedWriteRes<[ADLPPort00, ADLPPort05]> {
891  let Latency = 4;
892  let NumMicroOps = 2;
893}
894def : InstRW<[ADLPWriteResGroup51], (instregex "^(V?)EXTRACTPSrri$")>;
895def : InstRW<[ADLPWriteResGroup51], (instrs MMX_PEXTRWrri)>;
896
897def ADLPWriteResGroup52 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort02_03, ADLPPort02_03_07, ADLPPort04, ADLPPort06]> {
898  let Latency = 7;
899  let NumMicroOps = 5;
900}
901def : InstRW<[ADLPWriteResGroup52], (instrs FARCALL64m)>;
902
903def ADLPWriteResGroup53 : SchedWriteRes<[ADLPPort02_03, ADLPPort06]> {
904  let Latency = 6;
905  let NumMicroOps = 2;
906}
907def : InstRW<[ADLPWriteResGroup53], (instrs FARJMP64m,
908                                            JMP64m_REX)>;
909
910def ADLPWriteResGroup54 : SchedWriteRes<[ADLPPort02_03_07, ADLPPort04]> {
911  let NumMicroOps = 2;
912}
913def : InstRW<[ADLPWriteResGroup54], (instregex "^(V?)MASKMOVDQU((64)?)$",
914                                               "^ST_FP(32|64|80)m$")>;
915def : InstRW<[ADLPWriteResGroup54], (instrs FBSTPm,
916                                            VMPTRSTm)>;
917
918def ADLPWriteResGroup55 : SchedWriteRes<[ADLPPort00_05]> {
919  let ReleaseAtCycles = [2];
920  let Latency = 2;
921  let NumMicroOps = 2;
922}
923def : InstRW<[ADLPWriteResGroup55], (instrs FDECSTP)>;
924
925def ADLPWriteResGroup56 : SchedWriteRes<[ADLPPort02_03, ADLPPort05]> {
926  let ReleaseAtCycles = [1, 2];
927  let Latency = 11;
928  let NumMicroOps = 3;
929}
930def : InstRW<[ADLPWriteResGroup56], (instregex "^FICOM(P?)(16|32)m$")>;
931
932def ADLPWriteResGroup57 : SchedWriteRes<[ADLPPort00_05]>;
933def : InstRW<[ADLPWriteResGroup57], (instregex "^MMX_P(ADD|SUB)(B|D|Q|W)rr$")>;
934def : InstRW<[ADLPWriteResGroup57], (instrs FINCSTP,
935                                            FNOP)>;
936
937def ADLPWriteResGroup58 : SchedWriteRes<[ADLPPort00, ADLPPort00_05, ADLPPort02_03]> {
938  let Latency = 7;
939  let NumMicroOps = 3;
940}
941def : InstRW<[ADLPWriteResGroup58], (instrs FLDCW16m)>;
942
943def ADLPWriteResGroup59 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06, ADLPPort00_05, ADLPPort00_06, ADLPPort02_03]> {
944  let ReleaseAtCycles = [2, 39, 5, 10, 8];
945  let Latency = 62;
946  let NumMicroOps = 64;
947}
948def : InstRW<[ADLPWriteResGroup59], (instrs FLDENVm)>;
949
950def ADLPWriteResGroup60 : SchedWriteRes<[ADLPPort00_01_05_06]> {
951  let ReleaseAtCycles = [4];
952  let Latency = 4;
953  let NumMicroOps = 4;
954}
955def : InstRW<[ADLPWriteResGroup60], (instrs FNCLEX)>;
956
957def ADLPWriteResGroup61 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort00_05, ADLPPort05]> {
958  let ReleaseAtCycles = [6, 3, 6];
959  let Latency = 75;
960  let NumMicroOps = 15;
961}
962def : InstRW<[ADLPWriteResGroup61], (instrs FNINIT)>;
963
964def ADLPWriteResGroup62 : SchedWriteRes<[ADLPPort02_03_07, ADLPPort04, ADLPPort06]> {
965  let Latency = 2;
966  let NumMicroOps = 3;
967}
968def : InstRW<[ADLPWriteResGroup62], (instrs FNSTCW16m)>;
969
970def ADLPWriteResGroup63 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06]> {
971  let Latency = 3;
972  let NumMicroOps = 2;
973}
974def : InstRW<[ADLPWriteResGroup63], (instrs FNSTSW16r)>;
975
976def ADLPWriteResGroup64 : SchedWriteRes<[ADLPPort00, ADLPPort02_03_07, ADLPPort04]> {
977  let Latency = 3;
978  let NumMicroOps = 3;
979}
980def : InstRW<[ADLPWriteResGroup64], (instrs FNSTSWm)>;
981
982def ADLPWriteResGroup65 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06, ADLPPort00_06, ADLPPort01, ADLPPort02_03_07, ADLPPort04, ADLPPort05, ADLPPort06]> {
983  let ReleaseAtCycles = [9, 30, 21, 1, 11, 11, 16, 1];
984  let Latency = 106;
985  let NumMicroOps = 100;
986}
987def : InstRW<[ADLPWriteResGroup65], (instrs FSTENVm)>;
988
989def ADLPWriteResGroup66 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06, ADLPPort00_05, ADLPPort00_06, ADLPPort01_05, ADLPPort02_03, ADLPPort06]> {
990  let ReleaseAtCycles = [4, 47, 1, 2, 1, 33, 2];
991  let Latency = 63;
992  let NumMicroOps = 90;
993}
994def : InstRW<[ADLPWriteResGroup66], (instrs FXRSTOR)>;
995
996def ADLPWriteResGroup67 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06, ADLPPort00_05, ADLPPort00_06, ADLPPort01_05, ADLPPort02_03, ADLPPort06]> {
997  let ReleaseAtCycles = [4, 45, 1, 2, 1, 31, 4];
998  let Latency = 63;
999  let NumMicroOps = 88;
1000}
1001def : InstRW<[ADLPWriteResGroup67], (instrs FXRSTOR64)>;
1002
1003def ADLPWriteResGroup68 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1004  let ReleaseAtCycles = [2, 5, 10, 10, 2, 38, 5, 38];
1005  let Latency = AlderlakePModel.MaxLatency;
1006  let NumMicroOps = 110;
1007}
1008def : InstRW<[ADLPWriteResGroup68], (instregex "^FXSAVE((64)?)$")>;
1009
1010def ADLPWriteResGroup69 : SchedWriteRes<[ADLPPort00_01, ADLPPort02_03_10]> {
1011  let Latency = 12;
1012  let NumMicroOps = 2;
1013}
1014def : InstRW<[ADLPWriteResGroup69, ReadAfterVecXLd], (instregex "^(V?)GF2P8AFFINE((INV)?)QBrmi$",
1015                                                                "^(V?)GF2P8MULBrm$")>;
1016def : InstRW<[ADLPWriteResGroup69, ReadAfterVecYLd], (instregex "^VGF2P8AFFINE((INV)?)QBYrmi$")>;
1017def : InstRW<[ADLPWriteResGroup69, ReadAfterVecYLd], (instrs VGF2P8MULBYrm)>;
1018
1019def ADLPWriteResGroup70 : SchedWriteRes<[ADLPPort00_01]> {
1020  let Latency = 5;
1021}
1022def : InstRW<[ADLPWriteResGroup70], (instregex "^(V?)GF2P8MULBrr$")>;
1023def : InstRW<[ADLPWriteResGroup70], (instrs VGF2P8MULBYrr)>;
1024
1025def ADLPWriteResGroup71 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1026  let ReleaseAtCycles = [7, 5, 26, 19, 2, 7, 21];
1027  let Latency = 35;
1028  let NumMicroOps = 87;
1029}
1030def : InstRW<[ADLPWriteResGroup71], (instrs IN16ri)>;
1031
1032def ADLPWriteResGroup72 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1033  let ReleaseAtCycles = [7, 1, 4, 26, 19, 3, 7, 20];
1034  let Latency = 35;
1035  let NumMicroOps = 87;
1036}
1037def : InstRW<[ADLPWriteResGroup72], (instrs IN16rr)>;
1038
1039def ADLPWriteResGroup73 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1040  let ReleaseAtCycles = [7, 6, 28, 21, 2, 10, 20];
1041  let Latency = 35;
1042  let NumMicroOps = 94;
1043}
1044def : InstRW<[ADLPWriteResGroup73], (instrs IN32ri)>;
1045
1046def ADLPWriteResGroup74 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1047  let ReleaseAtCycles = [7, 9, 28, 21, 2, 11, 21];
1048  let NumMicroOps = 99;
1049}
1050def : InstRW<[ADLPWriteResGroup74], (instrs IN32rr)>;
1051
1052def ADLPWriteResGroup75 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1053  let ReleaseAtCycles = [7, 6, 25, 19, 2, 8, 20];
1054  let Latency = 35;
1055  let NumMicroOps = 87;
1056}
1057def : InstRW<[ADLPWriteResGroup75], (instrs IN8ri)>;
1058
1059def ADLPWriteResGroup76 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort05]> {
1060  let ReleaseAtCycles = [7, 6, 25, 19, 2, 7, 20];
1061  let Latency = 35;
1062  let NumMicroOps = 86;
1063}
1064def : InstRW<[ADLPWriteResGroup76], (instrs IN8rr)>;
1065
1066def ADLPWriteResGroup77 : SchedWriteRes<[ADLPPort00_06]> {
1067  let NumMicroOps = 4;
1068}
1069def : InstRW<[ADLPWriteResGroup77], (instrs INC16r_alt)>;
1070
1071def ADLPWriteResGroup78 : SchedWriteRes<[ADLPPort02_03_10]> {
1072  let Latency = 7;
1073}
1074def : InstRW<[ADLPWriteResGroup78], (instregex "^(V?)MOV(D|SH|SL)DUPrm$",
1075                                               "^VPBROADCAST(D|Q)rm$")>;
1076def : InstRW<[ADLPWriteResGroup78], (instrs INC32r_alt,
1077                                            VBROADCASTSSrm)>;
1078
1079def ADLPWriteResGroup79 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1080  let ReleaseAtCycles = [7, 6, 24, 17, 8, 1, 19, 1];
1081  let Latency = 20;
1082  let NumMicroOps = 83;
1083}
1084def : InstRW<[ADLPWriteResGroup79], (instrs INSB)>;
1085
1086def ADLPWriteResGroup80 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1087  let ReleaseAtCycles = [7, 1, 5, 1, 27, 17, 11, 1, 21, 1];
1088  let Latency = 20;
1089  let NumMicroOps = 92;
1090}
1091def : InstRW<[ADLPWriteResGroup80], (instrs INSL)>;
1092
1093def ADLPWriteResGroup81 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1094  let ReleaseAtCycles = [7, 1, 4, 1, 25, 17, 1, 9, 1, 19, 1];
1095  let Latency = 20;
1096  let NumMicroOps = 86;
1097}
1098def : InstRW<[ADLPWriteResGroup81], (instrs INSW)>;
1099
1100def ADLPWriteResGroup82 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1101  let ReleaseAtCycles = [5, 4, 8, 6, 2, 5, 7, 5];
1102  let Latency = AlderlakePModel.MaxLatency;
1103  let NumMicroOps = 42;
1104}
1105def : InstRW<[ADLPWriteResGroup82], (instrs INVLPG)>;
1106
1107def ADLPWriteResGroup83 : SchedWriteRes<[ADLPPort02_03_07, ADLPPort04, ADLPPort05]> {
1108  let Latency = 4;
1109  let NumMicroOps = 3;
1110}
1111def : InstRW<[ADLPWriteResGroup83], (instregex "^IST(T?)_FP(16|32|64)m$",
1112                                               "^IST_F(16|32)m$")>;
1113
1114def ADLPWriteResGroup84 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort00_06]> {
1115  let Latency = 2;
1116  let NumMicroOps = 2;
1117}
1118def : InstRW<[ADLPWriteResGroup84], (instrs JCXZ)>;
1119
1120def ADLPWriteResGroup85 : SchedWriteRes<[ADLPPort06]>;
1121def : InstRW<[ADLPWriteResGroup85], (instrs JMP64r_REX)>;
1122
1123def ADLPWriteResGroup86 : SchedWriteRes<[]> {
1124  let Latency = 0;
1125  let NumMicroOps = 0;
1126}
1127def : InstRW<[ADLPWriteResGroup86], (instregex "^JMP_(1|4)$")>;
1128def : InstRW<[ADLPWriteResGroup86], (instrs VZEROUPPER)>;
1129
1130def ADLPWriteResGroup87 : SchedWriteRes<[ADLPPort00, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1131  let ReleaseAtCycles = [8, 2, 14, 3, 1];
1132  let Latency = 198;
1133  let NumMicroOps = 81;
1134}
1135def : InstRW<[ADLPWriteResGroup87], (instrs LAR16rm)>;
1136
1137def ADLPWriteResGroup88 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort05]> {
1138  let ReleaseAtCycles = [1, 3, 1, 8, 5, 1, 2, 1];
1139  let Latency = 66;
1140  let NumMicroOps = 22;
1141}
1142def : InstRW<[ADLPWriteResGroup88], (instrs LAR16rr)>;
1143
1144def ADLPWriteResGroup89 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1145  let ReleaseAtCycles = [1, 2, 2, 9, 5, 3, 1];
1146  let Latency = 71;
1147  let NumMicroOps = 85;
1148}
1149def : InstRW<[ADLPWriteResGroup89], (instrs LAR32rm)>;
1150
1151def ADLPWriteResGroup90 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort05]> {
1152  let ReleaseAtCycles = [1, 3, 1, 8, 5, 1, 2, 1];
1153  let Latency = 65;
1154  let NumMicroOps = 22;
1155}
1156def : InstRW<[ADLPWriteResGroup90], (instregex "^LAR(32|64)rr$")>;
1157
1158def ADLPWriteResGroup91 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1159  let ReleaseAtCycles = [1, 2, 2, 9, 5, 3, 1];
1160  let Latency = 71;
1161  let NumMicroOps = 87;
1162}
1163def : InstRW<[ADLPWriteResGroup91], (instrs LAR64rm)>;
1164
1165def ADLPWriteResGroup92 : SchedWriteRes<[ADLPPort02_03]> {
1166  let Latency = 7;
1167}
1168def : InstRW<[ADLPWriteResGroup92], (instregex "^LD_F(32|64|80)m$")>;
1169
1170def ADLPWriteResGroup93 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01]> {
1171  let Latency = 2;
1172  let NumMicroOps = 2;
1173}
1174def : InstRW<[ADLPWriteResGroup93], (instrs LEA16r)>;
1175
1176def ADLPWriteResGroup94 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
1177  let ReleaseAtCycles = [3, 1];
1178  let Latency = 6;
1179  let NumMicroOps = 4;
1180}
1181def : InstRW<[ADLPWriteResGroup94], (instregex "^LODS(B|W)$",
1182                                               "^SCAS(B|L|Q|W)$")>;
1183def : InstRW<[ADLPWriteResGroup94], (instrs LEAVE)>;
1184
1185def ADLPWriteResGroup95 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
1186  let ReleaseAtCycles = [2, 1];
1187  let Latency = 6;
1188  let NumMicroOps = 3;
1189}
1190def : InstRW<[ADLPWriteResGroup95], (instrs LEAVE64)>;
1191
1192def ADLPWriteResGroup96 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1193  let ReleaseAtCycles = [1, 2, 4, 3, 2, 1, 1];
1194  let Latency = AlderlakePModel.MaxLatency;
1195  let NumMicroOps = 14;
1196}
1197def : InstRW<[ADLPWriteResGroup96], (instrs LGDT64m)>;
1198
1199def ADLPWriteResGroup97 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1200  let ReleaseAtCycles = [1, 1, 5, 3, 2, 1, 1];
1201  let Latency = AlderlakePModel.MaxLatency;
1202  let NumMicroOps = 14;
1203}
1204def : InstRW<[ADLPWriteResGroup97], (instrs LIDT64m)>;
1205
1206def ADLPWriteResGroup98 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1207  let ReleaseAtCycles = [5, 3, 2, 1, 1];
1208  let Latency = AlderlakePModel.MaxLatency;
1209  let NumMicroOps = 12;
1210}
1211def : InstRW<[ADLPWriteResGroup98], (instrs LLDT16m)>;
1212
1213def ADLPWriteResGroup99 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1214  let ReleaseAtCycles = [1, 4, 3, 1, 1, 1];
1215  let Latency = AlderlakePModel.MaxLatency;
1216  let NumMicroOps = 11;
1217}
1218def : InstRW<[ADLPWriteResGroup99], (instrs LLDT16r)>;
1219
1220def ADLPWriteResGroup100 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1221  let ReleaseAtCycles = [1, 1, 2, 8, 3, 1, 2, 7, 2];
1222  let Latency = AlderlakePModel.MaxLatency;
1223  let NumMicroOps = 27;
1224}
1225def : InstRW<[ADLPWriteResGroup100], (instrs LMSW16m)>;
1226
1227def ADLPWriteResGroup101 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1228  let ReleaseAtCycles = [5, 7, 1, 2, 5, 2];
1229  let Latency = AlderlakePModel.MaxLatency;
1230  let NumMicroOps = 22;
1231}
1232def : InstRW<[ADLPWriteResGroup101], (instrs LMSW16r)>;
1233
1234def ADLPWriteResGroup102 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
1235  let ReleaseAtCycles = [2, 1];
1236  let Latency = 5;
1237  let NumMicroOps = 3;
1238}
1239def : InstRW<[ADLPWriteResGroup102], (instregex "^LODS(L|Q)$")>;
1240
1241def ADLPWriteResGroup103 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1242  let ReleaseAtCycles = [2, 4, 1];
1243  let Latency = 3;
1244  let NumMicroOps = 7;
1245}
1246def : InstRW<[ADLPWriteResGroup103], (instrs LOOP)>;
1247
1248def ADLPWriteResGroup104 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1249  let ReleaseAtCycles = [4, 6, 1];
1250  let Latency = 3;
1251  let NumMicroOps = 11;
1252}
1253def : InstRW<[ADLPWriteResGroup104], (instrs LOOPE)>;
1254
1255def ADLPWriteResGroup105 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1256  let ReleaseAtCycles = [4, 6, 1];
1257  let Latency = 2;
1258  let NumMicroOps = 11;
1259}
1260def : InstRW<[ADLPWriteResGroup105], (instrs LOOPNE)>;
1261
1262def ADLPWriteResGroup106 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort02_03, ADLPPort06]> {
1263  let Latency = 7;
1264  let NumMicroOps = 3;
1265}
1266def : InstRW<[ADLPWriteResGroup106], (instrs LRET64)>;
1267
1268def ADLPWriteResGroup107 : SchedWriteRes<[ADLPPort00, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1269  let ReleaseAtCycles = [1, 5, 3, 3, 1];
1270  let Latency = 70;
1271  let NumMicroOps = 13;
1272}
1273def : InstRW<[ADLPWriteResGroup107], (instregex "^LSL(16|32|64)rm$")>;
1274
1275def ADLPWriteResGroup108 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1276  let ReleaseAtCycles = [1, 4, 4, 3, 2, 1];
1277  let Latency = 63;
1278  let NumMicroOps = 15;
1279}
1280def : InstRW<[ADLPWriteResGroup108], (instregex "^LSL(16|32|64)rr$")>;
1281
1282def ADLPWriteResGroup109 : SchedWriteRes<[ADLPPort00_01, ADLPPort02_03_10, ADLPPort05]> {
1283  let Latency = 24;
1284  let NumMicroOps = 3;
1285}
1286def : InstRW<[ADLPWriteResGroup109], (instregex "^MMX_CVT(T?)PD2PIrm$")>;
1287
1288def ADLPWriteResGroup110 : SchedWriteRes<[ADLPPort00_01, ADLPPort05]> {
1289  let Latency = 8;
1290  let NumMicroOps = 2;
1291}
1292def : InstRW<[ADLPWriteResGroup110], (instregex "^MMX_CVT(T?)PD2PIrr$")>;
1293
1294def ADLPWriteResGroup111 : SchedWriteRes<[ADLPPort00_01, ADLPPort05]> {
1295  let Latency = 6;
1296  let NumMicroOps = 2;
1297}
1298def : InstRW<[ADLPWriteResGroup111], (instrs MMX_CVTPI2PDrr)>;
1299
1300def ADLPWriteResGroup112 : SchedWriteRes<[ADLPPort00, ADLPPort00_01]> {
1301  let Latency = 7;
1302  let NumMicroOps = 2;
1303}
1304def : InstRW<[ADLPWriteResGroup112], (instrs MMX_CVTPI2PSrr)>;
1305
1306def ADLPWriteResGroup113 : SchedWriteRes<[ADLPPort00, ADLPPort02_03_10]> {
1307  let Latency = 13;
1308  let NumMicroOps = 2;
1309}
1310def : InstRW<[ADLPWriteResGroup113], (instregex "^MMX_CVT(T?)PS2PIrm$")>;
1311
1312def ADLPWriteResGroup114 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05]> {
1313  let Latency = 9;
1314  let NumMicroOps = 2;
1315}
1316def : InstRW<[ADLPWriteResGroup114], (instregex "^MMX_CVT(T?)PS2PIrr$")>;
1317
1318def ADLPWriteResGroup115 : SchedWriteRes<[ADLPPort00, ADLPPort04_09, ADLPPort07_08]> {
1319  let ReleaseAtCycles = [2, 1, 1];
1320  let Latency = 12;
1321  let NumMicroOps = 4;
1322}
1323def : InstRW<[ADLPWriteResGroup115], (instregex "^MMX_MASKMOVQ((64)?)$")>;
1324
1325def ADLPWriteResGroup116 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1326  let Latency = 18;
1327  let NumMicroOps = 2;
1328}
1329def : InstRW<[ADLPWriteResGroup116], (instrs MMX_MOVD64mr)>;
1330
1331def ADLPWriteResGroup117 : SchedWriteRes<[ADLPPort02_03_10]> {
1332  let Latency = 8;
1333}
1334def : InstRW<[ADLPWriteResGroup117], (instregex "^MMX_MOV(D|Q)64rm$",
1335                                                "^VBROADCAST(F|I)128rm$",
1336                                                "^VBROADCASTS(D|S)Yrm$",
1337                                                "^VMOV(D|SH|SL)DUPYrm$",
1338                                                "^VPBROADCAST(D|Q)Yrm$")>;
1339def : InstRW<[ADLPWriteResGroup117], (instrs MMX_MOVD64to64rm)>;
1340
1341def ADLPWriteResGroup118 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort00_05]> {
1342  let Latency = 3;
1343  let NumMicroOps = 2;
1344}
1345def : InstRW<[ADLPWriteResGroup118], (instregex "^MMX_MOV(DQ|FR64)2Qrr$")>;
1346
1347def ADLPWriteResGroup119 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05]> {
1348  let Latency = 3;
1349  let NumMicroOps = 2;
1350}
1351def : InstRW<[ADLPWriteResGroup119], (instregex "^MMX_MOVQ2(DQ|FR64)rr$")>;
1352
1353def ADLPWriteResGroup120 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
1354  let ReleaseAtCycles = [1, 2];
1355  let Latency = 12;
1356  let NumMicroOps = 3;
1357}
1358def : InstRW<[ADLPWriteResGroup120, ReadAfterVecLd], (instregex "^MMX_PACKSS(DW|WB)rm$")>;
1359def : InstRW<[ADLPWriteResGroup120, ReadAfterVecLd], (instrs MMX_PACKUSWBrm)>;
1360
1361def ADLPWriteResGroup121 : SchedWriteRes<[ADLPPort05]> {
1362  let ReleaseAtCycles = [2];
1363  let Latency = 4;
1364  let NumMicroOps = 2;
1365}
1366def : InstRW<[ADLPWriteResGroup121], (instregex "^MMX_PACKSS(DW|WB)rr$")>;
1367def : InstRW<[ADLPWriteResGroup121], (instrs MMX_PACKUSWBrr)>;
1368def : InstRW<[ADLPWriteResGroup121, ReadDefault, ReadInt2Fpu], (instrs MMX_PINSRWrri)>;
1369
1370def ADLPWriteResGroup122 : SchedWriteRes<[ADLPPort00_05, ADLPPort02_03_10]> {
1371  let Latency = 9;
1372  let NumMicroOps = 2;
1373}
1374def : InstRW<[ADLPWriteResGroup122, ReadAfterVecLd], (instregex "^MMX_P(ADD|SUB)(B|D|Q|W)rm$")>;
1375
1376def ADLPWriteResGroup123 : SchedWriteRes<[ADLPPort00, ADLPPort02_03_10, ADLPPort05]> {
1377  let ReleaseAtCycles = [1, 1, 2];
1378  let Latency = 11;
1379  let NumMicroOps = 4;
1380}
1381def : InstRW<[ADLPWriteResGroup123, ReadAfterVecLd], (instregex "^MMX_PH(ADD|SUB)SWrm$")>;
1382
1383def ADLPWriteResGroup124 : SchedWriteRes<[ADLPPort00, ADLPPort05]> {
1384  let ReleaseAtCycles = [1, 2];
1385  let Latency = 3;
1386  let NumMicroOps = 3;
1387}
1388def : InstRW<[ADLPWriteResGroup124], (instregex "^MMX_PH(ADD|SUB)SWrr$")>;
1389
1390def ADLPWriteResGroup125 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
1391  let Latency = 9;
1392  let NumMicroOps = 2;
1393}
1394def : InstRW<[ADLPWriteResGroup125], (instregex "^VPBROADCAST(B|W)Yrm$")>;
1395def : InstRW<[ADLPWriteResGroup125, ReadAfterLd], (instrs MMX_PINSRWrmi)>;
1396def : InstRW<[ADLPWriteResGroup125, ReadAfterVecYLd], (instrs VPALIGNRYrmi)>;
1397
1398def ADLPWriteResGroup126 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
1399  let Latency = 5;
1400  let NumMicroOps = 2;
1401}
1402def : InstRW<[ADLPWriteResGroup126], (instregex "^MOV16ao(16|32|64)$")>;
1403
1404def ADLPWriteResGroup127 : SchedWriteRes<[ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
1405  let Latency = 12;
1406  let NumMicroOps = 3;
1407}
1408def : InstRW<[ADLPWriteResGroup127], (instregex "^PUSH(F|G)S(16|32)$")>;
1409def : InstRW<[ADLPWriteResGroup127], (instrs MOV16ms,
1410                                             MOVBE32mr)>;
1411
1412def ADLPWriteResGroup128 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01]> {
1413  let NumMicroOps = 2;
1414}
1415def : InstRW<[ADLPWriteResGroup128], (instregex "^MOV(16|32|64)rs$",
1416                                                "^S(TR|LDT)16r$")>;
1417
1418def ADLPWriteResGroup129 : SchedWriteRes<[ADLPPort02_03_10]>;
1419def : InstRW<[ADLPWriteResGroup129], (instregex "^MOV32ao(16|32|64)$")>;
1420def : InstRW<[ADLPWriteResGroup129], (instrs MOV64ao64)>;
1421
1422def ADLPWriteResGroup130 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
1423  let NumMicroOps = 3;
1424}
1425def : InstRW<[ADLPWriteResGroup130], (instregex "^MOV(8|32)o(16|32)a$",
1426                                                "^MOV(8|32|64)o64a$")>;
1427
1428def ADLPWriteResGroup131 : SchedWriteRes<[ADLPPort00_01_05_06_11]> {
1429  let Latency = 0;
1430}
1431def : InstRW<[ADLPWriteResGroup131], (instregex "^MOV32rr((_REV)?)$",
1432                                                "^MOVZX(32|64)rr8$")>;
1433def : InstRW<[ADLPWriteResGroup131], (instrs MOVZX32rr8_NOREX)>;
1434
1435def ADLPWriteResGroup132 : SchedWriteRes<[ADLPPort02_03_10]> {
1436  let Latency = 5;
1437}
1438def : InstRW<[ADLPWriteResGroup132], (instrs MOV64ao32)>;
1439
1440def ADLPWriteResGroup133 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1441  let ReleaseAtCycles = [1, 2, 4, 16, 7, 2, 2, 12, 2];
1442  let Latency = 217;
1443  let NumMicroOps = 48;
1444}
1445def : InstRW<[ADLPWriteResGroup133], (instrs MOV64dr)>;
1446
1447def ADLPWriteResGroup134 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1448  let Latency = 12;
1449  let NumMicroOps = 2;
1450}
1451def : InstRW<[ADLPWriteResGroup134], (instrs MOV64o32a)>;
1452
1453def ADLPWriteResGroup135 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort05]> {
1454  let Latency = AlderlakePModel.MaxLatency;
1455  let NumMicroOps = 3;
1456}
1457def : InstRW<[ADLPWriteResGroup135], (instrs MOV64rc)>;
1458
1459def ADLPWriteResGroup136 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort05]> {
1460  let ReleaseAtCycles = [3, 4, 8, 4, 2, 3];
1461  let Latency = 181;
1462  let NumMicroOps = 24;
1463}
1464def : InstRW<[ADLPWriteResGroup136], (instrs MOV64rd)>;
1465
1466def ADLPWriteResGroup137 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
1467  let NumMicroOps = 2;
1468}
1469def : InstRW<[ADLPWriteResGroup137], (instregex "^MOV8ao(16|32|64)$")>;
1470
1471def ADLPWriteResGroup138 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1472  let Latency = 13;
1473  let NumMicroOps = 2;
1474}
1475def : InstRW<[ADLPWriteResGroup138], (instregex "^MOV8m(i|r)$")>;
1476def : InstRW<[ADLPWriteResGroup138], (instrs MOV8mr_NOREX)>;
1477
1478def ADLPWriteResGroup139 : SchedWriteRes<[ADLPPort00_06, ADLPPort04_09, ADLPPort07_08]> {
1479  let Latency = 12;
1480  let NumMicroOps = 3;
1481}
1482def : InstRW<[ADLPWriteResGroup139], (instrs MOVBE16mr)>;
1483
1484def ADLPWriteResGroup140 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort02_03_10]> {
1485  let Latency = 7;
1486  let NumMicroOps = 3;
1487}
1488def : InstRW<[ADLPWriteResGroup140], (instrs MOVBE16rm)>;
1489
1490def ADLPWriteResGroup141 : SchedWriteRes<[ADLPPort01, ADLPPort02_03_10]> {
1491  let Latency = 6;
1492  let NumMicroOps = 2;
1493}
1494def : InstRW<[ADLPWriteResGroup141], (instrs MOVBE32rm)>;
1495
1496def ADLPWriteResGroup142 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
1497  let Latency = 12;
1498  let NumMicroOps = 4;
1499}
1500def : InstRW<[ADLPWriteResGroup142], (instrs MOVBE64mr,
1501                                             PUSHF16,
1502                                             SLDT16m,
1503                                             STRm)>;
1504
1505def ADLPWriteResGroup143 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort02_03_10]> {
1506  let Latency = 7;
1507  let NumMicroOps = 3;
1508}
1509def : InstRW<[ADLPWriteResGroup143], (instrs MOVBE64rm)>;
1510
1511def ADLPWriteResGroup144 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1512  let NumMicroOps = 4;
1513}
1514def : InstRW<[ADLPWriteResGroup144], (instregex "^MOVDIR64B(16|32|64)$")>;
1515
1516def ADLPWriteResGroup145 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1517  let Latency = 511;
1518  let NumMicroOps = 2;
1519}
1520def : InstRW<[ADLPWriteResGroup145], (instrs MOVDIRI32)>;
1521
1522def ADLPWriteResGroup146 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1523  let Latency = 514;
1524  let NumMicroOps = 2;
1525}
1526def : InstRW<[ADLPWriteResGroup146], (instrs MOVDIRI64)>;
1527
1528def ADLPWriteResGroup147 : SchedWriteRes<[ADLPPort01_05, ADLPPort02_03_10]> {
1529  let Latency = 8;
1530  let NumMicroOps = 2;
1531}
1532def : InstRW<[ADLPWriteResGroup147, ReadAfterVecXLd], (instregex "^(V?)MOVLP(D|S)rm$",
1533                                                                 "^(V?)SHUFP(D|S)rmi$")>;
1534
1535def ADLPWriteResGroup148 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1536  let Latency = 512;
1537  let NumMicroOps = 2;
1538}
1539def : InstRW<[ADLPWriteResGroup148], (instrs MOVNTDQmr)>;
1540
1541def ADLPWriteResGroup149 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1542  let Latency = 518;
1543  let NumMicroOps = 2;
1544}
1545def : InstRW<[ADLPWriteResGroup149], (instrs MOVNTImr)>;
1546
1547def ADLPWriteResGroup150 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1548  let ReleaseAtCycles = [4, 1, 1, 1];
1549  let Latency = 8;
1550  let NumMicroOps = 7;
1551}
1552def : InstRW<[ADLPWriteResGroup150], (instrs MOVSB)>;
1553
1554def ADLPWriteResGroup151 : SchedWriteRes<[ADLPPort00_01_05]>;
1555def : InstRW<[ADLPWriteResGroup151], (instregex "^(V?)MOVS(D|S)rr((_REV)?)$",
1556                                                "^(V?)P(ADD|SUB)(B|D|Q|W)rr$",
1557                                                "^VP(ADD|SUB)(B|D|Q|W)Yrr$")>;
1558def : InstRW<[ADLPWriteResGroup151], (instrs VPBLENDDrri)>;
1559
1560def ADLPWriteResGroup152 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1561  let ReleaseAtCycles = [4, 1, 1, 1];
1562  let Latency = 7;
1563  let NumMicroOps = 7;
1564}
1565def : InstRW<[ADLPWriteResGroup152], (instregex "^MOVS(L|Q|W)$")>;
1566
1567def ADLPWriteResGroup153 : SchedWriteRes<[ADLPPort02_03_10]> {
1568  let Latency = 6;
1569}
1570def : InstRW<[ADLPWriteResGroup153], (instregex "^MOVSX(16|32|64)rm(16|32)$",
1571                                                "^MOVSX(32|64)rm8$")>;
1572def : InstRW<[ADLPWriteResGroup153], (instrs MOVSX32rm8_NOREX)>;
1573
1574def ADLPWriteResGroup154 : SchedWriteRes<[ADLPPort01_05_11, ADLPPort02_03_10]> {
1575  let Latency = 6;
1576  let NumMicroOps = 2;
1577}
1578def : InstRW<[ADLPWriteResGroup154], (instrs MOVSX16rm8)>;
1579
1580def ADLPWriteResGroup155 : SchedWriteRes<[ADLPPort01_05_11]>;
1581def : InstRW<[ADLPWriteResGroup155], (instregex "^MOVSX(16|32|64)rr(8|16|32)$")>;
1582def : InstRW<[ADLPWriteResGroup155], (instrs MOVSX32rr8_NOREX)>;
1583
1584def ADLPWriteResGroup156 : SchedWriteRes<[ADLPPort00, ADLPPort02_03]> {
1585  let Latency = 11;
1586  let NumMicroOps = 2;
1587}
1588def : InstRW<[ADLPWriteResGroup156], (instregex "^MUL_F(32|64)m$")>;
1589
1590def ADLPWriteResGroup157 : SchedWriteRes<[ADLPPort00, ADLPPort02_03, ADLPPort05]> {
1591  let Latency = 14;
1592  let NumMicroOps = 3;
1593}
1594def : InstRW<[ADLPWriteResGroup157], (instregex "^MUL_FI(16|32)m$")>;
1595
1596def ADLPWriteResGroup158 : SchedWriteRes<[ADLPPort00]> {
1597  let Latency = 4;
1598}
1599def : InstRW<[ADLPWriteResGroup158], (instregex "^MUL_F(P?)rST0$")>;
1600def : InstRW<[ADLPWriteResGroup158], (instrs MUL_FST0r)>;
1601
1602def ADLPWriteResGroup159 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort05, ADLPPort06]> {
1603  let ReleaseAtCycles = [7, 1, 2];
1604  let Latency = 20;
1605  let NumMicroOps = 10;
1606}
1607def : InstRW<[ADLPWriteResGroup159], (instrs MWAITrr)>;
1608
1609def ADLPWriteResGroup160 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1610  let ReleaseAtCycles = [6, 4, 1, 28, 15, 7, 1, 16, 1];
1611  let Latency = 35;
1612  let NumMicroOps = 79;
1613}
1614def : InstRW<[ADLPWriteResGroup160], (instrs OUT16ir)>;
1615
1616def ADLPWriteResGroup161 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1617  let ReleaseAtCycles = [6, 6, 27, 15, 7, 1, 16, 1];
1618  let Latency = 35;
1619  let NumMicroOps = 79;
1620}
1621def : InstRW<[ADLPWriteResGroup161], (instrs OUT16rr)>;
1622
1623def ADLPWriteResGroup162 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1624  let ReleaseAtCycles = [6, 4, 1, 30, 15, 9, 1, 18, 1];
1625  let Latency = 35;
1626  let NumMicroOps = 85;
1627}
1628def : InstRW<[ADLPWriteResGroup162], (instrs OUT32ir)>;
1629
1630def ADLPWriteResGroup163 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1631  let ReleaseAtCycles = [6, 6, 29, 15, 9, 1, 18, 1];
1632  let Latency = 35;
1633  let NumMicroOps = 85;
1634}
1635def : InstRW<[ADLPWriteResGroup163], (instrs OUT32rr)>;
1636
1637def ADLPWriteResGroup164 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1638  let ReleaseAtCycles = [5, 5, 1, 25, 15, 5, 1, 15, 1];
1639  let Latency = 35;
1640  let NumMicroOps = 73;
1641}
1642def : InstRW<[ADLPWriteResGroup164], (instrs OUT8ir)>;
1643
1644def ADLPWriteResGroup165 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1645  let ReleaseAtCycles = [5, 5, 26, 15, 5, 1, 15, 1];
1646  let Latency = 35;
1647  let NumMicroOps = 73;
1648}
1649def : InstRW<[ADLPWriteResGroup165], (instrs OUT8rr)>;
1650
1651def ADLPWriteResGroup166 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1652  let ReleaseAtCycles = [7, 6, 25, 16, 7, 1, 17, 1];
1653  let Latency = AlderlakePModel.MaxLatency;
1654  let NumMicroOps = 80;
1655}
1656def : InstRW<[ADLPWriteResGroup166], (instrs OUTSB)>;
1657
1658def ADLPWriteResGroup167 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1659  let ReleaseAtCycles = [7, 6, 28, 16, 10, 1, 20, 1];
1660  let Latency = AlderlakePModel.MaxLatency;
1661  let NumMicroOps = 89;
1662}
1663def : InstRW<[ADLPWriteResGroup167], (instrs OUTSL)>;
1664
1665def ADLPWriteResGroup168 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
1666  let ReleaseAtCycles = [6, 1, 5, 27, 16, 8, 1, 18, 1];
1667  let Latency = AlderlakePModel.MaxLatency;
1668  let NumMicroOps = 83;
1669}
1670def : InstRW<[ADLPWriteResGroup168], (instrs OUTSW)>;
1671
1672def ADLPWriteResGroup169 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
1673  let Latency = 10;
1674  let NumMicroOps = 2;
1675}
1676def : InstRW<[ADLPWriteResGroup169, ReadAfterVecXLd], (instregex "^(V?)PACK(S|U)S(DW|WB)rm$",
1677                                                                 "^(V?)PCMPGTQrm$")>;
1678
1679def ADLPWriteResGroup170 : SchedWriteRes<[ADLPPort05]> {
1680  let Latency = 3;
1681}
1682def : InstRW<[ADLPWriteResGroup170], (instregex "^(V?)PACK(S|U)S(DW|WB)rr$",
1683                                                "^(V?)PCMPGTQrr$",
1684                                                "^VPACK(S|U)S(DW|WB)Yrr$")>;
1685def : InstRW<[ADLPWriteResGroup170], (instrs VPCMPGTQYrr)>;
1686
1687def ADLPWriteResGroup171 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort02_03_10]> {
1688  let Latency = 8;
1689  let NumMicroOps = 2;
1690}
1691def : InstRW<[ADLPWriteResGroup171, ReadAfterVecXLd], (instregex "^(V?)P(ADD|SUB)(B|D|Q|W)rm$")>;
1692def : InstRW<[ADLPWriteResGroup171, ReadAfterVecXLd], (instrs VPBLENDDrmi)>;
1693
1694def ADLPWriteResGroup172 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
1695  let Latency = 8;
1696  let NumMicroOps = 2;
1697}
1698def : InstRW<[ADLPWriteResGroup172], (instregex "^VPBROADCAST(B|W)rm$")>;
1699def : InstRW<[ADLPWriteResGroup172, ReadAfterVecXLd], (instregex "^(V?)PALIGNRrmi$")>;
1700
1701def ADLPWriteResGroup173 : SchedWriteRes<[ADLPPort05]>;
1702def : InstRW<[ADLPWriteResGroup173], (instregex "^(V?)PALIGNRrri$",
1703                                                "^VPBROADCAST(B|D|Q|W)rr$")>;
1704def : InstRW<[ADLPWriteResGroup173], (instrs VPALIGNRYrri)>;
1705
1706def ADLPWriteResGroup174 : SchedWriteRes<[ADLPPort00_06, ADLPPort05]> {
1707  let Latency = 4;
1708  let NumMicroOps = 2;
1709}
1710def : InstRW<[ADLPWriteResGroup174], (instrs PAUSE)>;
1711
1712def ADLPWriteResGroup175 : SchedWriteRes<[ADLPPort01, ADLPPort02_03_10]> {
1713  let Latency = 8;
1714  let NumMicroOps = 2;
1715}
1716def : InstRW<[ADLPWriteResGroup175, ReadAfterLd], (instregex "^P(DEP|EXT)(32|64)rm$")>;
1717
1718def ADLPWriteResGroup176 : SchedWriteRes<[ADLPPort01_05, ADLPPort04_09, ADLPPort07_08]> {
1719  let Latency = 12;
1720  let NumMicroOps = 3;
1721}
1722def : InstRW<[ADLPWriteResGroup176], (instregex "^(V?)PEXTR(D|Q)mri$")>;
1723
1724def ADLPWriteResGroup177 : SchedWriteRes<[ADLPPort00_01, ADLPPort01_05, ADLPPort02_03_10]> {
1725  let ReleaseAtCycles = [1, 2, 1];
1726  let Latency = 9;
1727  let NumMicroOps = 4;
1728}
1729def : InstRW<[ADLPWriteResGroup177, ReadAfterVecXLd], (instregex "^(V?)PH(ADD|SUB)SWrm$")>;
1730
1731def ADLPWriteResGroup178 : SchedWriteRes<[ADLPPort00_01, ADLPPort01_05]> {
1732  let ReleaseAtCycles = [1, 2];
1733  let Latency = 2;
1734  let NumMicroOps = 3;
1735}
1736def : InstRW<[ADLPWriteResGroup178], (instregex "^(V?)PH(ADD|SUB)SWrr$",
1737                                                "^VPH(ADD|SUB)SWYrr$")>;
1738
1739def ADLPWriteResGroup179 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1740  let Latency = 12;
1741  let NumMicroOps = 3;
1742}
1743def : InstRW<[ADLPWriteResGroup179], (instregex "^POP(16|32|64)rmm$",
1744                                                "^PUSH(16|32)rmm$")>;
1745
1746def ADLPWriteResGroup180 : SchedWriteRes<[ADLPPort02_03]> {
1747  let Latency = 5;
1748}
1749def : InstRW<[ADLPWriteResGroup180], (instregex "^POPA(16|32)$",
1750                                                "^PREFETCHIT(0|1)$")>;
1751def : InstRW<[ADLPWriteResGroup180], (instrs POPF32)>;
1752
1753def ADLPWriteResGroup181 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10]> {
1754  let ReleaseAtCycles = [6, 2, 1, 1];
1755  let Latency = 5;
1756  let NumMicroOps = 10;
1757}
1758def : InstRW<[ADLPWriteResGroup181], (instrs POPF16)>;
1759
1760def ADLPWriteResGroup182 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort02_03_10]> {
1761  let ReleaseAtCycles = [2, 1, 1];
1762  let Latency = 5;
1763  let NumMicroOps = 7;
1764}
1765def : InstRW<[ADLPWriteResGroup182], (instrs POPF64)>;
1766
1767def ADLPWriteResGroup183 : SchedWriteRes<[ADLPPort02_03_10]> {
1768  let Latency = 0;
1769}
1770def : InstRW<[ADLPWriteResGroup183], (instregex "^PREFETCHT(0|1|2)$")>;
1771def : InstRW<[ADLPWriteResGroup183], (instrs PREFETCHNTA)>;
1772
1773def ADLPWriteResGroup184 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10, ADLPPort06]> {
1774  let ReleaseAtCycles = [1, 1, 2];
1775  let Latency = AlderlakePModel.MaxLatency;
1776  let NumMicroOps = 4;
1777}
1778def : InstRW<[ADLPWriteResGroup184], (instregex "^PTWRITE((64)?)m$")>;
1779
1780def ADLPWriteResGroup185 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort06]> {
1781  let ReleaseAtCycles = [1, 2];
1782  let Latency = AlderlakePModel.MaxLatency;
1783  let NumMicroOps = 3;
1784}
1785def : InstRW<[ADLPWriteResGroup185], (instrs PTWRITE64r)>;
1786
1787def ADLPWriteResGroup186 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort06]> {
1788  let ReleaseAtCycles = [2, 2];
1789  let Latency = AlderlakePModel.MaxLatency;
1790  let NumMicroOps = 4;
1791}
1792def : InstRW<[ADLPWriteResGroup186], (instrs PTWRITEr)>;
1793
1794def ADLPWriteResGroup187 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
1795  let NumMicroOps = 2;
1796}
1797def : InstRW<[ADLPWriteResGroup187], (instregex "^PUSH64r((mr)?)$")>;
1798
1799def ADLPWriteResGroup188 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
1800  let NumMicroOps = 3;
1801}
1802def : InstRW<[ADLPWriteResGroup188], (instrs PUSH64rmm)>;
1803
1804def ADLPWriteResGroup189 : SchedWriteRes<[ADLPPort02_03_07, ADLPPort04]>;
1805def : InstRW<[ADLPWriteResGroup189], (instregex "^PUSHA(16|32)$",
1806                                                "^ST_F(32|64)m$")>;
1807def : InstRW<[ADLPWriteResGroup189], (instrs PUSHF32)>;
1808
1809def ADLPWriteResGroup190 : SchedWriteRes<[ADLPPort00_06, ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
1810  let Latency = 4;
1811  let NumMicroOps = 4;
1812}
1813def : InstRW<[ADLPWriteResGroup190], (instrs PUSHF64)>;
1814
1815def ADLPWriteResGroup191 : SchedWriteRes<[ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
1816  let NumMicroOps = 3;
1817}
1818def : InstRW<[ADLPWriteResGroup191], (instregex "^PUSH(F|G)S64$")>;
1819
1820def ADLPWriteResGroup192 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1821  let ReleaseAtCycles = [2, 3, 2];
1822  let Latency = 8;
1823  let NumMicroOps = 7;
1824}
1825def : InstRW<[ADLPWriteResGroup192], (instregex "^RC(L|R)(16|32|64)rCL$")>;
1826
1827def ADLPWriteResGroup193 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
1828  let ReleaseAtCycles = [1, 2];
1829  let Latency = 13;
1830  let NumMicroOps = 3;
1831}
1832def : InstRW<[ADLPWriteResGroup193, WriteRMW], (instregex "^RC(L|R)8m(1|i)$")>;
1833
1834def ADLPWriteResGroup194 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1835  let ReleaseAtCycles = [1, 5, 2];
1836  let Latency = 20;
1837  let NumMicroOps = 8;
1838}
1839def : InstRW<[ADLPWriteResGroup194, WriteRMW], (instrs RCL8mCL)>;
1840
1841def ADLPWriteResGroup195 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1842  let ReleaseAtCycles = [2, 5, 2];
1843  let Latency = 7;
1844  let NumMicroOps = 9;
1845}
1846def : InstRW<[ADLPWriteResGroup195], (instrs RCL8rCL)>;
1847
1848def ADLPWriteResGroup196 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1849  let ReleaseAtCycles = [2, 4, 3];
1850  let Latency = 20;
1851  let NumMicroOps = 9;
1852}
1853def : InstRW<[ADLPWriteResGroup196, WriteRMW], (instrs RCR8mCL)>;
1854
1855def ADLPWriteResGroup197 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1856  let ReleaseAtCycles = [3, 4, 3];
1857  let Latency = 9;
1858  let NumMicroOps = 10;
1859}
1860def : InstRW<[ADLPWriteResGroup197], (instrs RCR8rCL)>;
1861
1862def ADLPWriteResGroup198 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_05, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort01_05_11, ADLPPort05]> {
1863  let ReleaseAtCycles = [1, 6, 1, 10, 20, 8, 5, 1, 2];
1864  let Latency = AlderlakePModel.MaxLatency;
1865  let NumMicroOps = 54;
1866}
1867def : InstRW<[ADLPWriteResGroup198], (instrs RDMSR)>;
1868
1869def ADLPWriteResGroup199 : SchedWriteRes<[ADLPPort01]> {
1870  let Latency = AlderlakePModel.MaxLatency;
1871}
1872def : InstRW<[ADLPWriteResGroup199], (instrs RDPID64)>;
1873
1874def ADLPWriteResGroup200 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
1875  let Latency = AlderlakePModel.MaxLatency;
1876  let NumMicroOps = 3;
1877}
1878def : InstRW<[ADLPWriteResGroup200], (instrs RDPKRUr)>;
1879
1880def ADLPWriteResGroup201 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort05]> {
1881  let ReleaseAtCycles = [9, 6, 2, 1];
1882  let Latency = AlderlakePModel.MaxLatency;
1883  let NumMicroOps = 18;
1884}
1885def : InstRW<[ADLPWriteResGroup201], (instrs RDPMC)>;
1886
1887def ADLPWriteResGroup202 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort05]> {
1888  let ReleaseAtCycles = [2, 3, 2, 5, 7, 3, 1, 2];
1889  let Latency = 1386;
1890  let NumMicroOps = 25;
1891}
1892def : InstRW<[ADLPWriteResGroup202], (instrs RDRAND16r)>;
1893
1894def ADLPWriteResGroup203 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort05]> {
1895  let ReleaseAtCycles = [2, 3, 2, 5, 7, 3, 1, 2];
1896  let Latency = AlderlakePModel.MaxLatency;
1897  let NumMicroOps = 25;
1898}
1899def : InstRW<[ADLPWriteResGroup203], (instregex "^RDRAND(32|64)r$")>;
1900
1901def ADLPWriteResGroup204 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1902  let ReleaseAtCycles = [2, 3, 3, 5, 7, 1, 4];
1903  let Latency = 1381;
1904  let NumMicroOps = 25;
1905}
1906def : InstRW<[ADLPWriteResGroup204], (instrs RDSEED16r)>;
1907
1908def ADLPWriteResGroup205 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort05]> {
1909  let ReleaseAtCycles = [2, 3, 3, 5, 7, 1, 4];
1910  let Latency = AlderlakePModel.MaxLatency;
1911  let NumMicroOps = 25;
1912}
1913def : InstRW<[ADLPWriteResGroup205], (instregex "^RDSEED(32|64)r$")>;
1914
1915def ADLPWriteResGroup206 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort05]> {
1916  let ReleaseAtCycles = [5, 6, 3, 1];
1917  let Latency = 18;
1918  let NumMicroOps = 15;
1919}
1920def : InstRW<[ADLPWriteResGroup206], (instrs RDTSC)>;
1921
1922def ADLPWriteResGroup207 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort05]> {
1923  let ReleaseAtCycles = [2, 2, 1, 2, 7, 4, 3];
1924  let Latency = 42;
1925  let NumMicroOps = 21;
1926}
1927def : InstRW<[ADLPWriteResGroup207], (instrs RDTSCP)>;
1928
1929def ADLPWriteResGroup208 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10]> {
1930  let Latency = 7;
1931  let NumMicroOps = 2;
1932}
1933def : InstRW<[ADLPWriteResGroup208], (instrs RET64)>;
1934
1935def ADLPWriteResGroup209 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10]> {
1936  let ReleaseAtCycles = [2, 1];
1937  let Latency = 6;
1938  let NumMicroOps = 3;
1939}
1940def : InstRW<[ADLPWriteResGroup209], (instregex "^RETI(16|32|64)$")>;
1941
1942def ADLPWriteResGroup210 : SchedWriteRes<[]>;
1943def : InstRW<[ADLPWriteResGroup210], (instrs REX64_PREFIX)>;
1944
1945def ADLPWriteResGroup211 : SchedWriteRes<[ADLPPort00_06]> {
1946  let ReleaseAtCycles = [2];
1947  let Latency = 12;
1948  let NumMicroOps = 2;
1949}
1950def : InstRW<[ADLPWriteResGroup211, WriteRMW], (instregex "^RO(L|R)(16|32|64)m(1|i|CL)$")>;
1951
1952def ADLPWriteResGroup212 : SchedWriteRes<[ADLPPort00_06]> {
1953  let ReleaseAtCycles = [2];
1954  let NumMicroOps = 2;
1955}
1956def : InstRW<[ADLPWriteResGroup212], (instregex "^RO(L|R)(8|16|32|64)r(1|i)$")>;
1957
1958def ADLPWriteResGroup213 : SchedWriteRes<[ADLPPort00_06]> {
1959  let ReleaseAtCycles = [2];
1960  let Latency = 13;
1961  let NumMicroOps = 2;
1962}
1963def : InstRW<[ADLPWriteResGroup213, WriteRMW], (instregex "^RO(L|R)8m(1|i)$",
1964                                                          "^(RO|SH)L8mCL$",
1965                                                          "^(RO|SA|SH)R8mCL$")>;
1966
1967def ADLPWriteResGroup214 : SchedWriteRes<[ADLPPort00_06]> {
1968  let ReleaseAtCycles = [2];
1969  let Latency = 4;
1970  let NumMicroOps = 2;
1971}
1972def : InstRW<[ADLPWriteResGroup214], (instrs SAHF)>;
1973
1974def ADLPWriteResGroup215 : SchedWriteRes<[ADLPPort00_06]> {
1975  let Latency = 13;
1976}
1977def : InstRW<[ADLPWriteResGroup215, WriteRMW], (instregex "^S(A|H)R8m(1|i)$",
1978                                                          "^SHL8m(1|i)$")>;
1979
1980def ADLPWriteResGroup216 : SchedWriteRes<[ADLPPort00_06, ADLPPort02_03_10]> {
1981  let Latency = 8;
1982  let NumMicroOps = 2;
1983}
1984def : InstRW<[ADLPWriteResGroup216, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^S(A|H)RX(32|64)rm$",
1985                                                                                                                              "^SHLX(32|64)rm$")>;
1986
1987def ADLPWriteResGroup217 : SchedWriteRes<[ADLPPort00_06]> {
1988  let Latency = 3;
1989}
1990def : InstRW<[ADLPWriteResGroup217], (instregex "^S(A|H)RX(32|64)rr$",
1991                                                "^SHLX(32|64)rr$")>;
1992
1993def ADLPWriteResGroup218 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
1994  let ReleaseAtCycles = [2, 2, 1, 1, 1];
1995  let Latency = AlderlakePModel.MaxLatency;
1996  let NumMicroOps = 7;
1997}
1998def : InstRW<[ADLPWriteResGroup218], (instrs SERIALIZE)>;
1999
2000def ADLPWriteResGroup219 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
2001  let Latency = 2;
2002  let NumMicroOps = 2;
2003}
2004def : InstRW<[ADLPWriteResGroup219], (instrs SFENCE)>;
2005
2006def ADLPWriteResGroup220 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01, ADLPPort04_09, ADLPPort07_08]> {
2007  let ReleaseAtCycles = [1, 2, 2, 2];
2008  let Latency = 21;
2009  let NumMicroOps = 7;
2010}
2011def : InstRW<[ADLPWriteResGroup220], (instregex "^S(G|I)DT64m$")>;
2012
2013def ADLPWriteResGroup221 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort02_03_10, ADLPPort05]> {
2014  let Latency = 9;
2015  let NumMicroOps = 3;
2016}
2017def : InstRW<[ADLPWriteResGroup221, ReadAfterVecXLd], (instrs SHA1MSG1rm)>;
2018
2019def ADLPWriteResGroup222 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort05]> {
2020  let Latency = 2;
2021  let NumMicroOps = 2;
2022}
2023def : InstRW<[ADLPWriteResGroup222], (instrs SHA1MSG1rr)>;
2024
2025def ADLPWriteResGroup223 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01_05, ADLPPort02_03_10]> {
2026  let ReleaseAtCycles = [2, 2, 1, 2, 1];
2027  let Latency = 13;
2028  let NumMicroOps = 8;
2029}
2030def : InstRW<[ADLPWriteResGroup223, ReadAfterVecXLd], (instrs SHA1MSG2rm)>;
2031
2032def ADLPWriteResGroup224 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_06, ADLPPort01_05]> {
2033  let ReleaseAtCycles = [2, 2, 1, 2];
2034  let Latency = 6;
2035  let NumMicroOps = 7;
2036}
2037def : InstRW<[ADLPWriteResGroup224], (instrs SHA1MSG2rr)>;
2038
2039def ADLPWriteResGroup225 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort01_05, ADLPPort02_03_10]> {
2040  let Latency = 8;
2041  let NumMicroOps = 4;
2042}
2043def : InstRW<[ADLPWriteResGroup225, ReadAfterVecXLd], (instrs SHA1NEXTErm)>;
2044
2045def ADLPWriteResGroup226 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort01_05]> {
2046  let Latency = 3;
2047  let NumMicroOps = 3;
2048}
2049def : InstRW<[ADLPWriteResGroup226], (instrs SHA1NEXTErr)>;
2050
2051def ADLPWriteResGroup227 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
2052  let Latency = 13;
2053  let NumMicroOps = 2;
2054}
2055def : InstRW<[ADLPWriteResGroup227, ReadAfterVecXLd], (instrs SHA1RNDS4rmi,
2056                                                              SHA256RNDS2rm)>;
2057
2058def ADLPWriteResGroup228 : SchedWriteRes<[ADLPPort05]> {
2059  let Latency = 6;
2060}
2061def : InstRW<[ADLPWriteResGroup228], (instrs SHA1RNDS4rri,
2062                                             SHA256RNDS2rr)>;
2063
2064def ADLPWriteResGroup229 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_06, ADLPPort02_03_10, ADLPPort05]> {
2065  let ReleaseAtCycles = [3, 2, 1, 1, 1];
2066  let Latency = 12;
2067  let NumMicroOps = 8;
2068}
2069def : InstRW<[ADLPWriteResGroup229, ReadAfterVecXLd], (instrs SHA256MSG1rm)>;
2070
2071def ADLPWriteResGroup230 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_01_05, ADLPPort00_06, ADLPPort05]> {
2072  let ReleaseAtCycles = [3, 2, 1, 1];
2073  let Latency = 5;
2074  let NumMicroOps = 7;
2075}
2076def : InstRW<[ADLPWriteResGroup230], (instrs SHA256MSG1rr)>;
2077
2078def ADLPWriteResGroup231 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
2079  let ReleaseAtCycles = [1, 2];
2080  let Latency = 13;
2081  let NumMicroOps = 3;
2082}
2083def : InstRW<[ADLPWriteResGroup231, ReadAfterVecXLd], (instrs SHA256MSG2rm)>;
2084
2085def ADLPWriteResGroup232 : SchedWriteRes<[ADLPPort05]> {
2086  let ReleaseAtCycles = [2];
2087  let Latency = 6;
2088  let NumMicroOps = 2;
2089}
2090def : InstRW<[ADLPWriteResGroup232], (instrs SHA256MSG2rr)>;
2091
2092def ADLPWriteResGroup233 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort07_08]> {
2093  let Latency = 13;
2094  let NumMicroOps = 5;
2095}
2096def : InstRW<[ADLPWriteResGroup233], (instrs SHRD16mri8)>;
2097
2098def ADLPWriteResGroup234 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01]> {
2099  let Latency = 6;
2100  let NumMicroOps = 2;
2101}
2102def : InstRW<[ADLPWriteResGroup234], (instregex "^SLDT(32|64)r$")>;
2103
2104def ADLPWriteResGroup235 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort05]> {
2105  let NumMicroOps = 2;
2106}
2107def : InstRW<[ADLPWriteResGroup235], (instrs SMSW16r)>;
2108
2109def ADLPWriteResGroup236 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort05]> {
2110  let Latency = AlderlakePModel.MaxLatency;
2111  let NumMicroOps = 2;
2112}
2113def : InstRW<[ADLPWriteResGroup236], (instregex "^SMSW(32|64)r$")>;
2114
2115def ADLPWriteResGroup237 : SchedWriteRes<[ADLPPort00, ADLPPort02_03_10]> {
2116  let Latency = 24;
2117  let NumMicroOps = 2;
2118}
2119def : InstRW<[ADLPWriteResGroup237, ReadAfterVecLd], (instregex "^(V?)SQRTSDm_Int$")>;
2120
2121def ADLPWriteResGroup238 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
2122  let Latency = 6;
2123  let NumMicroOps = 2;
2124}
2125def : InstRW<[ADLPWriteResGroup238], (instrs STD)>;
2126
2127def ADLPWriteResGroup239 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01]> {
2128  let ReleaseAtCycles = [1, 4, 1];
2129  let Latency = AlderlakePModel.MaxLatency;
2130  let NumMicroOps = 6;
2131}
2132def : InstRW<[ADLPWriteResGroup239], (instrs STI)>;
2133
2134def ADLPWriteResGroup240 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
2135  let ReleaseAtCycles = [2, 1, 1];
2136  let Latency = 8;
2137  let NumMicroOps = 4;
2138}
2139def : InstRW<[ADLPWriteResGroup240], (instrs STOSB)>;
2140
2141def ADLPWriteResGroup241 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort04_09, ADLPPort07_08]> {
2142  let ReleaseAtCycles = [2, 1, 1];
2143  let Latency = 7;
2144  let NumMicroOps = 4;
2145}
2146def : InstRW<[ADLPWriteResGroup241], (instregex "^STOS(L|Q|W)$")>;
2147
2148def ADLPWriteResGroup242 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort01]> {
2149  let Latency = 5;
2150  let NumMicroOps = 2;
2151}
2152def : InstRW<[ADLPWriteResGroup242], (instregex "^STR(32|64)r$")>;
2153
2154def ADLPWriteResGroup243 : SchedWriteRes<[ADLPPort00]> {
2155  let Latency = 2;
2156}
2157def : InstRW<[ADLPWriteResGroup243], (instregex "^(TST|XAM)_F$")>;
2158def : InstRW<[ADLPWriteResGroup243], (instrs UCOM_FPPr)>;
2159
2160def ADLPWriteResGroup244 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort02_03_10]> {
2161  let ReleaseAtCycles = [3, 1];
2162  let Latency = 9;
2163  let NumMicroOps = 4;
2164}
2165def : InstRW<[ADLPWriteResGroup244, ReadAfterVecXLd, ReadAfterVecXLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^VBLENDVP(D|S)rmr$")>;
2166def : InstRW<[ADLPWriteResGroup244, ReadAfterVecXLd, ReadAfterVecXLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instrs VPBLENDVBrmr)>;
2167
2168def ADLPWriteResGroup245 : SchedWriteRes<[ADLPPort00_01_05]> {
2169  let ReleaseAtCycles = [3];
2170  let Latency = 3;
2171  let NumMicroOps = 3;
2172}
2173def : InstRW<[ADLPWriteResGroup245], (instregex "^VBLENDVP(D|S)rrr$")>;
2174def : InstRW<[ADLPWriteResGroup245], (instrs VPBLENDVBrrr)>;
2175
2176def ADLPWriteResGroup246 : SchedWriteRes<[ADLPPort00, ADLPPort01, ADLPPort02_03_10]> {
2177  let ReleaseAtCycles = [6, 7, 18];
2178  let Latency = 81;
2179  let NumMicroOps = 31;
2180}
2181def : InstRW<[ADLPWriteResGroup246], (instrs VERRm)>;
2182
2183def ADLPWriteResGroup247 : SchedWriteRes<[ADLPPort00, ADLPPort01, ADLPPort02_03_10]> {
2184  let ReleaseAtCycles = [6, 7, 17];
2185  let Latency = 74;
2186  let NumMicroOps = 30;
2187}
2188def : InstRW<[ADLPWriteResGroup247], (instrs VERRr)>;
2189
2190def ADLPWriteResGroup248 : SchedWriteRes<[ADLPPort00, ADLPPort01, ADLPPort02_03_10]> {
2191  let ReleaseAtCycles = [5, 8, 21];
2192  let Latency = 81;
2193  let NumMicroOps = 34;
2194}
2195def : InstRW<[ADLPWriteResGroup248], (instrs VERWm)>;
2196
2197def ADLPWriteResGroup249 : SchedWriteRes<[ADLPPort00, ADLPPort01, ADLPPort02_03_10]> {
2198  let ReleaseAtCycles = [5, 8, 20];
2199  let Latency = 74;
2200  let NumMicroOps = 33;
2201}
2202def : InstRW<[ADLPWriteResGroup249], (instrs VERWr)>;
2203
2204def ADLPWriteResGroup250 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort01_05, ADLPPort02_03_10]> {
2205  let ReleaseAtCycles = [1, 1, 2, 4];
2206  let Latency = 29;
2207  let NumMicroOps = 8;
2208}
2209def : InstRW<[ADLPWriteResGroup250, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDYrm$",
2210                                                                               "^VPGATHER(D|Q)QYrm$")>;
2211def : InstRW<[ADLPWriteResGroup250, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSYrm,
2212                                                                            VPGATHERQDYrm)>;
2213
2214def ADLPWriteResGroup251 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort01_05, ADLPPort02_03_10]> {
2215  let ReleaseAtCycles = [1, 1, 1, 2];
2216  let Latency = 20;
2217  let NumMicroOps = 5;
2218}
2219def : InstRW<[ADLPWriteResGroup251, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDrm$",
2220                                                                               "^VPGATHER(D|Q)Qrm$")>;
2221def : InstRW<[ADLPWriteResGroup251, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSrm,
2222                                                                            VPGATHERQDrm)>;
2223
2224def ADLPWriteResGroup252 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort01_05, ADLPPort02_03_10]> {
2225  let ReleaseAtCycles = [1, 1, 2, 8];
2226  let Latency = 30;
2227  let NumMicroOps = 12;
2228}
2229def : InstRW<[ADLPWriteResGroup252, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSYrm,
2230                                                                            VPGATHERDDYrm)>;
2231
2232def ADLPWriteResGroup253 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05, ADLPPort01_05, ADLPPort02_03_10]> {
2233  let ReleaseAtCycles = [1, 1, 2, 4];
2234  let Latency = 28;
2235  let NumMicroOps = 8;
2236}
2237def : InstRW<[ADLPWriteResGroup253, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSrm,
2238                                                                            VPGATHERDDrm)>;
2239
2240def ADLPWriteResGroup254 : SchedWriteRes<[ADLPPort01_05, ADLPPort05]> {
2241  let ReleaseAtCycles = [1, 2];
2242  let Latency = 5;
2243  let NumMicroOps = 3;
2244}
2245def : InstRW<[ADLPWriteResGroup254], (instregex "^VH(ADD|SUB)P(D|S)rr$")>;
2246
2247def ADLPWriteResGroup255 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort02_03_10]> {
2248  let Latency = 9;
2249  let NumMicroOps = 2;
2250}
2251def : InstRW<[ADLPWriteResGroup255, ReadAfterVecYLd], (instregex "^VINSERT(F|I)128rmi$",
2252                                                                 "^VP(ADD|SUB)(B|D|Q|W)Yrm$")>;
2253
2254def ADLPWriteResGroup256 : SchedWriteRes<[ADLPPort00, ADLPPort00_06, ADLPPort02_03_10]> {
2255  let Latency = 7;
2256  let NumMicroOps = 3;
2257}
2258def : InstRW<[ADLPWriteResGroup256], (instrs VLDMXCSR)>;
2259
2260def ADLPWriteResGroup257 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03, ADLPPort02_03_07, ADLPPort04, ADLPPort05, ADLPPort06]> {
2261  let ReleaseAtCycles = [8, 1, 1, 1, 1, 1, 2, 3];
2262  let Latency = 40;
2263  let NumMicroOps = 18;
2264}
2265def : InstRW<[ADLPWriteResGroup257], (instrs VMCLEARm)>;
2266
2267def ADLPWriteResGroup258 : SchedWriteRes<[ADLPPort00]> {
2268  let Latency = 5;
2269}
2270def : InstRW<[ADLPWriteResGroup258], (instregex "^VMOVMSKP(D|S)Yrr$")>;
2271
2272def ADLPWriteResGroup259 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
2273  let Latency = 521;
2274  let NumMicroOps = 2;
2275}
2276def : InstRW<[ADLPWriteResGroup259], (instrs VMOVNTDQmr)>;
2277
2278def ADLPWriteResGroup260 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
2279  let Latency = 473;
2280  let NumMicroOps = 2;
2281}
2282def : InstRW<[ADLPWriteResGroup260], (instrs VMOVNTPDmr)>;
2283
2284def ADLPWriteResGroup261 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
2285  let Latency = 494;
2286  let NumMicroOps = 2;
2287}
2288def : InstRW<[ADLPWriteResGroup261], (instrs VMOVNTPSYmr)>;
2289
2290def ADLPWriteResGroup262 : SchedWriteRes<[ADLPPort04_09, ADLPPort07_08]> {
2291  let Latency = 470;
2292  let NumMicroOps = 2;
2293}
2294def : InstRW<[ADLPWriteResGroup262], (instrs VMOVNTPSmr)>;
2295
2296def ADLPWriteResGroup263 : SchedWriteRes<[ADLPPort02_03_10, ADLPPort05]> {
2297  let Latency = 11;
2298  let NumMicroOps = 2;
2299}
2300def : InstRW<[ADLPWriteResGroup263, ReadAfterVecYLd], (instregex "^VPACK(S|U)S(DW|WB)Yrm$")>;
2301def : InstRW<[ADLPWriteResGroup263, ReadAfterVecYLd], (instrs VPCMPGTQYrm)>;
2302def : InstRW<[ADLPWriteResGroup263, ReadAfterVecXLd], (instrs VPCLMULQDQYrmi)>;
2303
2304def ADLPWriteResGroup264 : SchedWriteRes<[ADLPPort01_05, ADLPPort02_03_10]> {
2305  let Latency = 9;
2306  let NumMicroOps = 2;
2307}
2308def : InstRW<[ADLPWriteResGroup264, ReadAfterVecYLd], (instregex "^VSHUFP(D|S)Yrmi$")>;
2309def : InstRW<[ADLPWriteResGroup264, ReadAfterVecYLd], (instrs VPBLENDWYrmi)>;
2310
2311def ADLPWriteResGroup266 : SchedWriteRes<[ADLPPort00_01, ADLPPort01_05, ADLPPort02_03_10]> {
2312  let ReleaseAtCycles = [1, 2, 1];
2313  let Latency = 10;
2314  let NumMicroOps = 4;
2315}
2316def : InstRW<[ADLPWriteResGroup266, ReadAfterVecYLd], (instregex "^VPH(ADD|SUB)SWYrm$")>;
2317
2318def ADLPWriteResGroup267 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11]> {
2319  let ReleaseAtCycles = [1, 2, 3, 3, 1];
2320  let Latency = 16;
2321  let NumMicroOps = 10;
2322}
2323def : InstRW<[ADLPWriteResGroup267], (instrs VZEROALL)>;
2324
2325def ADLPWriteResGroup268 : SchedWriteRes<[ADLPPort00_01_05_06]> {
2326  let ReleaseAtCycles = [2];
2327  let Latency = 2;
2328  let NumMicroOps = 2;
2329}
2330def : InstRW<[ADLPWriteResGroup268], (instrs WAIT)>;
2331
2332def ADLPWriteResGroup269 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2333  let ReleaseAtCycles = [8, 6, 19, 63, 21, 15, 1, 10, 1];
2334  let Latency = AlderlakePModel.MaxLatency;
2335  let NumMicroOps = 144;
2336}
2337def : InstRW<[ADLPWriteResGroup269], (instrs WRMSR)>;
2338
2339def ADLPWriteResGroup270 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06, ADLPPort01, ADLPPort05]> {
2340  let ReleaseAtCycles = [2, 1, 4, 1];
2341  let Latency = AlderlakePModel.MaxLatency;
2342  let NumMicroOps = 8;
2343}
2344def : InstRW<[ADLPWriteResGroup270], (instrs WRPKRUr)>;
2345
2346def ADLPWriteResGroup271 : SchedWriteRes<[ADLPPort00_01_05_06_11]> {
2347  let ReleaseAtCycles = [2];
2348  let Latency = 12;
2349  let NumMicroOps = 2;
2350}
2351def : InstRW<[ADLPWriteResGroup271, WriteRMW], (instregex "^XADD(16|32|64)rm$")>;
2352
2353def ADLPWriteResGroup272 : SchedWriteRes<[ADLPPort00_01_05_06_11]> {
2354  let ReleaseAtCycles = [2];
2355  let Latency = 13;
2356  let NumMicroOps = 2;
2357}
2358def : InstRW<[ADLPWriteResGroup272, WriteRMW], (instrs XADD8rm)>;
2359
2360def ADLPWriteResGroup273 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
2361  let ReleaseAtCycles = [4, 1];
2362  let Latency = 39;
2363  let NumMicroOps = 5;
2364}
2365def : InstRW<[ADLPWriteResGroup273, WriteRMW], (instregex "^XCHG(16|32)rm$")>;
2366
2367def ADLPWriteResGroup274 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
2368  let ReleaseAtCycles = [5, 1];
2369  let Latency = 39;
2370  let NumMicroOps = 6;
2371}
2372def : InstRW<[ADLPWriteResGroup274, WriteRMW], (instrs XCHG64rm)>;
2373
2374def ADLPWriteResGroup275 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_06]> {
2375  let ReleaseAtCycles = [4, 1];
2376  let Latency = 40;
2377  let NumMicroOps = 5;
2378}
2379def : InstRW<[ADLPWriteResGroup275, WriteRMW], (instrs XCHG8rm)>;
2380
2381def ADLPWriteResGroup276 : SchedWriteRes<[ADLPPort00, ADLPPort00_01_05_06, ADLPPort00_05, ADLPPort01, ADLPPort05, ADLPPort06]> {
2382  let ReleaseAtCycles = [2, 4, 2, 1, 2, 4];
2383  let Latency = 17;
2384  let NumMicroOps = 15;
2385}
2386def : InstRW<[ADLPWriteResGroup276], (instrs XCH_F)>;
2387
2388def ADLPWriteResGroup277 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01]> {
2389  let ReleaseAtCycles = [7, 3, 8, 5];
2390  let Latency = 4;
2391  let NumMicroOps = 23;
2392}
2393def : InstRW<[ADLPWriteResGroup277], (instrs XGETBV)>;
2394
2395def ADLPWriteResGroup278 : SchedWriteRes<[ADLPPort00_01_05_06_11, ADLPPort02_03_10]> {
2396  let ReleaseAtCycles = [2, 1];
2397  let Latency = 7;
2398  let NumMicroOps = 3;
2399}
2400def : InstRW<[ADLPWriteResGroup278], (instrs XLAT)>;
2401
2402def ADLPWriteResGroup279 : SchedWriteRes<[ADLPPort00_01_05_06, ADLPPort01, ADLPPort02_03, ADLPPort06]> {
2403  let ReleaseAtCycles = [21, 1, 1, 8];
2404  let Latency = 37;
2405  let NumMicroOps = 31;
2406}
2407def : InstRW<[ADLPWriteResGroup279], (instregex "^XRSTOR((S|64)?)$")>;
2408def : InstRW<[ADLPWriteResGroup279], (instrs XRSTORS64)>;
2409
2410def ADLPWriteResGroup280 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2411  let ReleaseAtCycles = [14, 25, 44, 21, 21, 4, 1, 9, 1];
2412  let Latency = 42;
2413  let NumMicroOps = 140;
2414}
2415def : InstRW<[ADLPWriteResGroup280], (instrs XSAVE)>;
2416
2417def ADLPWriteResGroup281 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2418  let ReleaseAtCycles = [14, 25, 44, 21, 21, 4, 1, 9, 1];
2419  let Latency = 41;
2420  let NumMicroOps = 140;
2421}
2422def : InstRW<[ADLPWriteResGroup281], (instrs XSAVE64)>;
2423
2424def ADLPWriteResGroup282 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2425  let ReleaseAtCycles = [1, 19, 36, 52, 23, 4, 2, 12, 2];
2426  let Latency = 42;
2427  let NumMicroOps = 151;
2428}
2429def : InstRW<[ADLPWriteResGroup282], (instrs XSAVEC)>;
2430
2431def ADLPWriteResGroup283 : SchedWriteRes<[ADLPPort00, ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2432  let ReleaseAtCycles = [1, 19, 36, 53, 23, 4, 2, 12, 2];
2433  let Latency = 42;
2434  let NumMicroOps = 152;
2435}
2436def : InstRW<[ADLPWriteResGroup283], (instrs XSAVEC64)>;
2437
2438def ADLPWriteResGroup284 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2439  let ReleaseAtCycles = [25, 35, 52, 27, 4, 1, 10, 1];
2440  let Latency = 46;
2441  let NumMicroOps = 155;
2442}
2443def : InstRW<[ADLPWriteResGroup284], (instrs XSAVEOPT)>;
2444
2445def ADLPWriteResGroup285 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2446  let ReleaseAtCycles = [25, 35, 53, 27, 4, 1, 10, 1];
2447  let Latency = 46;
2448  let NumMicroOps = 156;
2449}
2450def : InstRW<[ADLPWriteResGroup285], (instrs XSAVEOPT64)>;
2451
2452def ADLPWriteResGroup286 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2453  let ReleaseAtCycles = [23, 32, 53, 29, 30, 4, 2, 9, 2];
2454  let Latency = 42;
2455  let NumMicroOps = 184;
2456}
2457def : InstRW<[ADLPWriteResGroup286], (instrs XSAVES)>;
2458
2459def ADLPWriteResGroup287 : SchedWriteRes<[ADLPPort00_01, ADLPPort00_05, ADLPPort00_06, ADLPPort01, ADLPPort01_05, ADLPPort02_03_10, ADLPPort04_09, ADLPPort05, ADLPPort07_08]> {
2460  let ReleaseAtCycles = [23, 33, 53, 29, 32, 4, 2, 8, 2];
2461  let Latency = 42;
2462  let NumMicroOps = 186;
2463}
2464def : InstRW<[ADLPWriteResGroup287], (instrs XSAVES64)>;
2465
2466def ADLPWriteResGroup288 : SchedWriteRes<[ADLPPort00_01_05, ADLPPort00_01_05_06_11, ADLPPort00_05_06, ADLPPort00_06, ADLPPort01, ADLPPort01_05_11, ADLPPort05]> {
2467  let ReleaseAtCycles = [4, 23, 2, 14, 8, 1, 2];
2468  let Latency = 5;
2469  let NumMicroOps = 54;
2470}
2471def : InstRW<[ADLPWriteResGroup288], (instrs XSETBV)>;
2472
2473}
2474