xref: /freebsd/contrib/llvm-project/llvm/lib/Target/X86/X86SchedSapphireRapids.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
106c3fb27SDimitry Andric//=- X86SchedSapphireRapids.td - X86 SapphireRapids Scheduling *- tablegen -*=//
206c3fb27SDimitry Andric//
306c3fb27SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
406c3fb27SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
506c3fb27SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
606c3fb27SDimitry Andric//
706c3fb27SDimitry Andric//===----------------------------------------------------------------------===//
806c3fb27SDimitry Andric//
906c3fb27SDimitry Andric// This file defines the machine model for SapphireRapids to support instruction
1006c3fb27SDimitry Andric// scheduling and other instruction cost heuristics.
1106c3fb27SDimitry Andric//
1206c3fb27SDimitry Andric//===----------------------------------------------------------------------===//
1306c3fb27SDimitry Andric
1406c3fb27SDimitry Andricdef SapphireRapidsModel : SchedMachineModel {
1506c3fb27SDimitry Andric  // SapphireRapids can allocate 6 uops per cycle.
1606c3fb27SDimitry Andric  let IssueWidth = 6; // Based on allocator width.
1706c3fb27SDimitry Andric  let MicroOpBufferSize = 512; // Based on the reorder buffer.
1806c3fb27SDimitry Andric  let LoadLatency = 5;
1906c3fb27SDimitry Andric  let MispredictPenalty = 14;
2006c3fb27SDimitry Andric
2106c3fb27SDimitry Andric  // Latency for microcoded instructions or instructions without latency info.
2206c3fb27SDimitry Andric  int MaxLatency = 100;
2306c3fb27SDimitry Andric
2406c3fb27SDimitry Andric  // Based on the LSD (loop-stream detector) queue size (ST).
2506c3fb27SDimitry Andric  let LoopMicroOpBufferSize = 72;
2606c3fb27SDimitry Andric
2706c3fb27SDimitry Andric  // This flag is set to allow the scheduler to assign a default model to
2806c3fb27SDimitry Andric  // unrecognized opcodes.
2906c3fb27SDimitry Andric  let CompleteModel = 0;
3006c3fb27SDimitry Andric}
3106c3fb27SDimitry Andric
3206c3fb27SDimitry Andriclet SchedModel = SapphireRapidsModel in {
3306c3fb27SDimitry Andric
3406c3fb27SDimitry Andric// SapphireRapids can issue micro-ops to 12 different ports in one cycle.
3506c3fb27SDimitry Andricdef SPRPort00 : ProcResource<1>;
3606c3fb27SDimitry Andricdef SPRPort01 : ProcResource<1>;
3706c3fb27SDimitry Andricdef SPRPort02 : ProcResource<1>;
3806c3fb27SDimitry Andricdef SPRPort03 : ProcResource<1>;
3906c3fb27SDimitry Andricdef SPRPort04 : ProcResource<1>;
4006c3fb27SDimitry Andricdef SPRPort05 : ProcResource<1>;
4106c3fb27SDimitry Andricdef SPRPort06 : ProcResource<1>;
4206c3fb27SDimitry Andricdef SPRPort07 : ProcResource<1>;
4306c3fb27SDimitry Andricdef SPRPort08 : ProcResource<1>;
4406c3fb27SDimitry Andricdef SPRPort09 : ProcResource<1>;
4506c3fb27SDimitry Andricdef SPRPort10 : ProcResource<1>;
4606c3fb27SDimitry Andricdef SPRPort11 : ProcResource<1>;
4706c3fb27SDimitry Andric
4806c3fb27SDimitry Andric// Workaround to represent invalid ports. WriteRes shouldn't use this resource.
4906c3fb27SDimitry Andricdef SPRPortInvalid :ProcResource<1>;
5006c3fb27SDimitry Andric
5106c3fb27SDimitry Andric// Many micro-ops are capable of issuing on multiple ports.
5206c3fb27SDimitry Andricdef SPRPort00_01          : ProcResGroup<[SPRPort00, SPRPort01]>;
5306c3fb27SDimitry Andricdef SPRPort00_01_05       : ProcResGroup<[SPRPort00, SPRPort01, SPRPort05]>;
5406c3fb27SDimitry Andricdef SPRPort00_01_05_06    : ProcResGroup<[SPRPort00, SPRPort01, SPRPort05, SPRPort06]>;
5506c3fb27SDimitry Andricdef SPRPort00_05          : ProcResGroup<[SPRPort00, SPRPort05]>;
5606c3fb27SDimitry Andricdef SPRPort00_05_06       : ProcResGroup<[SPRPort00, SPRPort05, SPRPort06]>;
5706c3fb27SDimitry Andricdef SPRPort00_06          : ProcResGroup<[SPRPort00, SPRPort06]>;
5806c3fb27SDimitry Andricdef SPRPort01_05          : ProcResGroup<[SPRPort01, SPRPort05]>;
5906c3fb27SDimitry Andricdef SPRPort01_05_10       : ProcResGroup<[SPRPort01, SPRPort05, SPRPort10]>;
6006c3fb27SDimitry Andricdef SPRPort02_03          : ProcResGroup<[SPRPort02, SPRPort03]>;
6106c3fb27SDimitry Andricdef SPRPort02_03_11       : ProcResGroup<[SPRPort02, SPRPort03, SPRPort11]>;
6206c3fb27SDimitry Andricdef SPRPort07_08          : ProcResGroup<[SPRPort07, SPRPort08]>;
6306c3fb27SDimitry Andric
6406c3fb27SDimitry Andric// EU has 112 reservation stations.
6506c3fb27SDimitry Andricdef SPRPort00_01_05_06_10 : ProcResGroup<[SPRPort00, SPRPort01, SPRPort05,
6606c3fb27SDimitry Andric                                          SPRPort06, SPRPort10]> {
6706c3fb27SDimitry Andric  let BufferSize = 112;
6806c3fb27SDimitry Andric}
6906c3fb27SDimitry Andric
7006c3fb27SDimitry Andric// STD has 48 reservation stations.
7106c3fb27SDimitry Andricdef SPRPort04_09          : ProcResGroup<[SPRPort04, SPRPort09]> {
7206c3fb27SDimitry Andric  let BufferSize = 48;
7306c3fb27SDimitry Andric}
7406c3fb27SDimitry Andric
7506c3fb27SDimitry Andric// MEM has 72 reservation stations.
7606c3fb27SDimitry Andricdef SPRPort02_03_07_08_11 : ProcResGroup<[SPRPort02, SPRPort03, SPRPort07,
7706c3fb27SDimitry Andric                                          SPRPort08, SPRPort11]> {
7806c3fb27SDimitry Andric  let BufferSize = 72;
7906c3fb27SDimitry Andric}
8006c3fb27SDimitry Andric
8106c3fb27SDimitry Andric// Integer loads are 5 cycles, so ReadAfterLd registers needn't be available
8206c3fb27SDimitry Andric// until 5 cycles after the memory operand.
8306c3fb27SDimitry Andricdef : ReadAdvance<ReadAfterLd, 5>;
8406c3fb27SDimitry Andric
8506c3fb27SDimitry Andric// Vector loads are 6 cycles, so ReadAfterVec*Ld registers needn't be available
8606c3fb27SDimitry Andric// until 6 cycles after the memory operand.
8706c3fb27SDimitry Andricdef : ReadAdvance<ReadAfterVecLd, 6>;
8806c3fb27SDimitry Andricdef : ReadAdvance<ReadAfterVecXLd, 6>;
8906c3fb27SDimitry Andricdef : ReadAdvance<ReadAfterVecYLd, 6>;
9006c3fb27SDimitry Andric
9106c3fb27SDimitry Andricdef : ReadAdvance<ReadInt2Fpu, 0>;
9206c3fb27SDimitry Andric
9306c3fb27SDimitry Andric// Many SchedWrites are defined in pairs with and without a folded load.
9406c3fb27SDimitry Andric// Instructions with folded loads are usually micro-fused, so they only appear
9506c3fb27SDimitry Andric// as two micro-ops when queued in the reservation station.
9606c3fb27SDimitry Andric// This multiclass defines the resource usage for variants with and without
9706c3fb27SDimitry Andric// folded loads.
9806c3fb27SDimitry Andricmulticlass SPRWriteResPair<X86FoldableSchedWrite SchedRW,
9906c3fb27SDimitry Andric                           list<ProcResourceKind> ExePorts,
10006c3fb27SDimitry Andric                           int Lat, list<int> Res = [1], int UOps = 1,
10106c3fb27SDimitry Andric                           int LoadLat = 5, int LoadUOps = 1> {
10206c3fb27SDimitry Andric  // Register variant is using a single cycle on ExePort.
10306c3fb27SDimitry Andric  def : WriteRes<SchedRW, ExePorts> {
10406c3fb27SDimitry Andric    let Latency = Lat;
1055f757f3fSDimitry Andric    let ReleaseAtCycles = Res;
10606c3fb27SDimitry Andric    let NumMicroOps = UOps;
10706c3fb27SDimitry Andric  }
10806c3fb27SDimitry Andric
10906c3fb27SDimitry Andric  // Memory variant also uses a cycle on port 2/3/11 and adds LoadLat cycles to
11006c3fb27SDimitry Andric  // the latency (default = 5).
11106c3fb27SDimitry Andric  def : WriteRes<SchedRW.Folded, !listconcat([SPRPort02_03_11], ExePorts)> {
11206c3fb27SDimitry Andric    let Latency = !add(Lat, LoadLat);
1135f757f3fSDimitry Andric    let ReleaseAtCycles = !listconcat([1], Res);
11406c3fb27SDimitry Andric    let NumMicroOps = !add(UOps, LoadUOps);
11506c3fb27SDimitry Andric  }
11606c3fb27SDimitry Andric}
11706c3fb27SDimitry Andric
11806c3fb27SDimitry Andric//===----------------------------------------------------------------------===//
11906c3fb27SDimitry Andric// The following definitons are infered by smg.
12006c3fb27SDimitry Andric//===----------------------------------------------------------------------===//
12106c3fb27SDimitry Andric
12206c3fb27SDimitry Andric// Infered SchedWrite definition.
12306c3fb27SDimitry Andricdef : WriteRes<WriteADC, [SPRPort00_06]>;
12406c3fb27SDimitry Andricdefm : X86WriteRes<WriteADCLd, [SPRPort00_01_05_06_10, SPRPort00_06], 11, [1, 1], 2>;
12506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteAESDecEnc, [SPRPort00_01], 5, [1], 1, 7>;
12606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteAESIMC, [SPRPort00_01], 8, [2], 2, 7>;
12706c3fb27SDimitry Andricdefm : X86WriteRes<WriteAESKeyGen, [SPRPort00, SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort01_05, SPRPort05], 7, [4, 1, 1, 2, 3, 3], 14>;
12806c3fb27SDimitry Andricdefm : X86WriteRes<WriteAESKeyGenLd, [SPRPort00, SPRPort00_01, SPRPort00_06, SPRPort01_05, SPRPort02_03_11, SPRPort05], 12, [4, 1, 2, 3, 1, 3], 14>;
12906c3fb27SDimitry Andricdef : WriteRes<WriteALU, [SPRPort00_01_05_06_10]>;
13006c3fb27SDimitry Andricdef : WriteRes<WriteALULd, [SPRPort00_01_05_06_10]> {
13106c3fb27SDimitry Andric  let Latency = 11;
13206c3fb27SDimitry Andric}
13306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBEXTR, [SPRPort00_06, SPRPort01], 6, [1, 1], 2>;
13406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBLS, [SPRPort01_05_10], 2, [1]>;
13506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBSF, [SPRPort01], 3, [1]>;
13606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBSR, [SPRPort01], 3, [1]>;
13706c3fb27SDimitry Andricdef : WriteRes<WriteBSWAP32, [SPRPort01]>;
13806c3fb27SDimitry Andricdefm : X86WriteRes<WriteBSWAP64, [SPRPort00_06, SPRPort01], 2, [1, 1], 2>;
13906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBZHI, [SPRPort01], 3, [1]>;
14006c3fb27SDimitry Andricdef : WriteRes<WriteBitTest, [SPRPort01]>;
14106c3fb27SDimitry Andricdefm : X86WriteRes<WriteBitTestImmLd, [SPRPort01, SPRPort02_03_11], 6, [1, 1], 2>;
14206c3fb27SDimitry Andricdefm : X86WriteRes<WriteBitTestRegLd, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11], 11, [4, 2, 1, 2, 1], 10>;
14306c3fb27SDimitry Andricdef : WriteRes<WriteBitTestSet, [SPRPort01]>;
14406c3fb27SDimitry Andricdef : WriteRes<WriteBitTestSetImmLd, [SPRPort01]> {
14506c3fb27SDimitry Andric  let Latency = 11;
14606c3fb27SDimitry Andric}
14706c3fb27SDimitry Andricdefm : X86WriteRes<WriteBitTestSetRegLd, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10], 17, [3, 2, 1, 2], 8>;
14806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBlend, [SPRPort01_05], 1, [1], 1, 7>;
14906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteBlendY, [SPRPort00_01_05], 1, [1], 1, 8>;
15006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCLMul, [SPRPort05], 3, [1], 1, 7>;
15106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCMOV, [SPRPort00_06], 1, [1], 1, 6>;
15206c3fb27SDimitry Andricdefm : X86WriteRes<WriteCMPXCHG, [SPRPort00_01_05_06_10, SPRPort00_06], 3, [3, 2], 5>;
15306c3fb27SDimitry Andricdefm : X86WriteRes<WriteCMPXCHGRMW, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08], 12, [1, 2, 1, 1, 1], 6>;
15406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCRC32, [SPRPort01], 3, [1]>;
15506c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2PD, [SPRPort00_01, SPRPort05], 5, [1, 1], 2>;
15606c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2PDLd, [SPRPort00_01, SPRPort02_03_11], 11, [1, 1], 2>;
15706c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2PDY, [SPRPort00_01, SPRPort05], 7, [1, 1], 2>;
15806c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2PDYLd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
15906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtI2PDZ, [SPRPort00], 4, [1], 1, 8>;
16006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtI2PS, [SPRPort00_01], 4, [1], 1, 7>;
16106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtI2PSY, [SPRPort00_01], 4, [1], 1, 8>;
16206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtI2PSZ, [SPRPort00], 4, [1], 1, 8>;
16306c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2SD, [SPRPort00_01, SPRPort05], 7, [1, 1], 2>;
16406c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2SDLd, [SPRPort00_01, SPRPort02_03_11], 11, [1, 1], 2>;
16506c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2SS, [SPRPort00_01, SPRPort00_01_05, SPRPort05], 9, [1, 1, 1], 3>;
16606c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtI2SSLd, [SPRPort00_01, SPRPort02_03_11], 11, [1, 1], 2>;
16706c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2I, [SPRPort00_01, SPRPort05], 5, [1, 1], 2>;
16806c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2ILd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
16906c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2IY, [SPRPort00_01, SPRPort05], 7, [1, 1], 2>;
17006c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2IYLd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
17106c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2IZ, [SPRPort00, SPRPort05], 7, [1, 1], 2>;
17206c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPD2IZLd, [SPRPort00, SPRPort02_03_11], 12, [1, 1], 2>;
17306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPD2PS, [SPRPort00_01, SPRPort05], 5, [1, 1], 2, 7>;
17406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPD2PSY, [SPRPort00_01, SPRPort05], 7, [1, 1], 2, 8>;
17506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPD2PSZ, [SPRPort00, SPRPort05], 7, [1, 1], 2, 8>;
17606c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPH2PS, [SPRPort00_01, SPRPort05], 6, [1, 1], 2>;
17706c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPH2PSLd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
17806c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPH2PSY, [SPRPort00_01, SPRPort05], 8, [1, 1], 2>;
17906c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPH2PSYLd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
18006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPH2PSZ, [SPRPort00, SPRPort05], 11, [1, 1], 2>;
18106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPS2I, [SPRPort00_01], 4, [1], 1, 7>;
18206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPS2IY, [SPRPort00_01], 4, [1], 1, 8>;
18306c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2IZ, [SPRPort00, SPRPort00_05, SPRPort05], 10, [1, 2, 1], 4>;
18406c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2IZLd, [SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03_11, SPRPort05], 18, [1, 2, 1, 1, 1], 6>;
18506c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PD, [SPRPort00_01, SPRPort05], 5, [1, 1], 2>;
18606c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PDLd, [SPRPort00_01, SPRPort02_03_11], 11, [1, 1], 2>;
18706c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PDY, [SPRPort00_01, SPRPort05], 7, [1, 1], 2>;
18806c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PDYLd, [SPRPort00_01, SPRPort02_03_11], 12, [1, 1], 2>;
18906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtPS2PDZ, [SPRPort00, SPRPort05], 7, [1, 1], 2, 6>;
19006c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PH, [SPRPort00_01, SPRPort05], 6, [1, 1], 2>;
19106c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PHSt, [SPRPort00_01, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1], 3>;
19206c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PHY, [SPRPort00_01, SPRPort05], 8, [1, 1], 2>;
19306c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PHYSt, [SPRPort00_01, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1], 3>;
19406c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PHZ, [SPRPort00, SPRPort05], 11, [1, 1], 2>;
19506c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtPS2PHZSt, [SPRPort00, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1], 3>;
19606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtSD2I, [SPRPort00, SPRPort00_01], 7, [1, 1], 2>;
19706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtSD2SS, [SPRPort00_01, SPRPort05], 5, [1, 1], 2, 7>;
19806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteCvtSS2I, [SPRPort00, SPRPort00_01], 7, [1, 1], 2>;
19906c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtSS2SD, [SPRPort00_01, SPRPort05], 5, [1, 1], 2>;
20006c3fb27SDimitry Andricdefm : X86WriteRes<WriteCvtSS2SDLd, [SPRPort00_01, SPRPort02_03_11], 11, [1, 1], 2>;
20106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDPPD, [SPRPort00_01, SPRPort01_05], 9, [2, 1], 3, 7>;
20206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDPPS, [SPRPort00_01, SPRPort00_06, SPRPort01_05, SPRPort05], 14, [2, 1, 2, 1], 6, 7>;
20306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDPPSY, [SPRPort00_01, SPRPort00_06, SPRPort01_05, SPRPort05], 14, [2, 1, 2, 1], 6, 8>;
20406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDiv16, [SPRPort00_01_05_06_10, SPRPort01], 16, [1, 3], 4, 4>;
20506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDiv32, [SPRPort00_01_05_06_10, SPRPort01], 15, [1, 3], 4, 4>;
20606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteDiv64, [SPRPort01], 18, [3], 3>;
20706c3fb27SDimitry Andricdefm : X86WriteRes<WriteDiv8, [SPRPort01], 17, [3], 3>;
20806c3fb27SDimitry Andricdefm : X86WriteRes<WriteDiv8Ld, [SPRPort01], 22, [3], 3>;
20906c3fb27SDimitry Andricdefm : X86WriteRes<WriteEMMS, [SPRPort00, SPRPort00_05, SPRPort00_06], 10, [1, 8, 1], 10>;
21006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAdd, [SPRPort01_05], 3, [1], 1, 7>;
21106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAdd64, [SPRPort01_05], 3, [1], 1, 7>;
21206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAdd64X, [SPRPort01_05], 3, [1], 1, 7>;
21306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAdd64Y, [SPRPort01_05], 3, [1], 1, 8>;
21406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAdd64Z, [SPRPort00_05], 4, [1], 1, 7>;
21506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAddX, [SPRPort00_01], 4, [1], 1, 7>;
21606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAddY, [SPRPort00_01], 4, [1], 1, 8>;
21706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFAddZ, [SPRPort00], 4, [1], 1, 8>;
21806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFBlend, [SPRPort00_01_05], 1, [1], 1, 7>;
21906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFBlendY, [SPRPort00_01_05], 1, [1], 1, 8>;
22006c3fb27SDimitry Andricdef : WriteRes<WriteFCMOV, [SPRPort01]> {
22106c3fb27SDimitry Andric  let Latency = 3;
22206c3fb27SDimitry Andric}
22306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmp, [SPRPort00_01], 4, [1], 1, 7>;
22406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmp64, [SPRPort00_01], 4, [1], 1, 7>;
22506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmp64X, [SPRPort00_01], 4, [1], 1, 7>;
22606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmp64Y, [SPRPort00_01], 4, [1], 1, 8>;
22706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmp64Z, [SPRPort00], 4, [1], 1, 8>;
22806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmpX, [SPRPort00_01], 4, [1], 1, 7>;
22906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCmpY, [SPRPort00_01], 4, [1], 1, 8>;
23006c3fb27SDimitry Andricdef : WriteRes<WriteFCmpZ, [SPRPort05]> {
23106c3fb27SDimitry Andric  let Latency = 3;
23206c3fb27SDimitry Andric}
23306c3fb27SDimitry Andricdefm : X86WriteRes<WriteFCmpZLd, [SPRPort00, SPRPort02_03_11], 12, [1, 1], 2>;
23406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFCom, [SPRPort05], 1, [1], 1, 7>;
23506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFComX, [SPRPort00], 3, [1]>;
23606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDiv, [SPRPort00], 11, [1], 1, 7>;
23706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDiv64, [SPRPort00], 14, [1], 1, 6>;
23806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDiv64X, [SPRPort00], 14, [1], 1, 6>;
23906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDiv64Y, [SPRPort00], 14, [1], 1, 7>;
24006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDiv64Z, [SPRPort00, SPRPort00_05], 23, [2, 1], 3, 7>;
24106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDivX, [SPRPort00], 11, [1], 1, 7>;
24206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDivY, [SPRPort00], 11, [1], 1, 8>;
24306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFDivZ, [SPRPort00, SPRPort00_05], 18, [2, 1], 3, 7>;
24406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFHAdd, [SPRPort01_05, SPRPort05], 6, [1, 2], 3, 6>;
24506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFHAddY, [SPRPort01_05, SPRPort05], 5, [1, 2], 3, 8>;
24606c3fb27SDimitry Andricdef : WriteRes<WriteFLD0, [SPRPort00_05]>;
24706c3fb27SDimitry Andricdefm : X86WriteRes<WriteFLD1, [SPRPort00_05], 1, [2], 2>;
24806c3fb27SDimitry Andricdefm : X86WriteRes<WriteFLDC, [SPRPort00_05], 1, [2], 2>;
24906c3fb27SDimitry Andricdef : WriteRes<WriteFLoad, [SPRPort02_03_11]> {
25006c3fb27SDimitry Andric  let Latency = 7;
25106c3fb27SDimitry Andric}
25206c3fb27SDimitry Andricdef : WriteRes<WriteFLoadX, [SPRPort02_03_11]> {
25306c3fb27SDimitry Andric  let Latency = 7;
25406c3fb27SDimitry Andric}
25506c3fb27SDimitry Andricdef : WriteRes<WriteFLoadY, [SPRPort02_03_11]> {
25606c3fb27SDimitry Andric  let Latency = 8;
25706c3fb27SDimitry Andric}
25806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFLogic, [SPRPort00_01_05], 1, [1], 1, 7>;
25906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFLogicY, [SPRPort00_01_05], 1, [1], 1, 8>;
26006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFLogicZ, [SPRPort00_05], 1, [1], 1, 8>;
26106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMA, [SPRPort00_01], 4, [1], 1, 7>;
26206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMAX, [SPRPort00_01], 4, [1], 1, 7>;
26306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMAY, [SPRPort00_01], 4, [1], 1, 8>;
26406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMAZ, [SPRPort00], 4, [1], 1, 8>;
26506c3fb27SDimitry Andricdef : WriteRes<WriteFMOVMSK, [SPRPort00]> {
26606c3fb27SDimitry Andric  let Latency = 3;
26706c3fb27SDimitry Andric}
26806c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedLoad, [SPRPort00_01_05, SPRPort02_03_11], 8, [1, 1], 2>;
26906c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedLoadY, [SPRPort00_01_05, SPRPort02_03_11], 9, [1, 1], 2>;
27006c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedStore32, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
27106c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedStore32Y, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
27206c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedStore64, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
27306c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMaskedStore64Y, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
27406c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMoveX, [], 1, [], 0>;
27506c3fb27SDimitry Andricdefm : X86WriteRes<WriteFMoveY, [], 1, [], 0>;
27606c3fb27SDimitry Andricdef : WriteRes<WriteFMoveZ, [SPRPort00_05]>;
27706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMul, [SPRPort00_01], 4, [1], 1, 7>;
27806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMul64, [SPRPort00_01], 4, [1], 1, 7>;
27906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMul64X, [SPRPort00_01], 4, [1], 1, 7>;
28006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMul64Y, [SPRPort00_01], 4, [1], 1, 8>;
28106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMul64Z, [SPRPort00], 4, [1], 1, 8>;
28206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMulX, [SPRPort00_01], 4, [1], 1, 7>;
28306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMulY, [SPRPort00_01], 4, [1], 1, 8>;
28406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFMulZ, [SPRPort00], 4, [1], 1, 8>;
28506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRcp, [SPRPort00], 4, [1], 1, 7>;
28606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRcpX, [SPRPort00], 4, [1], 1, 7>;
28706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRcpY, [SPRPort00], 4, [1], 1, 8>;
28806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRcpZ, [SPRPort00, SPRPort00_05], 7, [2, 1], 3, 7>;
28906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRnd, [SPRPort00_01], 4, [1], 1, 7>;
29006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRndY, [SPRPort00_01], 4, [1], 1, 8>;
29106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRndZ, [SPRPort00], 4, [1], 1, 8>;
29206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRsqrt, [SPRPort00], 4, [1], 1, 7>;
29306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRsqrtX, [SPRPort00], 4, [1], 1, 7>;
29406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRsqrtY, [SPRPort00], 4, [1], 1, 8>;
29506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFRsqrtZ, [SPRPort00, SPRPort00_05], 9, [2, 1], 3>;
29606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFShuffle, [SPRPort05], 1, [1], 1, 7>;
29706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFShuffle256, [SPRPort05], 3, [1], 1, 8>;
29806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFShuffleY, [SPRPort05], 1, [1], 1, 8>;
29906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFShuffleZ, [SPRPort05], 1, [1], 1, 8>;
30006c3fb27SDimitry Andricdef : WriteRes<WriteFSign, [SPRPort00]>;
30106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrt, [SPRPort00], 12, [1], 1, 7>;
30206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrt64, [SPRPort00], 18, [1]>;
30306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrt64X, [SPRPort00], 18, [1], 1, 6>;
30406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrt64Y, [SPRPort00], 18, [1], 1, 3>;
30506c3fb27SDimitry Andric// Warning: negtive load latency.
30606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrt64Z, [SPRPort00, SPRPort00_05], 32, [2, 1], 3, -1>;
30706c3fb27SDimitry Andricdef : WriteRes<WriteFSqrt80, [SPRPortInvalid, SPRPort00]> {
3085f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 1];
30906c3fb27SDimitry Andric  let Latency = 21;
31006c3fb27SDimitry Andric}
31106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrtX, [SPRPort00], 12, [1], 1, 7>;
31206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrtY, [SPRPort00], 12, [1], 1, 8>;
31306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFSqrtZ, [SPRPort00, SPRPort00_05], 20, [2, 1], 3, 7>;
31406c3fb27SDimitry Andricdefm : X86WriteRes<WriteFStore, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
31506c3fb27SDimitry Andricdefm : X86WriteResUnsupported<WriteFStoreNT>;
31606c3fb27SDimitry Andricdefm : X86WriteRes<WriteFStoreNTX, [SPRPort04_09, SPRPort07_08], 518, [1, 1], 2>;
31706c3fb27SDimitry Andricdefm : X86WriteRes<WriteFStoreNTY, [SPRPort04_09, SPRPort07_08], 542, [1, 1], 2>;
31806c3fb27SDimitry Andricdefm : X86WriteRes<WriteFStoreX, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
31906c3fb27SDimitry Andricdefm : X86WriteRes<WriteFStoreY, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
32006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFTest, [SPRPort00], 3, [1]>;
32106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFTestY, [SPRPort00], 5, [1], 1, 6>;
32206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarBlend, [SPRPort00_01_05], 1, [1], 1, 7>;
32306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarBlendY, [SPRPort00_01_05], 1, [1], 1, 8>;
32406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarBlendZ, [SPRPort00_05], 1, [1], 1, 8>;
32506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarShuffle, [SPRPort05], 1, [1], 1, 7>;
32606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarShuffle256, [SPRPort05], 3, [1], 1, 8>;
32706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarShuffleY, [SPRPort05], 1, [1], 1, 8>;
32806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteFVarShuffleZ, [SPRPort05], 1, [1], 1, 8>;
32906c3fb27SDimitry Andricdef : WriteRes<WriteFence, [SPRPort00_06]> {
33006c3fb27SDimitry Andric  let Latency = 2;
33106c3fb27SDimitry Andric}
33206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIDiv16, [SPRPort00_01_05_06_10, SPRPort01], 16, [1, 3], 4, 4>;
33306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIDiv32, [SPRPort00_01_05_06_10, SPRPort01], 15, [1, 3], 4, 4>;
33406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIDiv64, [SPRPort01], 18, [3], 3>;
33506c3fb27SDimitry Andricdefm : X86WriteRes<WriteIDiv8, [SPRPort01], 17, [3], 3>;
33606c3fb27SDimitry Andricdefm : X86WriteRes<WriteIDiv8Ld, [SPRPort01], 22, [3], 3>;
33706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul16, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01], 5, [2, 1, 1], 4>;
33806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul16Imm, [SPRPort00_01_05_06_10, SPRPort01], 4, [1, 1], 2>;
33906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul16Reg, [SPRPort01], 3, [1]>;
34006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul32, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01], 4, [1, 1, 1], 3>;
34106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul32Imm, [SPRPort01], 3, [1]>;
34206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul32Reg, [SPRPort01], 3, [1]>;
34306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul64, [SPRPort01, SPRPort05], 4, [1, 1], 2>;
34406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul64Imm, [SPRPort01], 3, [1]>;
34506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul64Reg, [SPRPort01], 3, [1]>;
34606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteIMul8, [SPRPort01], 3, [1]>;
34706c3fb27SDimitry Andricdef : WriteRes<WriteIMulH, []> {
34806c3fb27SDimitry Andric  let Latency = 3;
34906c3fb27SDimitry Andric}
35006c3fb27SDimitry Andricdef : WriteRes<WriteIMulHLd, []> {
35106c3fb27SDimitry Andric  let Latency = 3;
35206c3fb27SDimitry Andric}
35306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteJump, [SPRPort00_06], 1, [1]>;
35406c3fb27SDimitry Andricdef : WriteRes<WriteLAHFSAHF, [SPRPort00_06]> {
35506c3fb27SDimitry Andric  let Latency = 3;
35606c3fb27SDimitry Andric}
35706c3fb27SDimitry Andricdefm : X86WriteRes<WriteLDMXCSR, [SPRPort00, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11], 7, [1, 1, 1, 1], 4>;
35806c3fb27SDimitry Andricdef : WriteRes<WriteLEA, [SPRPort01]>;
35906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteLZCNT, [SPRPort01], 3, [1]>;
36006c3fb27SDimitry Andricdef : WriteRes<WriteLoad, [SPRPort02_03_11]> {
36106c3fb27SDimitry Andric  let Latency = 5;
36206c3fb27SDimitry Andric}
36306c3fb27SDimitry Andricdef : WriteRes<WriteMMXMOVMSK, [SPRPort00]> {
36406c3fb27SDimitry Andric  let Latency = 3;
36506c3fb27SDimitry Andric}
36606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteMPSAD, [SPRPort01_05, SPRPort05], 4, [1, 1], 2, 7>;
36706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteMPSADY, [SPRPort01_05, SPRPort05], 4, [1, 1], 2, 8>;
36806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteMULX32, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01], 4, [1, 1, 1], 2>;
36906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteMULX64, [SPRPort01, SPRPort05], 4, [1, 1]>;
37006c3fb27SDimitry Andricdef : WriteRes<WriteMicrocoded, [SPRPort00_01_05_06]> {
37106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
37206c3fb27SDimitry Andric}
37306c3fb27SDimitry Andricdef : WriteRes<WriteMove, [SPRPort00]> {
37406c3fb27SDimitry Andric  let Latency = 3;
37506c3fb27SDimitry Andric}
37606c3fb27SDimitry Andricdefm : X86WriteRes<WriteNop, [], 1, [], 0>;
37706c3fb27SDimitry Andricdefm : X86WriteRes<WritePCmpEStrI, [SPRPort00, SPRPort00_01_05, SPRPort00_06, SPRPort01, SPRPort05], 16, [3, 2, 1, 1, 1], 8>;
37806c3fb27SDimitry Andricdefm : X86WriteRes<WritePCmpEStrILd, [SPRPort00, SPRPort00_01_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05], 31, [3, 1, 1, 1, 1, 1], 8>;
37906c3fb27SDimitry Andricdefm : X86WriteRes<WritePCmpEStrM, [SPRPort00, SPRPort00_01_05, SPRPort00_06, SPRPort01, SPRPort05], 16, [3, 3, 1, 1, 1], 9>;
38006c3fb27SDimitry Andricdefm : X86WriteRes<WritePCmpEStrMLd, [SPRPort00, SPRPort00_01_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05], 17, [3, 2, 1, 1, 1, 1], 9>;
38106c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePCmpIStrI, [SPRPort00], 11, [3], 3, 20>;
38206c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePCmpIStrM, [SPRPort00], 11, [3], 3>;
38306c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePHAdd, [SPRPort00_05, SPRPort05], 3, [1, 2], 3, 8>;
38406c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePHAddX, [SPRPort00_01_05, SPRPort01_05], 2, [1, 2], 3, 7>;
38506c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePHAddY, [SPRPort00_01_05, SPRPort01_05], 2, [1, 2], 3, 8>;
38606c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePHMINPOS, [SPRPort00], 4, [1], 1, 7>;
38706c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePMULLD, [SPRPort00_01], 10, [2], 2, 8>;
38806c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePMULLDY, [SPRPort00_01], 10, [2], 2, 8>;
38906c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePMULLDZ, [SPRPort00], 10, [2], 2, 8>;
39006c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePOPCNT, [SPRPort01], 3, [1]>;
39106c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePSADBW, [SPRPort05], 3, [1], 1, 8>;
39206c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePSADBWX, [SPRPort05], 3, [1], 1, 7>;
39306c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePSADBWY, [SPRPort05], 3, [1], 1, 8>;
39406c3fb27SDimitry Andricdefm : SPRWriteResPair<WritePSADBWZ, [SPRPort05], 3, [1], 1, 8>;
39506c3fb27SDimitry Andricdefm : X86WriteRes<WriteRMW, [SPRPort02_03_11, SPRPort04_09, SPRPort07_08], 1, [1, 1, 1], 3>;
39606c3fb27SDimitry Andricdefm : X86WriteRes<WriteRotate, [SPRPort00_01_05_06_10, SPRPort00_06], 2, [1, 2], 3>;
39706c3fb27SDimitry Andricdefm : X86WriteRes<WriteRotateLd, [SPRPort00_01_05_06_10, SPRPort00_06], 12, [1, 2], 3>;
39806c3fb27SDimitry Andricdefm : X86WriteRes<WriteRotateCL, [SPRPort00_06], 2, [2], 2>;
39906c3fb27SDimitry Andricdefm : X86WriteRes<WriteRotateCLLd, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01], 19, [2, 3, 2], 7>;
40006c3fb27SDimitry Andricdefm : X86WriteRes<WriteSETCC, [SPRPort00_06], 2, [2], 2>;
40106c3fb27SDimitry Andricdefm : X86WriteRes<WriteSETCCStore, [SPRPort00_06, SPRPort04_09, SPRPort07_08], 13, [2, 1, 1], 4>;
40206c3fb27SDimitry Andricdefm : X86WriteRes<WriteSHDmrcl, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1, 1, 1, 1], 6>;
40306c3fb27SDimitry Andricdefm : X86WriteRes<WriteSHDmri, [SPRPort00_01_05_06_10, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1, 1, 1], 5>;
40406c3fb27SDimitry Andricdefm : X86WriteRes<WriteSHDrrcl, [SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01], 5, [1, 1, 1], 3>;
40506c3fb27SDimitry Andricdef : WriteRes<WriteSHDrri, [SPRPort01]> {
40606c3fb27SDimitry Andric  let Latency = 3;
40706c3fb27SDimitry Andric}
40806c3fb27SDimitry Andricdefm : X86WriteRes<WriteSTMXCSR, [SPRPort00, SPRPort00_06, SPRPort04_09, SPRPort07_08], 12, [1, 1, 1, 1], 4>;
40906c3fb27SDimitry Andricdef : WriteRes<WriteShift, [SPRPort00_06]>;
41006c3fb27SDimitry Andricdef : WriteRes<WriteShiftLd, [SPRPort00_06]> {
41106c3fb27SDimitry Andric  let Latency = 12;
41206c3fb27SDimitry Andric}
41306c3fb27SDimitry Andricdefm : X86WriteRes<WriteShiftCL, [SPRPort00_06], 2, [2], 2>;
41406c3fb27SDimitry Andricdefm : X86WriteRes<WriteShiftCLLd, [SPRPort00_06], 12, [2], 2>;
41506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteShuffle, [SPRPort05], 1, [1], 1, 8>;
41606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteShuffle256, [SPRPort05], 3, [1], 1, 8>;
41706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteShuffleX, [SPRPort01_05], 1, [1], 1, 7>;
41806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteShuffleY, [SPRPort01_05], 1, [1], 1, 8>;
41906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteShuffleZ, [SPRPort05], 3, [1], 1, 6>;
42006c3fb27SDimitry Andricdefm : X86WriteRes<WriteStore, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
42106c3fb27SDimitry Andricdefm : X86WriteRes<WriteStoreNT, [SPRPort04_09, SPRPort07_08], 512, [1, 1], 2>;
42206c3fb27SDimitry Andricdef : WriteRes<WriteSystem, [SPRPort00_01_05_06]> {
42306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
42406c3fb27SDimitry Andric}
42506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteTZCNT, [SPRPort01], 3, [1]>;
42606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVPMOV256, [SPRPort05], 3, [1], 1, 8>;
42706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarBlend, [SPRPort00_01_05], 1, [1], 1, 7>;
42806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarBlendY, [SPRPort00_01_05], 1, [1], 1, 8>;
42906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarBlendZ, [SPRPort00_05], 1, [1], 1, 8>;
43006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarShuffle, [SPRPort00, SPRPort05], 3, [1, 1], 2, 8>;
43106c3fb27SDimitry Andricdefm : X86WriteRes<WriteVarShuffle256, [SPRPort05], 6, [2], 2>;
43206c3fb27SDimitry Andricdefm : X86WriteRes<WriteVarShuffle256Ld, [SPRPort02_03_11, SPRPort05], 11, [1, 1], 2>;
43306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarShuffleX, [SPRPort01_05], 1, [1], 1, 7>;
43406c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarShuffleY, [SPRPort01_05], 1, [1], 1, 8>;
43506c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarShuffleZ, [SPRPort05], 3, [1], 1, 8>;
43606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarVecShift, [SPRPort00_01], 1, [1], 1, 7>;
43706c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarVecShiftY, [SPRPort00_01], 1, [1], 1, 8>;
43806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVarVecShiftZ, [SPRPort00], 1, [1], 1, 8>;
43906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecALU, [SPRPort00], 1, [1], 1, 8>;
44006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecALUX, [SPRPort00_01], 1, [1], 1, 7>;
44106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecALUY, [SPRPort00_01], 1, [1], 1, 8>;
44206c3fb27SDimitry Andricdef : WriteRes<WriteVecALUZ, [SPRPort05]> {
44306c3fb27SDimitry Andric  let Latency = 3;
44406c3fb27SDimitry Andric}
44506c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecALUZLd, [SPRPort00, SPRPort02_03_11], 9, [1, 1], 2>;
44606c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecExtract, [SPRPort00, SPRPort01_05], 4, [1, 1], 2>;
44706c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecExtractSt, [SPRPort01_05, SPRPort04_09, SPRPort07_08], 19, [1, 1, 1], 3>;
44806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecIMul, [SPRPort00], 5, [1], 1, 8>;
44906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecIMulX, [SPRPort00_01], 5, [1], 1, 8>;
45006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecIMulY, [SPRPort00_01], 5, [1], 1, 8>;
45106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecIMulZ, [SPRPort00], 5, [1], 1, 8>;
45206c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecInsert, [SPRPort01_05, SPRPort05], 4, [1, 1], 2>;
45306c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecInsertLd, [SPRPort01_05, SPRPort02_03_11], 8, [1, 1], 2>;
45406c3fb27SDimitry Andricdef : WriteRes<WriteVecLoad, [SPRPort02_03_11]> {
45506c3fb27SDimitry Andric  let Latency = 7;
45606c3fb27SDimitry Andric}
45706c3fb27SDimitry Andricdef : WriteRes<WriteVecLoadNT, [SPRPort02_03_11]> {
45806c3fb27SDimitry Andric  let Latency = 7;
45906c3fb27SDimitry Andric}
46006c3fb27SDimitry Andricdef : WriteRes<WriteVecLoadNTY, [SPRPort02_03_11]> {
46106c3fb27SDimitry Andric  let Latency = 8;
46206c3fb27SDimitry Andric}
46306c3fb27SDimitry Andricdef : WriteRes<WriteVecLoadX, [SPRPort02_03_11]> {
46406c3fb27SDimitry Andric  let Latency = 7;
46506c3fb27SDimitry Andric}
46606c3fb27SDimitry Andricdef : WriteRes<WriteVecLoadY, [SPRPort02_03_11]> {
46706c3fb27SDimitry Andric  let Latency = 8;
46806c3fb27SDimitry Andric}
46906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecLogic, [SPRPort00_05], 1, [1], 1, 8>;
47006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecLogicX, [SPRPort00_01_05], 1, [1], 1, 7>;
47106c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecLogicY, [SPRPort00_01_05], 1, [1], 1, 8>;
47206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecLogicZ, [SPRPort00_05], 1, [1], 1, 8>;
47306c3fb27SDimitry Andricdef : WriteRes<WriteVecMOVMSK, [SPRPort00]> {
47406c3fb27SDimitry Andric  let Latency = 3;
47506c3fb27SDimitry Andric}
47606c3fb27SDimitry Andricdef : WriteRes<WriteVecMOVMSKY, [SPRPort00]> {
47706c3fb27SDimitry Andric  let Latency = 4;
47806c3fb27SDimitry Andric}
47906c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedGatherWriteback, [], 5, [], 0>;
48006c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedLoad, [SPRPort00_01_05, SPRPort02_03_11], 8, [1, 1], 2>;
48106c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedLoadY, [SPRPort00_01_05, SPRPort02_03_11], 9, [1, 1], 2>;
48206c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedStore32, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
48306c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedStore32Y, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
48406c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedStore64, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
48506c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMaskedStore64Y, [SPRPort00, SPRPort04_09, SPRPort07_08], 14, [1, 1, 1], 3>;
48606c3fb27SDimitry Andricdef : WriteRes<WriteVecMove, [SPRPort00_05]>;
48706c3fb27SDimitry Andricdef : WriteRes<WriteVecMoveFromGpr, [SPRPort05]> {
48806c3fb27SDimitry Andric  let Latency = 3;
48906c3fb27SDimitry Andric}
49006c3fb27SDimitry Andricdef : WriteRes<WriteVecMoveToGpr, [SPRPort00]> {
49106c3fb27SDimitry Andric  let Latency = 3;
49206c3fb27SDimitry Andric}
49306c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecMoveX, [], 1, [], 0>;
49406c3fb27SDimitry Andricdef : WriteRes<WriteVecMoveY, [SPRPort00_01_05]>;
49506c3fb27SDimitry Andricdef : WriteRes<WriteVecMoveZ, [SPRPort00_05]>;
49606c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecShift, [SPRPort00], 1, [1], 1, 8>;
49706c3fb27SDimitry Andricdef : WriteRes<WriteVecShiftImm, [SPRPort00]>;
49806c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecShiftImmX, [SPRPort00_01], 1, [1], 1, 7>;
49906c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecShiftImmY, [SPRPort00_01], 1, [1], 1, 8>;
50006c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecShiftImmZ, [SPRPort00], 1, [1], 1, 8>;
50106c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftX, [SPRPort00_01, SPRPort01_05], 2, [1, 1], 2>;
50206c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftXLd, [SPRPort00_01, SPRPort02_03_11], 8, [1, 1], 2>;
50306c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftY, [SPRPort00_01, SPRPort05], 4, [1, 1], 2>;
50406c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftYLd, [SPRPort00_01, SPRPort02_03_11], 9, [1, 1], 2>;
50506c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftZ, [SPRPort00, SPRPort05], 4, [1, 1], 2>;
50606c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecShiftZLd, [SPRPort00, SPRPort02_03_11], 9, [1, 1], 2>;
50706c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecStore, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
50806c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecStoreNT, [SPRPort04_09, SPRPort07_08], 511, [1, 1], 2>;
50906c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecStoreNTY, [SPRPort04_09, SPRPort07_08], 507, [1, 1], 2>;
51006c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecStoreX, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
51106c3fb27SDimitry Andricdefm : X86WriteRes<WriteVecStoreY, [SPRPort04_09, SPRPort07_08], 12, [1, 1], 2>;
51206c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecTest, [SPRPort00, SPRPort05], 4, [1, 1], 2>;
51306c3fb27SDimitry Andricdefm : SPRWriteResPair<WriteVecTestY, [SPRPort00, SPRPort05], 6, [1, 1], 2, 6>;
51406c3fb27SDimitry Andricdefm : X86WriteRes<WriteXCHG, [SPRPort00_01_05_06_10], 2, [3], 3>;
51506c3fb27SDimitry Andricdef : WriteRes<WriteZero, []>;
51606c3fb27SDimitry Andric
51706c3fb27SDimitry Andric// Infered SchedWriteRes and InstRW definition.
51806c3fb27SDimitry Andric
51906c3fb27SDimitry Andricdef SPRWriteResGroup0 : SchedWriteRes<[SPRPort02_03, SPRPort02_03_11, SPRPort04, SPRPort04_09]> {
52006c3fb27SDimitry Andric  let Latency = 7;
52106c3fb27SDimitry Andric  let NumMicroOps = 3;
52206c3fb27SDimitry Andric}
52306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup0], (instregex "^AA(D|N)D64mr$",
52406c3fb27SDimitry Andric                                             "^A(X?)OR64mr$")>;
52506c3fb27SDimitry Andric
52606c3fb27SDimitry Andricdef SPRWriteResGroup1 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
5275f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 1];
52806c3fb27SDimitry Andric  let Latency = 12;
52906c3fb27SDimitry Andric  let NumMicroOps = 6;
53006c3fb27SDimitry Andric}
53106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup1, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)(16|32|64)mr$")>;
53206c3fb27SDimitry Andric
53306c3fb27SDimitry Andricdef SPRWriteResGroup2 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11]> {
53406c3fb27SDimitry Andric  let Latency = 6;
53506c3fb27SDimitry Andric  let NumMicroOps = 2;
53606c3fb27SDimitry Andric}
53706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup2], (instregex "^RORX(32|64)mi$")>;
53806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup2, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)(8|16|32|64)rm$",
53906c3fb27SDimitry Andric                                                                                                                                        "^AD(C|O)X(32|64)rm$")>;
54006c3fb27SDimitry Andric
54106c3fb27SDimitry Andricdef SPRWriteResGroup3 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
54206c3fb27SDimitry Andric  let Latency = 13;
54306c3fb27SDimitry Andric  let NumMicroOps = 5;
54406c3fb27SDimitry Andric}
54506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup3], (instregex "^(ADC|SBB)8mi(8?)$")>;
54606c3fb27SDimitry Andric
54706c3fb27SDimitry Andricdef SPRWriteResGroup4 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
5485f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 1];
54906c3fb27SDimitry Andric  let Latency = 13;
55006c3fb27SDimitry Andric  let NumMicroOps = 6;
55106c3fb27SDimitry Andric}
55206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup4, ReadAfterLd, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^(ADC|SBB)8mr$")>;
55306c3fb27SDimitry Andric
55406c3fb27SDimitry Andricdef SPRWriteResGroup5 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
55506c3fb27SDimitry Andric  let Latency = 6;
55606c3fb27SDimitry Andric  let NumMicroOps = 2;
55706c3fb27SDimitry Andric}
55806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup5], (instregex "^CMP(8|16|32)mi$",
55906c3fb27SDimitry Andric                                             "^CMP(8|16|32|64)mi8$",
56006c3fb27SDimitry Andric                                             "^MOV(8|16)rm$",
56106c3fb27SDimitry Andric                                             "^POP(16|32)r((mr)?)$")>;
56206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup5], (instrs CMP64mi32,
56306c3fb27SDimitry Andric                                          MOV8rm_NOREX,
56406c3fb27SDimitry Andric                                          MOVZX16rm8)>;
56506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup5, ReadAfterLd], (instregex "^(ADD|CMP|SUB)(8|16|32|64)rm$",
56606c3fb27SDimitry Andric                                                          "^AND(8|16|32)rm$",
56706c3fb27SDimitry Andric                                                          "^(X?)OR(8|16|32)rm$")>;
56806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup5, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^CMP(8|16|32|64)mr$")>;
56906c3fb27SDimitry Andric
57006c3fb27SDimitry Andricdef SPRWriteResGroup6 : SchedWriteRes<[]> {
57106c3fb27SDimitry Andric  let NumMicroOps = 0;
57206c3fb27SDimitry Andric}
57306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup6], (instregex "^(ADD|SUB)64ri8$",
57406c3fb27SDimitry Andric                                             "^(DE|IN)C64r$",
57506c3fb27SDimitry Andric                                             "^MOV64rr((_REV)?)$",
57606c3fb27SDimitry Andric                                             "^VMOV(A|U)P(D|S)Zrr((_REV)?)$",
57706c3fb27SDimitry Andric                                             "^VMOVDQA(32|64)Z((256)?)rr((_REV)?)$",
57806c3fb27SDimitry Andric                                             "^VMOVDQ(A|U)Yrr((_REV)?)$",
57906c3fb27SDimitry Andric                                             "^VMOVDQU(8|16|32|64)Z((256)?)rr((_REV)?)$")>;
58006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup6], (instrs CLC,
58106c3fb27SDimitry Andric                                          JMP_2)>;
58206c3fb27SDimitry Andric
58306c3fb27SDimitry Andricdef SPRWriteResGroup7 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
58406c3fb27SDimitry Andric  let Latency = 13;
58506c3fb27SDimitry Andric  let NumMicroOps = 4;
58606c3fb27SDimitry Andric}
58706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup7], (instregex "^A(D|N)D8mi(8?)$",
58806c3fb27SDimitry Andric                                             "^(DE|IN)C8m$",
58906c3fb27SDimitry Andric                                             "^N(EG|OT)8m$",
59006c3fb27SDimitry Andric                                             "^(X?)OR8mi(8?)$",
59106c3fb27SDimitry Andric                                             "^SUB8mi(8?)$")>;
59206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup7, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^A(D|N)D8mr$",
59306c3fb27SDimitry Andric                                                                                                                           "^(X?)OR8mr$")>;
59406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup7, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instrs SUB8mr)>;
59506c3fb27SDimitry Andric
59606c3fb27SDimitry Andricdef SPRWriteResGroup8 : SchedWriteRes<[SPRPort01_05, SPRPort02_03_11]> {
59706c3fb27SDimitry Andric  let Latency = 10;
59806c3fb27SDimitry Andric  let NumMicroOps = 2;
59906c3fb27SDimitry Andric}
60006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup8, ReadAfterVecXLd], (instregex "^(V?)(ADD|SUB)PSrm$",
60106c3fb27SDimitry Andric                                                              "^(V?)ADDSUBPSrm$",
60206c3fb27SDimitry Andric                                                              "^V(ADD|SUB)PSZ128rm((b|k|bk|kz)?)$",
60306c3fb27SDimitry Andric                                                              "^V(ADD|SUB)PSZ128rmbkz$")>;
60406c3fb27SDimitry Andric
60506c3fb27SDimitry Andricdef SPRWriteResGroup9 : SchedWriteRes<[SPRPort01_05]> {
60606c3fb27SDimitry Andric  let Latency = 3;
60706c3fb27SDimitry Andric}
60806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup9], (instregex "^(V?)(ADD|SUB)PSrr$",
60906c3fb27SDimitry Andric                                             "^(V?)ADDSUBPSrr$",
61006c3fb27SDimitry Andric                                             "^V(ADD|SUB)PSYrr$",
61106c3fb27SDimitry Andric                                             "^V(ADD|SUB)PSZ(128|256)rr(k?)$",
61206c3fb27SDimitry Andric                                             "^VPMOV(S|Z)XBWZ128rrk(z?)$",
61306c3fb27SDimitry Andric                                             "^VPSHUFBZ(128|256)rrk(z?)$",
61406c3fb27SDimitry Andric                                             "^VPSHUF(H|L)WZ(128|256)rik(z?)$",
61506c3fb27SDimitry Andric                                             "^VPUNPCK(H|L)(BW|WD)Z(128|256)rrk(z?)$")>;
61606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup9], (instrs VADDSUBPSYrr)>;
61706c3fb27SDimitry Andric
61806c3fb27SDimitry Andricdef SPRWriteResGroup10 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
61906c3fb27SDimitry Andric  let Latency = 10;
62006c3fb27SDimitry Andric  let NumMicroOps = 2;
62106c3fb27SDimitry Andric}
62206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup10], (instregex "^ADD_F(32|64)m$",
62306c3fb27SDimitry Andric                                              "^ILD_F(16|32|64)m$",
62406c3fb27SDimitry Andric                                              "^SUB(R?)_F(32|64)m$",
62506c3fb27SDimitry Andric                                              "^VPOPCNT(B|D|Q|W)Z128rm$",
62606c3fb27SDimitry Andric                                              "^VPOPCNT(D|Q)Z128rm(b|k|kz)$",
62706c3fb27SDimitry Andric                                              "^VPOPCNT(D|Q)Z128rmbk(z?)$")>;
62806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup10, ReadAfterVecXLd], (instregex "^(V?)PACK(S|U)S(DW|WB)rm$",
62906c3fb27SDimitry Andric                                                               "^(V?)PCMPGTQrm$",
63006c3fb27SDimitry Andric                                                               "^VFPCLASSP(D|H|S)Z128rmb$",
63106c3fb27SDimitry Andric                                                               "^VPACK(S|U)S(DW|WB)Z128rm$",
63206c3fb27SDimitry Andric                                                               "^VPACK(S|U)SDWZ128rmb$",
63306c3fb27SDimitry Andric                                                               "^VPM(AX|IN)(S|U)QZ128rm((b|k|bk|kz)?)$",
63406c3fb27SDimitry Andric                                                               "^VPM(AX|IN)(S|U)QZ128rmbkz$",
63506c3fb27SDimitry Andric                                                               "^VPMULTISHIFTQBZ128rm(b?)$")>;
63606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup10, ReadAfterVecXLd], (instrs VFPCLASSPHZ128rm)>;
63706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup10, ReadAfterVecYLd], (instregex "^VFPCLASSP(D|H|S)Z((256)?)rm$",
6385f757f3fSDimitry Andric                                                               "^VPERM(I|T)2(D|Q|PS)Z128rm((b|k|bk|kz)?)$",
6395f757f3fSDimitry Andric                                                               "^VPERM(I|T)2(D|Q|PS)Z128rmbkz$",
6405f757f3fSDimitry Andric                                                               "^VPERM(I|T)2PDZ128rm((b|k|bk|kz)?)$",
6415f757f3fSDimitry Andric                                                               "^VPERM(I|T)2PDZ128rmbkz$")>;
64206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup10, ReadAfterVecYLd], (instrs VPERMBZ128rm)>;
64306c3fb27SDimitry Andric
64406c3fb27SDimitry Andricdef SPRWriteResGroup11 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
6455f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
64606c3fb27SDimitry Andric  let Latency = 13;
64706c3fb27SDimitry Andric  let NumMicroOps = 3;
64806c3fb27SDimitry Andric}
64906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup11], (instregex "^ADD_FI(16|32)m$",
65006c3fb27SDimitry Andric                                              "^SUB(R?)_FI(16|32)m$")>;
65106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup11, ReadAfterVecXLd], (instrs SHA256MSG2rm)>;
65206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup11, ReadAfterVecYLd], (instregex "^VPEXPAND(B|W)Z(128|256)rmk(z?)$",
65306c3fb27SDimitry Andric                                                               "^VPEXPAND(B|W)Zrmk(z?)$")>;
65406c3fb27SDimitry Andric
65506c3fb27SDimitry Andricdef SPRWriteResGroup12 : SchedWriteRes<[SPRPort05]> {
65606c3fb27SDimitry Andric  let Latency = 3;
65706c3fb27SDimitry Andric}
65806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup12], (instregex "^ADD_F(P?)rST0$",
65906c3fb27SDimitry Andric                                              "^KMOV(B|D|W)kr$",
66006c3fb27SDimitry Andric                                              "^(V?)PACK(S|U)S(DW|WB)rr$",
66106c3fb27SDimitry Andric                                              "^(V?)PCMPGTQrr$",
66206c3fb27SDimitry Andric                                              "^SUB(R?)_F(P?)rST0$",
66306c3fb27SDimitry Andric                                              "^SUB(R?)_FST0r$",
66406c3fb27SDimitry Andric                                              "^VALIGN(D|Q)Z256rri((k|kz)?)$",
66506c3fb27SDimitry Andric                                              "^VCMPP(D|H|S)Z(128|256)rri(k?)$",
666*0fca6ea1SDimitry Andric                                              "^VCMPS(D|H|S)Zrri$",
667*0fca6ea1SDimitry Andric                                              "^VCMPS(D|H|S)Zrr(b?)i_Int(k?)$",
66806c3fb27SDimitry Andric                                              "^VFPCLASSP(D|H|S)Z(128|256)rr(k?)$",
66906c3fb27SDimitry Andric                                              "^VFPCLASSS(D|H|S)Zrr(k?)$",
67006c3fb27SDimitry Andric                                              "^VPACK(S|U)S(DW|WB)Yrr$",
67106c3fb27SDimitry Andric                                              "^VPACK(S|U)S(DW|WB)Z(128|256)rr$",
67206c3fb27SDimitry Andric                                              "^VPALIGNRZ(128|256)rrik(z?)$",
67306c3fb27SDimitry Andric                                              "^VPBROADCAST(B|W)Z128rrk(z?)$",
67406c3fb27SDimitry Andric                                              "^VPCMP(B|D|Q|W|UD|UQ|UW)Z(128|256)rri(k?)$",
67506c3fb27SDimitry Andric                                              "^VPCMP(EQ|GT)(B|D|Q|W)Z(128|256)rr(k?)$",
67606c3fb27SDimitry Andric                                              "^VPCMPUBZ(128|256)rri(k?)$",
67706c3fb27SDimitry Andric                                              "^VPERMBZ(128|256)rr$",
67806c3fb27SDimitry Andric                                              "^VPERM(B|D|Q)Zrr$",
67906c3fb27SDimitry Andric                                              "^VPERM(D|Q)Z256rr((k|kz)?)$",
68006c3fb27SDimitry Andric                                              "^VPERM(D|Q)Zrrk(z?)$",
6815f757f3fSDimitry Andric                                              "^VPERM(I|T)2(D|Q)Z(128|256)rr((k|kz)?)$",
6825f757f3fSDimitry Andric                                              "^VPERM(I|T)2(D|Q)Zrr((k|kz)?)$",
68306c3fb27SDimitry Andric                                              "^VPM(AX|IN)(S|U)QZ(128|256)rr((k|kz)?)$",
68406c3fb27SDimitry Andric                                              "^VPMULTISHIFTQBZ(128|256)rr$",
68506c3fb27SDimitry Andric                                              "^VPOPCNT(B|D|Q|W)Z(128|256)rr$",
68606c3fb27SDimitry Andric                                              "^VPOPCNT(D|Q)Z(128|256)rrk(z?)$",
68706c3fb27SDimitry Andric                                              "^VPTEST(N?)M(B|D|Q|W)Z(128|256)rr(k?)$",
68806c3fb27SDimitry Andric                                              "^VPTEST(N?)M(B|D|Q|W)Zrr(k?)$")>;
68906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup12], (instrs ADD_FST0r,
69006c3fb27SDimitry Andric                                           VPCMPGTQYrr,
69106c3fb27SDimitry Andric                                           VPERMDYrr)>;
69206c3fb27SDimitry Andric
69306c3fb27SDimitry Andricdef SPRWriteResGroup13 : SchedWriteRes<[SPRPort00_01_05_06_10]> {
69406c3fb27SDimitry Andric  let Latency = 2;
69506c3fb27SDimitry Andric}
69606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup13], (instregex "^AND(8|16|32|64)r(r|i8)$",
69706c3fb27SDimitry Andric                                              "^AND(8|16|32|64)rr_REV$",
69806c3fb27SDimitry Andric                                              "^(AND|TEST)(32|64)i32$",
69906c3fb27SDimitry Andric                                              "^(AND|TEST)(8|32)ri$",
70006c3fb27SDimitry Andric                                              "^(AND|TEST)64ri32$",
70106c3fb27SDimitry Andric                                              "^(AND|TEST)8i8$",
70206c3fb27SDimitry Andric                                              "^(X?)OR(8|16|32|64)r(r|i8)$",
70306c3fb27SDimitry Andric                                              "^(X?)OR(8|16|32|64)rr_REV$",
70406c3fb27SDimitry Andric                                              "^(X?)OR(32|64)i32$",
70506c3fb27SDimitry Andric                                              "^(X?)OR(8|32)ri$",
70606c3fb27SDimitry Andric                                              "^(X?)OR64ri32$",
70706c3fb27SDimitry Andric                                              "^(X?)OR8i8$",
70806c3fb27SDimitry Andric                                              "^TEST(8|16|32|64)rr$")>;
70906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup13], (instrs XOR8rr_NOREX)>;
71006c3fb27SDimitry Andric
71106c3fb27SDimitry Andricdef SPRWriteResGroup14 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
71206c3fb27SDimitry Andric  let Latency = 7;
71306c3fb27SDimitry Andric  let NumMicroOps = 2;
71406c3fb27SDimitry Andric}
71506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup14], (instregex "^TEST(8|16|32)mi$")>;
71606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup14], (instrs TEST64mi32)>;
71706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup14, ReadAfterLd], (instregex "^(X?)OR64rm$")>;
71806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup14, ReadAfterLd], (instrs AND64rm)>;
71906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup14, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^TEST(8|16|32|64)mr$")>;
72006c3fb27SDimitry Andric
72106c3fb27SDimitry Andricdef SPRWriteResGroup15 : SchedWriteRes<[SPRPort01_05_10, SPRPort02_03_11]> {
72206c3fb27SDimitry Andric  let Latency = 7;
72306c3fb27SDimitry Andric  let NumMicroOps = 2;
72406c3fb27SDimitry Andric}
72506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup15, ReadAfterLd], (instregex "^ANDN(32|64)rm$")>;
72606c3fb27SDimitry Andric
72706c3fb27SDimitry Andricdef SPRWriteResGroup16 : SchedWriteRes<[SPRPort01_05_10]> {
72806c3fb27SDimitry Andric  let Latency = 2;
72906c3fb27SDimitry Andric}
73006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup16], (instregex "^ANDN(32|64)rr$")>;
73106c3fb27SDimitry Andric
73206c3fb27SDimitry Andricdef SPRWriteResGroup17 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11]> {
7335f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 2, 1, 1];
73406c3fb27SDimitry Andric  let Latency = 10;
73506c3fb27SDimitry Andric  let NumMicroOps = 9;
73606c3fb27SDimitry Andric}
73706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup17], (instrs BT64mr)>;
73806c3fb27SDimitry Andric
73906c3fb27SDimitry Andricdef SPRWriteResGroup18 : SchedWriteRes<[SPRPort01]> {
74006c3fb27SDimitry Andric  let Latency = 3;
74106c3fb27SDimitry Andric}
74206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup18], (instregex "^BT((C|R|S)?)64rr$",
74306c3fb27SDimitry Andric                                              "^P(DEP|EXT)(32|64)rr$")>;
74406c3fb27SDimitry Andric
74506c3fb27SDimitry Andricdef SPRWriteResGroup19 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
7465f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 2, 1, 1, 1, 1];
74706c3fb27SDimitry Andric  let Latency = 17;
74806c3fb27SDimitry Andric  let NumMicroOps = 10;
74906c3fb27SDimitry Andric}
75006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup19], (instregex "^BT(C|R|S)64mr$")>;
75106c3fb27SDimitry Andric
75206c3fb27SDimitry Andricdef SPRWriteResGroup20 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
75306c3fb27SDimitry Andric  let Latency = 7;
75406c3fb27SDimitry Andric  let NumMicroOps = 5;
75506c3fb27SDimitry Andric}
75606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup20], (instregex "^CALL(16|32|64)m((_NT)?)$")>;
75706c3fb27SDimitry Andric
75806c3fb27SDimitry Andricdef SPRWriteResGroup21 : SchedWriteRes<[SPRPort00_06, SPRPort04_09, SPRPort07_08]> {
75906c3fb27SDimitry Andric  let Latency = 3;
76006c3fb27SDimitry Andric  let NumMicroOps = 3;
76106c3fb27SDimitry Andric}
76206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup21], (instregex "^CALL(16|32|64)r((_NT)?)$")>;
76306c3fb27SDimitry Andric
76406c3fb27SDimitry Andricdef SPRWriteResGroup22 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
76506c3fb27SDimitry Andric  let Latency = 3;
76606c3fb27SDimitry Andric  let NumMicroOps = 2;
76706c3fb27SDimitry Andric}
76806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup22], (instrs CALL64pcrel32,
76906c3fb27SDimitry Andric                                           MFENCE)>;
77006c3fb27SDimitry Andric
77106c3fb27SDimitry Andricdef SPRWriteResGroup23 : SchedWriteRes<[SPRPort01_05]>;
77206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup23], (instregex "^C(DQ|WD)E$",
77306c3fb27SDimitry Andric                                              "^(V?)MOVS(H|L)DUPrr$",
77406c3fb27SDimitry Andric                                              "^(V?)SHUFP(D|S)rri$",
77506c3fb27SDimitry Andric                                              "^VMOVS(H|L)DUPYrr$",
77606c3fb27SDimitry Andric                                              "^VMOVS(H|L)DUPZ(128|256)rr((k|kz)?)$",
77706c3fb27SDimitry Andric                                              "^VPMOVQDZ128rr((k|kz)?)$",
77806c3fb27SDimitry Andric                                              "^VSHUFP(D|S)Yrri$",
77906c3fb27SDimitry Andric                                              "^VSHUFP(D|S)Z(128|256)rri((k|kz)?)$")>;
78006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup23], (instrs CBW,
78106c3fb27SDimitry Andric                                           VPBLENDWYrri)>;
78206c3fb27SDimitry Andric
78306c3fb27SDimitry Andricdef SPRWriteResGroup24 : SchedWriteRes<[SPRPort00_06]>;
78406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup24], (instregex "^C(DQ|QO)$",
78506c3fb27SDimitry Andric                                              "^(CL|ST)AC$")>;
78606c3fb27SDimitry Andric
78706c3fb27SDimitry Andricdef SPRWriteResGroup25 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
78806c3fb27SDimitry Andric  let Latency = 3;
78906c3fb27SDimitry Andric  let NumMicroOps = 2;
79006c3fb27SDimitry Andric}
79106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup25], (instrs CLD)>;
79206c3fb27SDimitry Andric
79306c3fb27SDimitry Andricdef SPRWriteResGroup26 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
79406c3fb27SDimitry Andric  let Latency = 3;
79506c3fb27SDimitry Andric  let NumMicroOps = 3;
79606c3fb27SDimitry Andric}
79706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup26], (instrs CLDEMOTE)>;
79806c3fb27SDimitry Andric
79906c3fb27SDimitry Andricdef SPRWriteResGroup27 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort04_09, SPRPort07_08]> {
80006c3fb27SDimitry Andric  let Latency = 2;
80106c3fb27SDimitry Andric  let NumMicroOps = 4;
80206c3fb27SDimitry Andric}
80306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup27], (instrs CLFLUSH)>;
80406c3fb27SDimitry Andric
80506c3fb27SDimitry Andricdef SPRWriteResGroup28 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
80606c3fb27SDimitry Andric  let Latency = 2;
80706c3fb27SDimitry Andric  let NumMicroOps = 3;
80806c3fb27SDimitry Andric}
80906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup28], (instrs CLFLUSHOPT)>;
81006c3fb27SDimitry Andric
81106c3fb27SDimitry Andricdef SPRWriteResGroup29 : SchedWriteRes<[SPRPort00_06, SPRPort01]> {
8125f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
81306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
81406c3fb27SDimitry Andric  let NumMicroOps = 3;
81506c3fb27SDimitry Andric}
81606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup29], (instrs CLI)>;
81706c3fb27SDimitry Andric
81806c3fb27SDimitry Andricdef SPRWriteResGroup30 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort05]> {
8195f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 1, 3];
82006c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
82106c3fb27SDimitry Andric  let NumMicroOps = 10;
82206c3fb27SDimitry Andric}
82306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup30], (instrs CLTS)>;
82406c3fb27SDimitry Andric
82506c3fb27SDimitry Andricdef SPRWriteResGroup31 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
82606c3fb27SDimitry Andric  let Latency = 5;
82706c3fb27SDimitry Andric  let NumMicroOps = 3;
82806c3fb27SDimitry Andric}
82906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup31], (instregex "^MOV16o(16|32|64)a$")>;
83006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup31], (instrs CLWB)>;
83106c3fb27SDimitry Andric
83206c3fb27SDimitry Andricdef SPRWriteResGroup32 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
8335f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 2];
83406c3fb27SDimitry Andric  let Latency = 6;
83506c3fb27SDimitry Andric  let NumMicroOps = 7;
83606c3fb27SDimitry Andric}
83706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup32], (instregex "^CMPS(B|L|Q|W)$")>;
83806c3fb27SDimitry Andric
83906c3fb27SDimitry Andricdef SPRWriteResGroup33 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01_05, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
8405f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 7, 6, 2, 1, 1, 2, 1];
84106c3fb27SDimitry Andric  let Latency = 32;
84206c3fb27SDimitry Andric  let NumMicroOps = 22;
84306c3fb27SDimitry Andric}
84406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup33], (instrs CMPXCHG16B)>;
84506c3fb27SDimitry Andric
84606c3fb27SDimitry Andricdef SPRWriteResGroup34 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
8475f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 7, 2, 1, 1, 1];
84806c3fb27SDimitry Andric  let Latency = 25;
84906c3fb27SDimitry Andric  let NumMicroOps = 16;
85006c3fb27SDimitry Andric}
85106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup34], (instrs CMPXCHG8B)>;
85206c3fb27SDimitry Andric
85306c3fb27SDimitry Andricdef SPRWriteResGroup35 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
8545f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1, 1, 1];
85506c3fb27SDimitry Andric  let Latency = 13;
85606c3fb27SDimitry Andric  let NumMicroOps = 6;
85706c3fb27SDimitry Andric}
85806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup35], (instrs CMPXCHG8rm)>;
85906c3fb27SDimitry Andric
86006c3fb27SDimitry Andricdef SPRWriteResGroup36 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_06, SPRPort01, SPRPort04_09, SPRPort05, SPRPort07_08]> {
8615f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 10, 6, 1, 5, 1];
86206c3fb27SDimitry Andric  let Latency = 18;
86306c3fb27SDimitry Andric  let NumMicroOps = 26;
86406c3fb27SDimitry Andric}
86506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup36], (instrs CPUID)>;
86606c3fb27SDimitry Andric
86706c3fb27SDimitry Andricdef SPRWriteResGroup37 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
86806c3fb27SDimitry Andric  let Latency = 12;
86906c3fb27SDimitry Andric  let NumMicroOps = 3;
87006c3fb27SDimitry Andric}
87106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup37], (instregex "^(V?)CVT(T?)PD2DQrm$",
87206c3fb27SDimitry Andric                                              "^VCVT(T?)PD2(U?)DQZ128rm((b|k|bk|kz)?)$",
87306c3fb27SDimitry Andric                                              "^VCVT(T?)PD2(U?)DQZ128rmbkz$",
87406c3fb27SDimitry Andric                                              "^VCVTPH2PSXZ128rm(b?)$",
87506c3fb27SDimitry Andric                                              "^VCVT(U?)QQ2PSZ128rm((b|k|bk|kz)?)$",
87606c3fb27SDimitry Andric                                              "^VCVT(U?)QQ2PSZ128rmbkz$")>;
87706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup37], (instrs CVTSI642SSrm)>;
87806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup37, ReadAfterVecLd], (instregex "^(V?)CVTSI642SSrm_Int$",
87906c3fb27SDimitry Andric                                                              "^VCVT(U?)SI642SSZrm((_Int)?)$")>;
88006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup37, ReadAfterVecLd], (instrs VCVTSI642SSrm)>;
88106c3fb27SDimitry Andric
88206c3fb27SDimitry Andricdef SPRWriteResGroup38 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort02_03_11]> {
88306c3fb27SDimitry Andric  let Latency = 26;
88406c3fb27SDimitry Andric  let NumMicroOps = 3;
88506c3fb27SDimitry Andric}
88606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup38], (instregex "^(V?)CVT(T?)SD2SIrm((_Int)?)$")>;
88706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup38, ReadAfterVecLd], (instregex "^VCVT(T?)SD2SIZrm$",
88806c3fb27SDimitry Andric                                                              "^VCVT(T?)SD2(U?)SIZrm_Int$")>;
88906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup38, ReadAfterVecLd], (instrs VCVTTSD2USIZrm)>;
89006c3fb27SDimitry Andric
89106c3fb27SDimitry Andricdef SPRWriteResGroup39 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
89206c3fb27SDimitry Andric  let Latency = 7;
89306c3fb27SDimitry Andric  let NumMicroOps = 2;
89406c3fb27SDimitry Andric}
89506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup39], (instregex "^VCVT(T?)PS2(U?)QQZ256rr((k|kz)?)$",
89606c3fb27SDimitry Andric                                              "^VCVT(U?)QQ2PSZ256rr((k|kz)?)$")>;
89706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup39, ReadInt2Fpu], (instrs CVTSI2SSrr)>;
89806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup39, ReadDefault, ReadInt2Fpu], (instregex "^(V?)CVTSI2SSrr_Int$",
89906c3fb27SDimitry Andric                                                                        "^VCVT(U?)SI2SSZrr$",
90006c3fb27SDimitry Andric                                                                        "^VCVT(U?)SI2SSZrr(b?)_Int$")>;
90106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup39, ReadDefault, ReadInt2Fpu], (instrs VCVTSI2SSrr)>;
90206c3fb27SDimitry Andric
90306c3fb27SDimitry Andricdef SPRWriteResGroup40 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
9045f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
90506c3fb27SDimitry Andric  let Latency = 8;
90606c3fb27SDimitry Andric  let NumMicroOps = 3;
90706c3fb27SDimitry Andric}
90806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup40, ReadInt2Fpu], (instrs CVTSI642SSrr)>;
90906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup40, ReadDefault, ReadInt2Fpu], (instregex "^(V?)CVTSI642SSrr_Int$",
91006c3fb27SDimitry Andric                                                                        "^VCVT(U?)SI642SSZrr$",
91106c3fb27SDimitry Andric                                                                        "^VCVT(U?)SI642SSZrr(b?)_Int$")>;
91206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup40, ReadDefault, ReadInt2Fpu], (instrs VCVTSI642SSrr)>;
91306c3fb27SDimitry Andric
91406c3fb27SDimitry Andricdef SPRWriteResGroup41 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort05]> {
91506c3fb27SDimitry Andric  let Latency = 8;
91606c3fb27SDimitry Andric  let NumMicroOps = 3;
91706c3fb27SDimitry Andric}
91806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup41], (instregex "^(V?)CVT(T?)SS2SI64rr_Int$",
91906c3fb27SDimitry Andric                                              "^VCVT(T?)SS2SI64Zrr$",
92006c3fb27SDimitry Andric                                              "^VCVT(T?)SS2(U?)SI64Zrr(b?)_Int$")>;
92106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup41], (instrs VCVTTSS2USI64Zrr)>;
92206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup41, ReadDefault], (instregex "^(V?)CVT(T?)SS2SI64rr$")>;
92306c3fb27SDimitry Andric
92406c3fb27SDimitry Andricdef SPRWriteResGroup42 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
92506c3fb27SDimitry Andric  let Latency = 2;
92606c3fb27SDimitry Andric  let NumMicroOps = 2;
92706c3fb27SDimitry Andric}
92806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup42], (instregex "^J(E|R)CXZ$")>;
92906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup42], (instrs CWD)>;
93006c3fb27SDimitry Andric
93106c3fb27SDimitry Andricdef SPRWriteResGroup43 : SchedWriteRes<[SPRPort00_01_05_06]>;
93206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup43], (instregex "^(LD|ST)_Frr$",
93306c3fb27SDimitry Andric                                              "^MOV16s(m|r)$",
93406c3fb27SDimitry Andric                                              "^MOV(32|64)sr$")>;
93506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup43], (instrs DEC16r_alt,
93606c3fb27SDimitry Andric                                           SALC,
93706c3fb27SDimitry Andric                                           ST_FPrr,
93806c3fb27SDimitry Andric                                           SYSCALL)>;
93906c3fb27SDimitry Andric
94006c3fb27SDimitry Andricdef SPRWriteResGroup44 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
94106c3fb27SDimitry Andric  let Latency = 7;
94206c3fb27SDimitry Andric}
94306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup44], (instrs DEC32r_alt)>;
94406c3fb27SDimitry Andric
94506c3fb27SDimitry Andricdef SPRWriteResGroup45 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
94606c3fb27SDimitry Andric  let Latency = 27;
94706c3fb27SDimitry Andric  let NumMicroOps = 2;
94806c3fb27SDimitry Andric}
94906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup45], (instregex "^DIVR_F(32|64)m$")>;
95006c3fb27SDimitry Andric
95106c3fb27SDimitry Andricdef SPRWriteResGroup46 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
95206c3fb27SDimitry Andric  let Latency = 30;
95306c3fb27SDimitry Andric  let NumMicroOps = 3;
95406c3fb27SDimitry Andric}
95506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup46], (instregex "^DIVR_FI(16|32)m$")>;
95606c3fb27SDimitry Andric
95706c3fb27SDimitry Andricdef SPRWriteResGroup47 : SchedWriteRes<[SPRPort00]> {
95806c3fb27SDimitry Andric  let Latency = 15;
95906c3fb27SDimitry Andric}
96006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup47], (instregex "^DIVR_F(P?)rST0$")>;
96106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup47], (instrs DIVR_FST0r)>;
96206c3fb27SDimitry Andric
96306c3fb27SDimitry Andricdef SPRWriteResGroup48 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
96406c3fb27SDimitry Andric  let Latency = 19;
96506c3fb27SDimitry Andric  let NumMicroOps = 2;
96606c3fb27SDimitry Andric}
96706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup48, ReadAfterVecLd], (instregex "^(V?)DIVSDrm$")>;
96806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup48, ReadAfterVecLd], (instrs VDIVSDZrm)>;
96906c3fb27SDimitry Andric
97006c3fb27SDimitry Andricdef SPRWriteResGroup49 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
97106c3fb27SDimitry Andric  let Latency = 22;
97206c3fb27SDimitry Andric  let NumMicroOps = 2;
97306c3fb27SDimitry Andric}
97406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup49], (instregex "^DIV_F(32|64)m$")>;
97506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup49, ReadAfterVecLd], (instregex "^VSQRTSHZm_Int((k|kz)?)$")>;
97606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup49, ReadAfterVecLd], (instrs VSQRTSHZm)>;
97706c3fb27SDimitry Andric
97806c3fb27SDimitry Andricdef SPRWriteResGroup50 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
97906c3fb27SDimitry Andric  let Latency = 25;
98006c3fb27SDimitry Andric  let NumMicroOps = 3;
98106c3fb27SDimitry Andric}
98206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup50], (instregex "^DIV_FI(16|32)m$")>;
98306c3fb27SDimitry Andric
98406c3fb27SDimitry Andricdef SPRWriteResGroup51 : SchedWriteRes<[SPRPort00]> {
98506c3fb27SDimitry Andric  let Latency = 20;
98606c3fb27SDimitry Andric}
98706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup51], (instregex "^DIV_F(P?)rST0$")>;
98806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup51], (instrs DIV_FST0r)>;
98906c3fb27SDimitry Andric
99006c3fb27SDimitry Andricdef SPRWriteResGroup52 : SchedWriteRes<[SPRPort04, SPRPort04_09]>;
99106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup52], (instregex "^ENQCMD(S?)(16|32|64)$",
99206c3fb27SDimitry Andric                                              "^PUSHA(16|32)$",
99306c3fb27SDimitry Andric                                              "^ST_F(32|64)m$")>;
99406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup52], (instrs PUSHF32)>;
99506c3fb27SDimitry Andric
99606c3fb27SDimitry Andricdef SPRWriteResGroup53 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
9975f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 21, 2, 14, 4, 9, 5];
99806c3fb27SDimitry Andric  let Latency = 126;
99906c3fb27SDimitry Andric  let NumMicroOps = 57;
100006c3fb27SDimitry Andric}
100106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup53], (instrs ENTER)>;
100206c3fb27SDimitry Andric
100306c3fb27SDimitry Andricdef SPRWriteResGroup54 : SchedWriteRes<[SPRPort04_09, SPRPort05, SPRPort07_08]> {
100406c3fb27SDimitry Andric  let Latency = 12;
100506c3fb27SDimitry Andric  let NumMicroOps = 3;
100606c3fb27SDimitry Andric}
100706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup54], (instregex "^(V?)EXTRACTPSmr$",
100806c3fb27SDimitry Andric                                              "^VPMOVQDZ((256)?)mr$")>;
100906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup54], (instrs SMSW16m,
101006c3fb27SDimitry Andric                                           VEXTRACTPSZmr)>;
101106c3fb27SDimitry Andric
101206c3fb27SDimitry Andricdef SPRWriteResGroup55 : SchedWriteRes<[SPRPort00, SPRPort05]> {
101306c3fb27SDimitry Andric  let Latency = 4;
101406c3fb27SDimitry Andric  let NumMicroOps = 2;
101506c3fb27SDimitry Andric}
101606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup55], (instregex "^(V?)EXTRACTPSrr$")>;
101706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup55], (instrs MMX_PEXTRWrr,
101806c3fb27SDimitry Andric                                           VEXTRACTPSZrr,
101906c3fb27SDimitry Andric                                           VPERMWZrr)>;
102006c3fb27SDimitry Andric
102106c3fb27SDimitry Andricdef SPRWriteResGroup56 : SchedWriteRes<[SPRPort02_03, SPRPort02_03_11, SPRPort04, SPRPort04_09, SPRPort06]> {
102206c3fb27SDimitry Andric  let Latency = 7;
102306c3fb27SDimitry Andric  let NumMicroOps = 5;
102406c3fb27SDimitry Andric}
102506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup56], (instrs FARCALL64m)>;
102606c3fb27SDimitry Andric
102706c3fb27SDimitry Andricdef SPRWriteResGroup57 : SchedWriteRes<[SPRPort02_03_11, SPRPort06]> {
102806c3fb27SDimitry Andric  let Latency = 6;
102906c3fb27SDimitry Andric  let NumMicroOps = 2;
103006c3fb27SDimitry Andric}
103106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup57], (instrs FARJMP64m,
103206c3fb27SDimitry Andric                                           JMP64m_REX)>;
103306c3fb27SDimitry Andric
103406c3fb27SDimitry Andricdef SPRWriteResGroup58 : SchedWriteRes<[SPRPort04, SPRPort04_09]> {
103506c3fb27SDimitry Andric  let NumMicroOps = 2;
103606c3fb27SDimitry Andric}
103706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup58], (instregex "^(V?)MASKMOVDQU((64)?)$",
103806c3fb27SDimitry Andric                                              "^ST_FP(32|64|80)m$")>;
103906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup58], (instrs FBSTPm,
104006c3fb27SDimitry Andric                                           VMPTRSTm)>;
104106c3fb27SDimitry Andric
104206c3fb27SDimitry Andricdef SPRWriteResGroup59 : SchedWriteRes<[SPRPort00_05]> {
10435f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
104406c3fb27SDimitry Andric  let Latency = 2;
104506c3fb27SDimitry Andric  let NumMicroOps = 2;
104606c3fb27SDimitry Andric}
104706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup59], (instrs FDECSTP)>;
104806c3fb27SDimitry Andric
104906c3fb27SDimitry Andricdef SPRWriteResGroup60 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
10505f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
105106c3fb27SDimitry Andric  let Latency = 11;
105206c3fb27SDimitry Andric  let NumMicroOps = 3;
105306c3fb27SDimitry Andric}
105406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup60], (instregex "^FICOM(P?)(16|32)m$")>;
105506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup60, ReadAfterVecYLd], (instregex "^VEXPANDP(D|S)Z((256)?)rm((k|kz)?)$",
105606c3fb27SDimitry Andric                                                               "^VPEXPAND(B|D|Q|W)Z((256)?)rm$",
105706c3fb27SDimitry Andric                                                               "^VPEXPAND(D|Q)Z((256)?)rmk(z?)$")>;
105806c3fb27SDimitry Andric
105906c3fb27SDimitry Andricdef SPRWriteResGroup61 : SchedWriteRes<[SPRPort00_05]>;
106006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup61], (instregex "^MMX_P(ADD|SUB)(B|D|Q|W)rr$",
106106c3fb27SDimitry Andric                                              "^VP(ADD|SUB)(B|D|Q|W)Zrr$",
106206c3fb27SDimitry Andric                                              "^VP(ADD|SUB)(D|Q)Zrrk(z?)$",
106306c3fb27SDimitry Andric                                              "^VPTERNLOG(D|Q)Zrri((k|kz)?)$")>;
106406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup61], (instrs FINCSTP,
106506c3fb27SDimitry Andric                                           FNOP)>;
106606c3fb27SDimitry Andric
106706c3fb27SDimitry Andricdef SPRWriteResGroup62 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
106806c3fb27SDimitry Andric  let Latency = 7;
106906c3fb27SDimitry Andric  let NumMicroOps = 3;
107006c3fb27SDimitry Andric}
107106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup62], (instrs FLDCW16m)>;
107206c3fb27SDimitry Andric
107306c3fb27SDimitry Andricdef SPRWriteResGroup63 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03, SPRPort02_03_11]> {
10745f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 5, 10, 39, 8];
107506c3fb27SDimitry Andric  let Latency = 62;
107606c3fb27SDimitry Andric  let NumMicroOps = 64;
107706c3fb27SDimitry Andric}
107806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup63], (instrs FLDENVm)>;
107906c3fb27SDimitry Andric
108006c3fb27SDimitry Andricdef SPRWriteResGroup64 : SchedWriteRes<[SPRPort00_01_05_06]> {
10815f757f3fSDimitry Andric  let ReleaseAtCycles = [4];
108206c3fb27SDimitry Andric  let Latency = 4;
108306c3fb27SDimitry Andric  let NumMicroOps = 4;
108406c3fb27SDimitry Andric}
108506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup64], (instrs FNCLEX)>;
108606c3fb27SDimitry Andric
108706c3fb27SDimitry Andricdef SPRWriteResGroup65 : SchedWriteRes<[SPRPort00_01_05_06, SPRPort00_05, SPRPort05]> {
10885f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 3, 6];
108906c3fb27SDimitry Andric  let Latency = 75;
109006c3fb27SDimitry Andric  let NumMicroOps = 15;
109106c3fb27SDimitry Andric}
109206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup65], (instrs FNINIT)>;
109306c3fb27SDimitry Andric
109406c3fb27SDimitry Andricdef SPRWriteResGroup66 : SchedWriteRes<[SPRPort04, SPRPort04_09, SPRPort06]> {
109506c3fb27SDimitry Andric  let Latency = 2;
109606c3fb27SDimitry Andric  let NumMicroOps = 3;
109706c3fb27SDimitry Andric}
109806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup66], (instrs FNSTCW16m)>;
109906c3fb27SDimitry Andric
110006c3fb27SDimitry Andricdef SPRWriteResGroup67 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06]> {
110106c3fb27SDimitry Andric  let Latency = 3;
110206c3fb27SDimitry Andric  let NumMicroOps = 2;
110306c3fb27SDimitry Andric}
110406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup67], (instrs FNSTSW16r)>;
110506c3fb27SDimitry Andric
110606c3fb27SDimitry Andricdef SPRWriteResGroup68 : SchedWriteRes<[SPRPort00, SPRPort04, SPRPort04_09]> {
110706c3fb27SDimitry Andric  let Latency = 3;
110806c3fb27SDimitry Andric  let NumMicroOps = 3;
110906c3fb27SDimitry Andric}
111006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup68], (instrs FNSTSWm)>;
111106c3fb27SDimitry Andric
111206c3fb27SDimitry Andricdef SPRWriteResGroup69 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06, SPRPort00_06, SPRPort01, SPRPort04, SPRPort04_09, SPRPort05, SPRPort06]> {
11135f757f3fSDimitry Andric  let ReleaseAtCycles = [9, 11, 21, 1, 30, 11, 16, 1];
111406c3fb27SDimitry Andric  let Latency = 106;
111506c3fb27SDimitry Andric  let NumMicroOps = 100;
111606c3fb27SDimitry Andric}
111706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup69], (instrs FSTENVm)>;
111806c3fb27SDimitry Andric
111906c3fb27SDimitry Andricdef SPRWriteResGroup70 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort01_05, SPRPort02_03, SPRPort02_03_11, SPRPort06]> {
11205f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 2, 1, 47, 33, 2];
112106c3fb27SDimitry Andric  let Latency = 63;
112206c3fb27SDimitry Andric  let NumMicroOps = 90;
112306c3fb27SDimitry Andric}
112406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup70], (instrs FXRSTOR)>;
112506c3fb27SDimitry Andric
112606c3fb27SDimitry Andricdef SPRWriteResGroup71 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort01_05, SPRPort02_03, SPRPort02_03_11, SPRPort06]> {
11275f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 2, 1, 45, 31, 4];
112806c3fb27SDimitry Andric  let Latency = 63;
112906c3fb27SDimitry Andric  let NumMicroOps = 88;
113006c3fb27SDimitry Andric}
113106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup71], (instrs FXRSTOR64)>;
113206c3fb27SDimitry Andric
113306c3fb27SDimitry Andricdef SPRWriteResGroup72 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
11345f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 5, 10, 10, 2, 38, 5, 38];
113506c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
113606c3fb27SDimitry Andric  let NumMicroOps = 110;
113706c3fb27SDimitry Andric}
113806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup72], (instregex "^FXSAVE((64)?)$")>;
113906c3fb27SDimitry Andric
114006c3fb27SDimitry Andricdef SPRWriteResGroup73 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
114106c3fb27SDimitry Andric  let Latency = 12;
114206c3fb27SDimitry Andric  let NumMicroOps = 2;
114306c3fb27SDimitry Andric}
114406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73], (instregex "^VPLZCNT(D|Q)Z256rm((b|k|bk|kz)?)$",
114506c3fb27SDimitry Andric                                              "^VPLZCNT(D|Q)Z256rmbkz$")>;
114606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecXLd], (instregex "^(V?)GF2P8AFFINE((INV)?)QBrmi$",
114706c3fb27SDimitry Andric                                                               "^(V?)GF2P8MULBrm$",
114806c3fb27SDimitry Andric                                                               "^V(ADD|SUB)PHZ128rm((b|k|bk|kz)?)$",
114906c3fb27SDimitry Andric                                                               "^V(ADD|SUB)PHZ128rmbkz$",
115006c3fb27SDimitry Andric                                                               "^VGETEXPPHZ128m((b|k|bk|kz)?)$",
115106c3fb27SDimitry Andric                                                               "^VGETEXPSHZm((k|kz)?)$",
115206c3fb27SDimitry Andric                                                               "^VGETMANTPHZ128rm(bi|ik)$",
115306c3fb27SDimitry Andric                                                               "^VGETMANTPHZ128rmbik(z?)$",
115406c3fb27SDimitry Andric                                                               "^VGETMANTPHZ128rmi((kz)?)$",
115506c3fb27SDimitry Andric                                                               "^VGETMANTSHZrmi((k|kz)?)$",
115606c3fb27SDimitry Andric                                                               "^VGF2P8AFFINE((INV)?)QBZ128rm(b?)i$",
115706c3fb27SDimitry Andric                                                               "^VM(AX|IN)CPHZ128rm((b|k|bk|kz)?)$",
115806c3fb27SDimitry Andric                                                               "^VM(AX|IN)CPHZ128rmbkz$",
115906c3fb27SDimitry Andric                                                               "^VM(AX|IN|UL)PHZ128rm((b|k|bk|kz)?)$",
116006c3fb27SDimitry Andric                                                               "^VM(AX|IN|UL)PHZ128rmbkz$")>;
116106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecXLd], (instrs VGETEXPPHZ128mbkz,
116206c3fb27SDimitry Andric                                                            VGF2P8MULBZ128rm)>;
116306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecLd], (instregex "^V(ADD|SUB)SHZrm$",
116406c3fb27SDimitry Andric                                                              "^V(ADD|SUB)SHZrm_Int((k|kz)?)$",
116506c3fb27SDimitry Andric                                                              "^VCVTSH2SSZrm((_Int)?)$",
116606c3fb27SDimitry Andric                                                              "^VM(AX|IN)CSHZrm$",
116706c3fb27SDimitry Andric                                                              "^VM(AX|IN|UL)SHZrm$",
116806c3fb27SDimitry Andric                                                              "^VM(AX|IN|UL)SHZrm_Int((k|kz)?)$")>;
116906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecYLd], (instregex "^VGF2P8AFFINE((INV)?)QBYrmi$",
117006c3fb27SDimitry Andric                                                               "^VGF2P8AFFINE((INV)?)QBZ256rm(b?)i$",
117106c3fb27SDimitry Andric                                                               "^VGF2P8MULB(Y|Z256)rm$")>;
117206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecXLd, ReadAfterVecXLd], (instregex "^VF(N?)M(ADD|SUB)(132|213|231)PHZ128m((b|k|bk|kz)?)$",
117306c3fb27SDimitry Andric                                                                                "^VF(N?)M(ADD|SUB)(132|213|231)PHZ128mbkz$",
117406c3fb27SDimitry Andric                                                                                "^VFMADDSUB(132|213|231)PHZ128m((b|k|bk|kz)?)$",
117506c3fb27SDimitry Andric                                                                                "^VFMADDSUB(132|213|231)PHZ128mbkz$",
117606c3fb27SDimitry Andric                                                                                "^VFMSUBADD(132|213|231)PHZ128m((b|k|bk|kz)?)$",
117706c3fb27SDimitry Andric                                                                                "^VFMSUBADD(132|213|231)PHZ128mbkz$")>;
117806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecLd, ReadAfterVecLd], (instregex "^VF(N?)M(ADD|SUB)(132|213|231)SHZm$",
117906c3fb27SDimitry Andric                                                                              "^VF(N?)M(ADD|SUB)(132|213|231)SHZm_Int((k|kz)?)$")>;
118006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup73, ReadAfterVecYLd, ReadAfterVecYLd], (instregex "^VPMADD52(H|L)UQZ256m((b|k|bk|kz)?)$",
118106c3fb27SDimitry Andric                                                                                "^VPMADD52(H|L)UQZ256mbkz$")>;
118206c3fb27SDimitry Andric
118306c3fb27SDimitry Andricdef SPRWriteResGroup74 : SchedWriteRes<[SPRPort00_01]> {
118406c3fb27SDimitry Andric  let Latency = 5;
118506c3fb27SDimitry Andric}
118606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup74], (instregex "^(V?)GF2P8MULBrr$",
118706c3fb27SDimitry Andric                                              "^V(ADD|SUB)PHZ(128|256)rr$",
118806c3fb27SDimitry Andric                                              "^V(ADD|SUB)SHZrr$",
118906c3fb27SDimitry Andric                                              "^V(ADD|SUB)SHZrr(b?)_Int$",
119006c3fb27SDimitry Andric                                              "^VCVT(T?)PH2(U?)WZ(128|256)rr$",
119106c3fb27SDimitry Andric                                              "^VCVTSH2SSZrr(b?)_Int$",
119206c3fb27SDimitry Andric                                              "^VCVT(U?)W2PHZ(128|256)rr$",
119306c3fb27SDimitry Andric                                              "^VF(N?)M(ADD|SUB)(132|213|231)PHZ(128|256)r$",
119406c3fb27SDimitry Andric                                              "^VF(N?)M(ADD|SUB)(132|213|231)SHZr(b?)((_Int)?)$",
119506c3fb27SDimitry Andric                                              "^VFMADDSUB(132|213|231)PHZ(128|256)r$",
119606c3fb27SDimitry Andric                                              "^VFMSUBADD(132|213|231)PHZ(128|256)r$",
119706c3fb27SDimitry Andric                                              "^VGETEXPPHZ(128|256)r$",
119806c3fb27SDimitry Andric                                              "^VGETEXPSHZr(b?)$",
119906c3fb27SDimitry Andric                                              "^VGETMANTPHZ(128|256)rri$",
120006c3fb27SDimitry Andric                                              "^VGETMANTSHZrri(b?)$",
120106c3fb27SDimitry Andric                                              "^VGF2P8MULBZ(128|256)rr$",
120206c3fb27SDimitry Andric                                              "^VM(AX|IN)CPHZ(128|256)rr$",
120306c3fb27SDimitry Andric                                              "^VM(AX|IN)CSHZrr$",
120406c3fb27SDimitry Andric                                              "^VM(AX|IN|UL)PHZ(128|256)rr$",
120506c3fb27SDimitry Andric                                              "^VM(AX|IN|UL)SHZrr$",
120606c3fb27SDimitry Andric                                              "^VM(AX|IN|UL)SHZrr(b?)_Int$")>;
120706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup74], (instrs VCVTSH2SSZrr,
120806c3fb27SDimitry Andric                                           VGF2P8MULBYrr)>;
120906c3fb27SDimitry Andric
121006c3fb27SDimitry Andricdef SPRWriteResGroup75 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12115f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 5, 26, 19, 2, 7, 21];
121206c3fb27SDimitry Andric  let Latency = 35;
121306c3fb27SDimitry Andric  let NumMicroOps = 87;
121406c3fb27SDimitry Andric}
121506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup75], (instrs IN16ri)>;
121606c3fb27SDimitry Andric
121706c3fb27SDimitry Andricdef SPRWriteResGroup76 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12185f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 1, 4, 26, 19, 3, 7, 20];
121906c3fb27SDimitry Andric  let Latency = 35;
122006c3fb27SDimitry Andric  let NumMicroOps = 87;
122106c3fb27SDimitry Andric}
122206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup76], (instrs IN16rr)>;
122306c3fb27SDimitry Andric
122406c3fb27SDimitry Andricdef SPRWriteResGroup77 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12255f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 28, 21, 2, 10, 20];
122606c3fb27SDimitry Andric  let Latency = 35;
122706c3fb27SDimitry Andric  let NumMicroOps = 94;
122806c3fb27SDimitry Andric}
122906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup77], (instrs IN32ri)>;
123006c3fb27SDimitry Andric
123106c3fb27SDimitry Andricdef SPRWriteResGroup78 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12325f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 9, 28, 21, 2, 11, 21];
123306c3fb27SDimitry Andric  let NumMicroOps = 99;
123406c3fb27SDimitry Andric}
123506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup78], (instrs IN32rr)>;
123606c3fb27SDimitry Andric
123706c3fb27SDimitry Andricdef SPRWriteResGroup79 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12385f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 25, 19, 2, 8, 20];
123906c3fb27SDimitry Andric  let Latency = 35;
124006c3fb27SDimitry Andric  let NumMicroOps = 87;
124106c3fb27SDimitry Andric}
124206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup79], (instrs IN8ri)>;
124306c3fb27SDimitry Andric
124406c3fb27SDimitry Andricdef SPRWriteResGroup80 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort05]> {
12455f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 25, 19, 2, 7, 20];
124606c3fb27SDimitry Andric  let Latency = 35;
124706c3fb27SDimitry Andric  let NumMicroOps = 86;
124806c3fb27SDimitry Andric}
124906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup80], (instrs IN8rr)>;
125006c3fb27SDimitry Andric
125106c3fb27SDimitry Andricdef SPRWriteResGroup81 : SchedWriteRes<[SPRPort00_06]> {
125206c3fb27SDimitry Andric  let NumMicroOps = 4;
125306c3fb27SDimitry Andric}
125406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup81], (instrs INC16r_alt)>;
125506c3fb27SDimitry Andric
125606c3fb27SDimitry Andricdef SPRWriteResGroup82 : SchedWriteRes<[SPRPort02_03_11]> {
125706c3fb27SDimitry Andric  let Latency = 7;
125806c3fb27SDimitry Andric}
125906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup82], (instregex "^LD_F(32|64|80)m$",
126006c3fb27SDimitry Andric                                              "^(V?)MOV(D|SH|SL)DUPrm$",
126106c3fb27SDimitry Andric                                              "^VBROADCASTSS((Z128)?)rm$",
126206c3fb27SDimitry Andric                                              "^VMOV(D|SH|SL)DUPZ128rm$",
126306c3fb27SDimitry Andric                                              "^VPBROADCAST(D|Q)((Z128)?)rm$")>;
126406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup82], (instrs INC32r_alt,
126506c3fb27SDimitry Andric                                           VBROADCASTI32X2Z128rm)>;
126606c3fb27SDimitry Andric
126706c3fb27SDimitry Andricdef SPRWriteResGroup83 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
12685f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 24, 17, 8, 1, 19, 1];
126906c3fb27SDimitry Andric  let Latency = 20;
127006c3fb27SDimitry Andric  let NumMicroOps = 83;
127106c3fb27SDimitry Andric}
127206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup83], (instrs INSB)>;
127306c3fb27SDimitry Andric
127406c3fb27SDimitry Andricdef SPRWriteResGroup84 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
12755f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 1, 5, 1, 27, 17, 11, 1, 21, 1];
127606c3fb27SDimitry Andric  let Latency = 20;
127706c3fb27SDimitry Andric  let NumMicroOps = 92;
127806c3fb27SDimitry Andric}
127906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup84], (instrs INSL)>;
128006c3fb27SDimitry Andric
128106c3fb27SDimitry Andricdef SPRWriteResGroup85 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
12825f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 1, 4, 1, 25, 17, 1, 9, 1, 19, 1];
128306c3fb27SDimitry Andric  let Latency = 20;
128406c3fb27SDimitry Andric  let NumMicroOps = 86;
128506c3fb27SDimitry Andric}
128606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup85], (instrs INSW)>;
128706c3fb27SDimitry Andric
128806c3fb27SDimitry Andricdef SPRWriteResGroup86 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort04_09, SPRPort05, SPRPort07_08]> {
12895f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 4, 8, 6, 2, 5, 7, 5];
129006c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
129106c3fb27SDimitry Andric  let NumMicroOps = 42;
129206c3fb27SDimitry Andric}
129306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup86], (instrs INVLPG)>;
129406c3fb27SDimitry Andric
129506c3fb27SDimitry Andricdef SPRWriteResGroup87 : SchedWriteRes<[SPRPort04, SPRPort04_09, SPRPort05]> {
129606c3fb27SDimitry Andric  let Latency = 4;
129706c3fb27SDimitry Andric  let NumMicroOps = 3;
129806c3fb27SDimitry Andric}
129906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup87], (instregex "^IST(T?)_FP(16|32|64)m$",
130006c3fb27SDimitry Andric                                              "^IST_F(16|32)m$")>;
130106c3fb27SDimitry Andric
130206c3fb27SDimitry Andricdef SPRWriteResGroup88 : SchedWriteRes<[SPRPort00_01_05_06, SPRPort00_06]> {
130306c3fb27SDimitry Andric  let Latency = 2;
130406c3fb27SDimitry Andric  let NumMicroOps = 2;
130506c3fb27SDimitry Andric}
130606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup88], (instrs JCXZ)>;
130706c3fb27SDimitry Andric
130806c3fb27SDimitry Andricdef SPRWriteResGroup89 : SchedWriteRes<[SPRPort06]>;
130906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup89], (instrs JMP64r_REX)>;
131006c3fb27SDimitry Andric
131106c3fb27SDimitry Andricdef SPRWriteResGroup90 : SchedWriteRes<[]> {
131206c3fb27SDimitry Andric  let Latency = 0;
131306c3fb27SDimitry Andric  let NumMicroOps = 0;
131406c3fb27SDimitry Andric}
131506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup90], (instregex "^JMP_(1|4)$")>;
131606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup90], (instrs VZEROUPPER)>;
131706c3fb27SDimitry Andric
131806c3fb27SDimitry Andricdef SPRWriteResGroup91 : SchedWriteRes<[SPRPort05]> {
131906c3fb27SDimitry Andric  let Latency = 4;
132006c3fb27SDimitry Andric}
132106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup91], (instregex "^KADD(B|D|Q|W)rr$",
132206c3fb27SDimitry Andric                                              "^KSHIFT(LB|RD|RQ|RW)ri$",
132306c3fb27SDimitry Andric                                              "^KSHIFT(LD|RB)ri$",
132406c3fb27SDimitry Andric                                              "^KSHIFTL(Q|W)ri$",
132506c3fb27SDimitry Andric                                              "^KUNPCK(BW|DQ|WD)rr$")>;
132606c3fb27SDimitry Andric
132706c3fb27SDimitry Andricdef SPRWriteResGroup92 : SchedWriteRes<[SPRPort00]>;
132806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup92], (instregex "^KAND(B|D|Q|W|ND|NQ|NW)rr$",
132906c3fb27SDimitry Andric                                              "^KMOV(B|D|Q|W)kk$",
133006c3fb27SDimitry Andric                                              "^KNOT(B|D|Q|W)rr$",
133106c3fb27SDimitry Andric                                              "^K((X|XN)?)OR(B|D|Q|W)rr$",
133206c3fb27SDimitry Andric                                              "^VP(A|SU)BSBZrr$",
133306c3fb27SDimitry Andric                                              "^VPABS(D|Q|W)Zrr$",
133406c3fb27SDimitry Andric                                              "^VPABS(D|Q)Zrrk(z?)$",
133506c3fb27SDimitry Andric                                              "^VPADD(U?)S(B|W)Zrr$",
133606c3fb27SDimitry Andric                                              "^VPAVG(B|W)Zrr$",
133706c3fb27SDimitry Andric                                              "^VPM(AX|IN)(SB|UD|UW)Zrr$",
133806c3fb27SDimitry Andric                                              "^VPM(AX|IN)(SD|UB)Zrr$",
133906c3fb27SDimitry Andric                                              "^VPM(AX|IN)(S|U)DZrrk(z?)$",
134006c3fb27SDimitry Andric                                              "^VPM(AX|IN)SWZrr$",
134106c3fb27SDimitry Andric                                              "^VPSH(L|R)D(D|Q|W)Zrri$",
134206c3fb27SDimitry Andric                                              "^VPSH(L|R)DV(D|Q|W)Zr$",
134306c3fb27SDimitry Andric                                              "^VPSH(L|R)DV(D|Q)Zrk(z?)$",
134406c3fb27SDimitry Andric                                              "^VPSUB(U?)SWZrr$")>;
134506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup92], (instrs KANDNBrr,
134606c3fb27SDimitry Andric                                           VPSUBUSBZrr)>;
134706c3fb27SDimitry Andric
134806c3fb27SDimitry Andricdef SPRWriteResGroup93 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
134906c3fb27SDimitry Andric  let Latency = 7;
135006c3fb27SDimitry Andric  let NumMicroOps = 2;
135106c3fb27SDimitry Andric}
135206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup93], (instregex "^KMOV(B|D|Q|W)km$")>;
135306c3fb27SDimitry Andric
135406c3fb27SDimitry Andricdef SPRWriteResGroup94 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
135506c3fb27SDimitry Andric  let Latency = 13;
135606c3fb27SDimitry Andric  let NumMicroOps = 2;
135706c3fb27SDimitry Andric}
135806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup94], (instregex "^MOV8m(i|r)$")>;
135906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup94], (instrs KMOVBmk,
136006c3fb27SDimitry Andric                                           MOV8mr_NOREX)>;
136106c3fb27SDimitry Andric
136206c3fb27SDimitry Andricdef SPRWriteResGroup95 : SchedWriteRes<[SPRPort05]>;
136306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup95], (instregex "^(V?)PALIGNRrri$",
136406c3fb27SDimitry Andric                                              "^VALIGN(D|Q)Z128rri((k|kz)?)$",
136506c3fb27SDimitry Andric                                              "^VBROADCASTSSZ128rr((k|kz)?)$",
136606c3fb27SDimitry Andric                                              "^VPALIGNR(Y|Z)rri$",
136706c3fb27SDimitry Andric                                              "^VPALIGNRZ(128|256)rri$",
136806c3fb27SDimitry Andric                                              "^VPBROADCAST(B|D|Q|W)rr$",
136906c3fb27SDimitry Andric                                              "^VPSHUF(D|HW|LW)Zri$",
137006c3fb27SDimitry Andric                                              "^VPSHUFDZrik(z?)$",
137106c3fb27SDimitry Andric                                              "^VPS(L|R)LDQZri$",
137206c3fb27SDimitry Andric                                              "^VPUNPCK(H|L)(BW|WD)Zrr$",
137306c3fb27SDimitry Andric                                              "^VPUNPCK(H|L|LQ)DQZrr((k|kz)?)$",
137406c3fb27SDimitry Andric                                              "^VPUNPCKHQDQZrr((k|kz)?)$")>;
137506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup95], (instrs KMOVQkr,
137606c3fb27SDimitry Andric                                           VPSHUFBZrr)>;
137706c3fb27SDimitry Andric
137806c3fb27SDimitry Andricdef SPRWriteResGroup96 : SchedWriteRes<[SPRPort00]> {
137906c3fb27SDimitry Andric  let Latency = 3;
138006c3fb27SDimitry Andric}
138106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup96], (instregex "^K((OR)?)TEST(B|D|Q|W)rr$",
138206c3fb27SDimitry Andric                                              "^VP(A|SU)BS(B|W)Zrrk(z?)$",
138306c3fb27SDimitry Andric                                              "^VPADD(U?)S(B|W)Zrrk(z?)$",
138406c3fb27SDimitry Andric                                              "^VPAVG(B|W)Zrrk(z?)$",
138506c3fb27SDimitry Andric                                              "^VPM(AX|IN)(SB|UW)Zrrk(z?)$",
138606c3fb27SDimitry Andric                                              "^VPM(AX|IN)(SW|UB)Zrrk(z?)$",
138706c3fb27SDimitry Andric                                              "^VPSH(L|R)DVWZrk(z?)$",
138806c3fb27SDimitry Andric                                              "^VPS(L|R)LVWZrrk(z?)$",
138906c3fb27SDimitry Andric                                              "^VPS(L|R)LWZrik(z?)$",
139006c3fb27SDimitry Andric                                              "^VPSRAVWZrrk(z?)$",
139106c3fb27SDimitry Andric                                              "^VPSRAWZrik(z?)$",
139206c3fb27SDimitry Andric                                              "^VPSUBUS(B|W)Zrrk(z?)$")>;
139306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup96], (instrs VMOVSDto64Zrr)>;
139406c3fb27SDimitry Andric
139506c3fb27SDimitry Andricdef SPRWriteResGroup97 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
13965f757f3fSDimitry Andric  let ReleaseAtCycles = [8, 2, 14, 3, 1];
139706c3fb27SDimitry Andric  let Latency = 198;
139806c3fb27SDimitry Andric  let NumMicroOps = 81;
139906c3fb27SDimitry Andric}
140006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup97], (instrs LAR16rm)>;
140106c3fb27SDimitry Andric
140206c3fb27SDimitry Andricdef SPRWriteResGroup98 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
14035f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 3, 1, 8, 5, 1, 2, 1];
140406c3fb27SDimitry Andric  let Latency = 66;
140506c3fb27SDimitry Andric  let NumMicroOps = 22;
140606c3fb27SDimitry Andric}
140706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup98], (instrs LAR16rr)>;
140806c3fb27SDimitry Andric
140906c3fb27SDimitry Andricdef SPRWriteResGroup99 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
14105f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 2, 9, 5, 3, 1];
141106c3fb27SDimitry Andric  let Latency = 71;
141206c3fb27SDimitry Andric  let NumMicroOps = 85;
141306c3fb27SDimitry Andric}
141406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup99], (instrs LAR32rm)>;
141506c3fb27SDimitry Andric
141606c3fb27SDimitry Andricdef SPRWriteResGroup100 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
14175f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 3, 1, 8, 5, 1, 2, 1];
141806c3fb27SDimitry Andric  let Latency = 65;
141906c3fb27SDimitry Andric  let NumMicroOps = 22;
142006c3fb27SDimitry Andric}
142106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup100], (instregex "^LAR(32|64)rr$")>;
142206c3fb27SDimitry Andric
142306c3fb27SDimitry Andricdef SPRWriteResGroup101 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
14245f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 2, 9, 5, 3, 1];
142506c3fb27SDimitry Andric  let Latency = 71;
142606c3fb27SDimitry Andric  let NumMicroOps = 87;
142706c3fb27SDimitry Andric}
142806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup101], (instrs LAR64rm)>;
142906c3fb27SDimitry Andric
143006c3fb27SDimitry Andricdef SPRWriteResGroup102 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01]> {
143106c3fb27SDimitry Andric  let Latency = 2;
143206c3fb27SDimitry Andric  let NumMicroOps = 2;
143306c3fb27SDimitry Andric}
143406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup102], (instrs LEA16r)>;
143506c3fb27SDimitry Andric
143606c3fb27SDimitry Andricdef SPRWriteResGroup103 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
14375f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
143806c3fb27SDimitry Andric  let Latency = 6;
143906c3fb27SDimitry Andric  let NumMicroOps = 4;
144006c3fb27SDimitry Andric}
144106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup103], (instregex "^LODS(B|W)$",
144206c3fb27SDimitry Andric                                               "^SCAS(B|L|Q|W)$")>;
144306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup103], (instrs LEAVE)>;
144406c3fb27SDimitry Andric
144506c3fb27SDimitry Andricdef SPRWriteResGroup104 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
14465f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
144706c3fb27SDimitry Andric  let Latency = 6;
144806c3fb27SDimitry Andric  let NumMicroOps = 3;
144906c3fb27SDimitry Andric}
145006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup104], (instrs LEAVE64)>;
145106c3fb27SDimitry Andric
145206c3fb27SDimitry Andricdef SPRWriteResGroup105 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
14535f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 4, 3, 2, 1, 1];
145406c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
145506c3fb27SDimitry Andric  let NumMicroOps = 14;
145606c3fb27SDimitry Andric}
145706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup105], (instrs LGDT64m)>;
145806c3fb27SDimitry Andric
145906c3fb27SDimitry Andricdef SPRWriteResGroup106 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
14605f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 5, 3, 2, 1, 1];
146106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
146206c3fb27SDimitry Andric  let NumMicroOps = 14;
146306c3fb27SDimitry Andric}
146406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup106], (instrs LIDT64m)>;
146506c3fb27SDimitry Andric
146606c3fb27SDimitry Andricdef SPRWriteResGroup107 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
14675f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 3, 2, 1, 1];
146806c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
146906c3fb27SDimitry Andric  let NumMicroOps = 12;
147006c3fb27SDimitry Andric}
147106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup107], (instrs LLDT16m)>;
147206c3fb27SDimitry Andric
147306c3fb27SDimitry Andricdef SPRWriteResGroup108 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
14745f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 4, 3, 1, 1, 1];
147506c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
147606c3fb27SDimitry Andric  let NumMicroOps = 11;
147706c3fb27SDimitry Andric}
147806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup108], (instrs LLDT16r)>;
147906c3fb27SDimitry Andric
148006c3fb27SDimitry Andricdef SPRWriteResGroup109 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
14815f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 8, 3, 1, 2, 7, 2];
148206c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
148306c3fb27SDimitry Andric  let NumMicroOps = 27;
148406c3fb27SDimitry Andric}
148506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup109], (instrs LMSW16m)>;
148606c3fb27SDimitry Andric
148706c3fb27SDimitry Andricdef SPRWriteResGroup110 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort04_09, SPRPort05, SPRPort07_08]> {
14885f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 7, 1, 2, 5, 2];
148906c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
149006c3fb27SDimitry Andric  let NumMicroOps = 22;
149106c3fb27SDimitry Andric}
149206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup110], (instrs LMSW16r)>;
149306c3fb27SDimitry Andric
149406c3fb27SDimitry Andricdef SPRWriteResGroup111 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
14955f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
149606c3fb27SDimitry Andric  let Latency = 5;
149706c3fb27SDimitry Andric  let NumMicroOps = 3;
149806c3fb27SDimitry Andric}
149906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup111], (instregex "^LODS(L|Q)$")>;
150006c3fb27SDimitry Andric
150106c3fb27SDimitry Andricdef SPRWriteResGroup112 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
15025f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 4, 1];
150306c3fb27SDimitry Andric  let Latency = 3;
150406c3fb27SDimitry Andric  let NumMicroOps = 7;
150506c3fb27SDimitry Andric}
150606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup112], (instrs LOOP)>;
150706c3fb27SDimitry Andric
150806c3fb27SDimitry Andricdef SPRWriteResGroup113 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
15095f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 6, 1];
151006c3fb27SDimitry Andric  let Latency = 3;
151106c3fb27SDimitry Andric  let NumMicroOps = 11;
151206c3fb27SDimitry Andric}
151306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup113], (instrs LOOPE)>;
151406c3fb27SDimitry Andric
151506c3fb27SDimitry Andricdef SPRWriteResGroup114 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
15165f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 6, 1];
151706c3fb27SDimitry Andric  let Latency = 2;
151806c3fb27SDimitry Andric  let NumMicroOps = 11;
151906c3fb27SDimitry Andric}
152006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup114], (instrs LOOPNE)>;
152106c3fb27SDimitry Andric
152206c3fb27SDimitry Andricdef SPRWriteResGroup115 : SchedWriteRes<[SPRPort02_03, SPRPort02_03_11, SPRPort06]> {
152306c3fb27SDimitry Andric  let Latency = 7;
152406c3fb27SDimitry Andric  let NumMicroOps = 3;
152506c3fb27SDimitry Andric}
152606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup115], (instrs LRET64)>;
152706c3fb27SDimitry Andric
152806c3fb27SDimitry Andricdef SPRWriteResGroup116 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
15295f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 5, 3, 3, 1];
153006c3fb27SDimitry Andric  let Latency = 70;
153106c3fb27SDimitry Andric  let NumMicroOps = 13;
153206c3fb27SDimitry Andric}
153306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup116], (instregex "^LSL(16|32|64)rm$")>;
153406c3fb27SDimitry Andric
153506c3fb27SDimitry Andricdef SPRWriteResGroup117 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
15365f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 4, 4, 3, 2, 1];
153706c3fb27SDimitry Andric  let Latency = 63;
153806c3fb27SDimitry Andric  let NumMicroOps = 15;
153906c3fb27SDimitry Andric}
154006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup117], (instregex "^LSL(16|32|64)rr$")>;
154106c3fb27SDimitry Andric
154206c3fb27SDimitry Andricdef SPRWriteResGroup118 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
154306c3fb27SDimitry Andric  let Latency = 24;
154406c3fb27SDimitry Andric  let NumMicroOps = 3;
154506c3fb27SDimitry Andric}
154606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup118], (instregex "^MMX_CVT(T?)PD2PIrm$")>;
154706c3fb27SDimitry Andric
154806c3fb27SDimitry Andricdef SPRWriteResGroup119 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
154906c3fb27SDimitry Andric  let Latency = 8;
155006c3fb27SDimitry Andric  let NumMicroOps = 2;
155106c3fb27SDimitry Andric}
155206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup119], (instregex "^MMX_CVT(T?)PD2PIrr$",
155306c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)DQZ(128|256)rr$",
155406c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZ256rr$")>;
155506c3fb27SDimitry Andric
155606c3fb27SDimitry Andricdef SPRWriteResGroup120 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
155706c3fb27SDimitry Andric  let Latency = 6;
155806c3fb27SDimitry Andric  let NumMicroOps = 2;
155906c3fb27SDimitry Andric}
156006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup120], (instregex "^VCVTP(H2PS|S2PH)XZ128rr$",
156106c3fb27SDimitry Andric                                               "^VPERMWZ(128|256)rrk(z?)$",
156206c3fb27SDimitry Andric                                               "^VPS(L|R)LWZ256rrk(z?)$",
156306c3fb27SDimitry Andric                                               "^VPSRAWZ256rrk(z?)$")>;
156406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup120], (instrs MMX_CVTPI2PDrr)>;
156506c3fb27SDimitry Andric
156606c3fb27SDimitry Andricdef SPRWriteResGroup121 : SchedWriteRes<[SPRPort00, SPRPort00_01]> {
156706c3fb27SDimitry Andric  let Latency = 7;
156806c3fb27SDimitry Andric  let NumMicroOps = 2;
156906c3fb27SDimitry Andric}
157006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup121], (instrs MMX_CVTPI2PSrr)>;
157106c3fb27SDimitry Andric
157206c3fb27SDimitry Andricdef SPRWriteResGroup122 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
157306c3fb27SDimitry Andric  let Latency = 13;
157406c3fb27SDimitry Andric  let NumMicroOps = 2;
157506c3fb27SDimitry Andric}
157606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup122], (instregex "^MMX_CVT(T?)PS2PIrm$")>;
157706c3fb27SDimitry Andric
157806c3fb27SDimitry Andricdef SPRWriteResGroup123 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
157906c3fb27SDimitry Andric  let Latency = 9;
158006c3fb27SDimitry Andric  let NumMicroOps = 2;
158106c3fb27SDimitry Andric}
158206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup123], (instregex "^MMX_CVT(T?)PS2PIrr$")>;
158306c3fb27SDimitry Andric
158406c3fb27SDimitry Andricdef SPRWriteResGroup124 : SchedWriteRes<[SPRPort00, SPRPort04_09, SPRPort07_08]> {
15855f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
158606c3fb27SDimitry Andric  let Latency = 12;
158706c3fb27SDimitry Andric  let NumMicroOps = 4;
158806c3fb27SDimitry Andric}
158906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup124], (instregex "^MMX_MASKMOVQ((64)?)$")>;
159006c3fb27SDimitry Andric
159106c3fb27SDimitry Andricdef SPRWriteResGroup125 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
159206c3fb27SDimitry Andric  let Latency = 18;
159306c3fb27SDimitry Andric  let NumMicroOps = 2;
159406c3fb27SDimitry Andric}
159506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup125], (instregex "^VMOV(W|SHZ)mr$")>;
159606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup125], (instrs MMX_MOVD64mr)>;
159706c3fb27SDimitry Andric
159806c3fb27SDimitry Andricdef SPRWriteResGroup126 : SchedWriteRes<[SPRPort02_03_11]> {
159906c3fb27SDimitry Andric  let Latency = 8;
160006c3fb27SDimitry Andric}
160106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup126], (instregex "^MMX_MOV(D|Q)64rm$",
16025f757f3fSDimitry Andric                                               "^VBROADCAST(F|I)128rm$",
160306c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)32X(2|4)Z256rm$",
160406c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)32X(8|2Z)rm$",
160506c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)(32|64)X4rm$",
160606c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)64X2((Z128)?)rm$",
160706c3fb27SDimitry Andric                                               "^VBROADCASTS(DY|SZ)rm$",
160806c3fb27SDimitry Andric                                               "^VBROADCASTS(D|S)Z256rm$",
160906c3fb27SDimitry Andric                                               "^VBROADCASTS(DZ|SY)rm$",
161006c3fb27SDimitry Andric                                               "^VMOV(D|SH|SL)DUP(Y|Z)rm$",
161106c3fb27SDimitry Andric                                               "^VMOV(D|SH|SL)DUPZ256rm$",
161206c3fb27SDimitry Andric                                               "^VPBROADCAST(DY|QZ)rm$",
161306c3fb27SDimitry Andric                                               "^VPBROADCAST(D|Q)Z256rm$",
161406c3fb27SDimitry Andric                                               "^VPBROADCAST(DZ|QY)rm$")>;
161506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup126], (instrs MMX_MOVD64to64rm)>;
161606c3fb27SDimitry Andric
161706c3fb27SDimitry Andricdef SPRWriteResGroup127 : SchedWriteRes<[SPRPort00_01_05, SPRPort00_05]> {
161806c3fb27SDimitry Andric  let Latency = 3;
161906c3fb27SDimitry Andric  let NumMicroOps = 2;
162006c3fb27SDimitry Andric}
162106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup127], (instregex "^MMX_MOV(DQ|FR64)2Qrr$")>;
162206c3fb27SDimitry Andric
162306c3fb27SDimitry Andricdef SPRWriteResGroup128 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
162406c3fb27SDimitry Andric  let Latency = 3;
162506c3fb27SDimitry Andric  let NumMicroOps = 2;
162606c3fb27SDimitry Andric}
162706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup128], (instregex "^MMX_MOVQ2(DQ|FR64)rr$")>;
162806c3fb27SDimitry Andric
162906c3fb27SDimitry Andricdef SPRWriteResGroup129 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
16305f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
163106c3fb27SDimitry Andric  let Latency = 12;
163206c3fb27SDimitry Andric  let NumMicroOps = 3;
163306c3fb27SDimitry Andric}
163406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup129, ReadAfterVecLd], (instregex "^MMX_PACKSS(DW|WB)rm$")>;
163506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup129, ReadAfterVecLd], (instrs MMX_PACKUSWBrm)>;
163606c3fb27SDimitry Andric
163706c3fb27SDimitry Andricdef SPRWriteResGroup130 : SchedWriteRes<[SPRPort05]> {
16385f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
163906c3fb27SDimitry Andric  let Latency = 4;
164006c3fb27SDimitry Andric  let NumMicroOps = 2;
164106c3fb27SDimitry Andric}
164206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup130], (instregex "^MMX_PACKSS(DW|WB)rr$",
164306c3fb27SDimitry Andric                                               "^VPMOV(D|Q|W|SQ|SW)BZrr$",
164406c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZrr$",
164506c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Zrr$",
164606c3fb27SDimitry Andric                                               "^VPMOV(U?)SQDZrrk(z?)$",
164706c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZrr$")>;
164806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup130], (instrs MMX_PACKUSWBrr)>;
164906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup130, ReadDefault, ReadInt2Fpu], (instrs MMX_PINSRWrr)>;
165006c3fb27SDimitry Andric
165106c3fb27SDimitry Andricdef SPRWriteResGroup131 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11]> {
165206c3fb27SDimitry Andric  let Latency = 9;
165306c3fb27SDimitry Andric  let NumMicroOps = 2;
165406c3fb27SDimitry Andric}
165506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup131], (instregex "^VBROADCAST(F|I)32X(8|2Z)rmk(z?)$",
165606c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)(32|64)X4rmk(z?)$",
165706c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)64X2rmk(z?)$",
165806c3fb27SDimitry Andric                                               "^VBROADCASTS(D|S)Zrmk(z?)$",
165906c3fb27SDimitry Andric                                               "^VMOV(A|U)P(D|S)Zrmk(z?)$",
166006c3fb27SDimitry Andric                                               "^VMOV(D|SH|SL)DUPZrmk(z?)$",
166106c3fb27SDimitry Andric                                               "^VMOVDQ(A|U)(32|64)Zrmk(z?)$",
166206c3fb27SDimitry Andric                                               "^VPBROADCAST(D|Q)Zrmk(z?)$")>;
166306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup131, ReadAfterVecLd], (instregex "^MMX_P(ADD|SUB)(B|D|Q|W)rm$")>;
166406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup131, ReadAfterVecYLd], (instregex "^VINSERT(F|I)(32|64)x4Zrm((k|kz)?)$",
166506c3fb27SDimitry Andric                                                                "^VINSERT(F|I)(32x8|64x2)Zrm((k|kz)?)$",
166606c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(B|D|Q|W)Zrm$",
166706c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Zrm(b|k|kz)$",
166806c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Zrmbk(z?)$",
166906c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Zrm(bi|ik)$",
167006c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Zrmbik(z?)$",
167106c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Zrmi((kz)?)$")>;
167206c3fb27SDimitry Andric
167306c3fb27SDimitry Andricdef SPRWriteResGroup132 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
16745f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
167506c3fb27SDimitry Andric  let Latency = 11;
167606c3fb27SDimitry Andric  let NumMicroOps = 4;
167706c3fb27SDimitry Andric}
167806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup132, ReadAfterVecLd], (instregex "^MMX_PH(ADD|SUB)SWrm$")>;
167906c3fb27SDimitry Andric
168006c3fb27SDimitry Andricdef SPRWriteResGroup133 : SchedWriteRes<[SPRPort00, SPRPort05]> {
16815f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
168206c3fb27SDimitry Andric  let Latency = 3;
168306c3fb27SDimitry Andric  let NumMicroOps = 3;
168406c3fb27SDimitry Andric}
168506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup133], (instregex "^MMX_PH(ADD|SUB)SWrr$")>;
168606c3fb27SDimitry Andric
168706c3fb27SDimitry Andricdef SPRWriteResGroup134 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
168806c3fb27SDimitry Andric  let Latency = 9;
168906c3fb27SDimitry Andric  let NumMicroOps = 2;
169006c3fb27SDimitry Andric}
169106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134], (instregex "^VPBROADCAST(BY|WZ)rm$",
169206c3fb27SDimitry Andric                                               "^VPBROADCAST(B|W)Z256rm$",
169306c3fb27SDimitry Andric                                               "^VPBROADCAST(BZ|WY)rm$")>;
169406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134, ReadAfterLd], (instrs MMX_PINSRWrm)>;
169506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134, ReadAfterVecXLd], (instregex "^VFPCLASSP(D|S)Z128rm$")>;
169606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134, ReadAfterVecLd], (instregex "^VFPCLASSS(D|H|S)Zrm$")>;
169706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134, ReadAfterVecYLd], (instregex "^VPALIGNR(Y|Z256)rmi$")>;
169806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup134, ReadAfterVecYLd], (instrs VPSHUFBZrm)>;
169906c3fb27SDimitry Andric
170006c3fb27SDimitry Andricdef SPRWriteResGroup135 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
170106c3fb27SDimitry Andric  let Latency = 5;
170206c3fb27SDimitry Andric  let NumMicroOps = 2;
170306c3fb27SDimitry Andric}
170406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup135], (instregex "^MOV16ao(16|32|64)$")>;
170506c3fb27SDimitry Andric
170606c3fb27SDimitry Andricdef SPRWriteResGroup136 : SchedWriteRes<[SPRPort01, SPRPort04_09, SPRPort07_08]> {
170706c3fb27SDimitry Andric  let Latency = 12;
170806c3fb27SDimitry Andric  let NumMicroOps = 3;
170906c3fb27SDimitry Andric}
171006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup136], (instregex "^PUSH(F|G)S(16|32)$")>;
171106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup136], (instrs MOV16ms,
171206c3fb27SDimitry Andric                                            MOVBE32mr)>;
171306c3fb27SDimitry Andric
171406c3fb27SDimitry Andricdef SPRWriteResGroup137 : SchedWriteRes<[SPRPort00_01_05_06_10]>;
171506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup137], (instregex "^MOV(8|16|32|64)ri$",
171606c3fb27SDimitry Andric                                               "^MOV(8|16|32)ri_alt$",
171706c3fb27SDimitry Andric                                               "^MOV(8|16)rr((_REV)?)$")>;
171806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup137], (instrs MOV64ri32,
171906c3fb27SDimitry Andric                                            MOV8rr_NOREX)>;
172006c3fb27SDimitry Andric
172106c3fb27SDimitry Andricdef SPRWriteResGroup138 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01]> {
172206c3fb27SDimitry Andric  let NumMicroOps = 2;
172306c3fb27SDimitry Andric}
172406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup138], (instregex "^MOV(16|32|64)rs$",
172506c3fb27SDimitry Andric                                               "^S(TR|LDT)16r$")>;
172606c3fb27SDimitry Andric
172706c3fb27SDimitry Andricdef SPRWriteResGroup139 : SchedWriteRes<[SPRPort02_03_11]>;
172806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup139], (instregex "^MOV32ao(16|32|64)$")>;
172906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup139], (instrs MOV64ao64)>;
173006c3fb27SDimitry Andric
173106c3fb27SDimitry Andricdef SPRWriteResGroup140 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
173206c3fb27SDimitry Andric  let NumMicroOps = 3;
173306c3fb27SDimitry Andric}
173406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup140], (instregex "^MOV(8|32)o(16|32)a$",
173506c3fb27SDimitry Andric                                               "^MOV(8|32|64)o64a$")>;
173606c3fb27SDimitry Andric
173706c3fb27SDimitry Andricdef SPRWriteResGroup141 : SchedWriteRes<[SPRPort00_01_05_06_10]> {
173806c3fb27SDimitry Andric  let Latency = 0;
173906c3fb27SDimitry Andric}
174006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup141], (instregex "^MOV32rr((_REV)?)$",
174106c3fb27SDimitry Andric                                               "^MOVZX(32|64)rr8$")>;
174206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup141], (instrs MOVZX32rr8_NOREX)>;
174306c3fb27SDimitry Andric
174406c3fb27SDimitry Andricdef SPRWriteResGroup142 : SchedWriteRes<[SPRPort02_03_11]> {
174506c3fb27SDimitry Andric  let Latency = 5;
174606c3fb27SDimitry Andric}
174706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup142], (instrs MOV64ao32)>;
174806c3fb27SDimitry Andric
174906c3fb27SDimitry Andricdef SPRWriteResGroup143 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort04_09, SPRPort05, SPRPort07_08]> {
17505f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 4, 16, 7, 2, 2, 12, 2];
175106c3fb27SDimitry Andric  let Latency = 217;
175206c3fb27SDimitry Andric  let NumMicroOps = 48;
175306c3fb27SDimitry Andric}
175406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup143], (instrs MOV64dr)>;
175506c3fb27SDimitry Andric
175606c3fb27SDimitry Andricdef SPRWriteResGroup144 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
175706c3fb27SDimitry Andric  let Latency = 12;
175806c3fb27SDimitry Andric  let NumMicroOps = 2;
175906c3fb27SDimitry Andric}
176006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup144], (instrs MOV64o32a)>;
176106c3fb27SDimitry Andric
176206c3fb27SDimitry Andricdef SPRWriteResGroup145 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort05]> {
176306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
176406c3fb27SDimitry Andric  let NumMicroOps = 3;
176506c3fb27SDimitry Andric}
176606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup145], (instrs MOV64rc)>;
176706c3fb27SDimitry Andric
176806c3fb27SDimitry Andricdef SPRWriteResGroup146 : SchedWriteRes<[SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort05]> {
17695f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 4, 8, 4, 2, 3];
177006c3fb27SDimitry Andric  let Latency = 181;
177106c3fb27SDimitry Andric  let NumMicroOps = 24;
177206c3fb27SDimitry Andric}
177306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup146], (instrs MOV64rd)>;
177406c3fb27SDimitry Andric
177506c3fb27SDimitry Andricdef SPRWriteResGroup147 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
177606c3fb27SDimitry Andric  let NumMicroOps = 2;
177706c3fb27SDimitry Andric}
177806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup147], (instregex "^MOV8ao(16|32|64)$")>;
177906c3fb27SDimitry Andric
178006c3fb27SDimitry Andricdef SPRWriteResGroup148 : SchedWriteRes<[SPRPort00_06, SPRPort04_09, SPRPort07_08]> {
178106c3fb27SDimitry Andric  let Latency = 12;
178206c3fb27SDimitry Andric  let NumMicroOps = 3;
178306c3fb27SDimitry Andric}
178406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup148], (instrs MOVBE16mr)>;
178506c3fb27SDimitry Andric
178606c3fb27SDimitry Andricdef SPRWriteResGroup149 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort02_03_11]> {
178706c3fb27SDimitry Andric  let Latency = 7;
178806c3fb27SDimitry Andric  let NumMicroOps = 3;
178906c3fb27SDimitry Andric}
179006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup149], (instrs MOVBE16rm)>;
179106c3fb27SDimitry Andric
179206c3fb27SDimitry Andricdef SPRWriteResGroup150 : SchedWriteRes<[SPRPort01, SPRPort02_03_11]> {
179306c3fb27SDimitry Andric  let Latency = 6;
179406c3fb27SDimitry Andric  let NumMicroOps = 2;
179506c3fb27SDimitry Andric}
179606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup150], (instrs MOVBE32rm)>;
179706c3fb27SDimitry Andric
179806c3fb27SDimitry Andricdef SPRWriteResGroup151 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort04_09, SPRPort07_08]> {
179906c3fb27SDimitry Andric  let Latency = 12;
180006c3fb27SDimitry Andric  let NumMicroOps = 4;
180106c3fb27SDimitry Andric}
180206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup151], (instrs MOVBE64mr,
180306c3fb27SDimitry Andric                                            PUSHF16,
180406c3fb27SDimitry Andric                                            SLDT16m,
180506c3fb27SDimitry Andric                                            STRm)>;
180606c3fb27SDimitry Andric
180706c3fb27SDimitry Andricdef SPRWriteResGroup152 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort02_03_11]> {
180806c3fb27SDimitry Andric  let Latency = 7;
180906c3fb27SDimitry Andric  let NumMicroOps = 3;
181006c3fb27SDimitry Andric}
181106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup152], (instrs MOVBE64rm)>;
181206c3fb27SDimitry Andric
181306c3fb27SDimitry Andricdef SPRWriteResGroup153 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
181406c3fb27SDimitry Andric  let NumMicroOps = 4;
181506c3fb27SDimitry Andric}
181606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup153], (instregex "^MOVDIR64B(16|32|64)$")>;
181706c3fb27SDimitry Andric
181806c3fb27SDimitry Andricdef SPRWriteResGroup154 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
181906c3fb27SDimitry Andric  let Latency = 511;
182006c3fb27SDimitry Andric  let NumMicroOps = 2;
182106c3fb27SDimitry Andric}
182206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup154], (instrs MOVDIRI32)>;
182306c3fb27SDimitry Andric
182406c3fb27SDimitry Andricdef SPRWriteResGroup155 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
182506c3fb27SDimitry Andric  let Latency = 514;
182606c3fb27SDimitry Andric  let NumMicroOps = 2;
182706c3fb27SDimitry Andric}
182806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup155], (instrs MOVDIRI64)>;
182906c3fb27SDimitry Andric
183006c3fb27SDimitry Andricdef SPRWriteResGroup156 : SchedWriteRes<[SPRPort01_05, SPRPort02_03_11]> {
183106c3fb27SDimitry Andric  let Latency = 8;
183206c3fb27SDimitry Andric  let NumMicroOps = 2;
183306c3fb27SDimitry Andric}
183406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup156, ReadAfterVecXLd], (instregex "^(V?)MOVLP(D|S)rm$",
183506c3fb27SDimitry Andric                                                                "^(V?)SHUFP(D|S)rmi$",
183606c3fb27SDimitry Andric                                                                "^VMOVLP(D|S)Z128rm$",
183706c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z128rm(bi|ik)$",
183806c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z128rmbik(z?)$",
183906c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z128rmi((kz)?)$")>;
184006c3fb27SDimitry Andric
184106c3fb27SDimitry Andricdef SPRWriteResGroup157 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
184206c3fb27SDimitry Andric  let Latency = 512;
184306c3fb27SDimitry Andric  let NumMicroOps = 2;
184406c3fb27SDimitry Andric}
184506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup157], (instrs MOVNTDQmr)>;
184606c3fb27SDimitry Andric
184706c3fb27SDimitry Andricdef SPRWriteResGroup158 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
184806c3fb27SDimitry Andric  let Latency = 518;
184906c3fb27SDimitry Andric  let NumMicroOps = 2;
185006c3fb27SDimitry Andric}
185106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup158], (instrs MOVNTImr)>;
185206c3fb27SDimitry Andric
185306c3fb27SDimitry Andricdef SPRWriteResGroup159 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
18545f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1, 1];
185506c3fb27SDimitry Andric  let Latency = 8;
185606c3fb27SDimitry Andric  let NumMicroOps = 7;
185706c3fb27SDimitry Andric}
185806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup159], (instrs MOVSB)>;
185906c3fb27SDimitry Andric
186006c3fb27SDimitry Andricdef SPRWriteResGroup160 : SchedWriteRes<[SPRPort00_01_05]>;
186106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup160], (instregex "^(V?)MOVS(D|S)rr((_REV)?)$",
186206c3fb27SDimitry Andric                                               "^(V?)P(ADD|SUB)(B|D|Q|W)rr$",
186306c3fb27SDimitry Andric                                               "^VMOV(A|U)P(D|S)Z(128|256)rrk(z?)((_REV)?)$",
186406c3fb27SDimitry Andric                                               "^VMOVDQ(A|U)(32|64)Z128rrk(z?)((_REV)?)$",
186506c3fb27SDimitry Andric                                               "^VMOVS(D|H|S)Zrr((_REV)?)$",
186606c3fb27SDimitry Andric                                               "^VMOVS(D|S)Zrrk(z?)((_REV)?)$",
186706c3fb27SDimitry Andric                                               "^VP(ADD|SUB)(B|D|Q|W)Yrr$",
186806c3fb27SDimitry Andric                                               "^VP(ADD|SUB)(B|D|Q|W)Z(128|256)rr$",
186906c3fb27SDimitry Andric                                               "^VP(ADD|SUB)(D|Q)Z(128|256)rrk(z?)$",
187006c3fb27SDimitry Andric                                               "^VPMOVM2(D|Q)Z128rr$",
187106c3fb27SDimitry Andric                                               "^VPTERNLOG(D|Q)Z(128|256)rri((k|kz)?)$")>;
187206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup160], (instrs VPBLENDDrri)>;
187306c3fb27SDimitry Andric
187406c3fb27SDimitry Andricdef SPRWriteResGroup161 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
18755f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1, 1];
187606c3fb27SDimitry Andric  let Latency = 7;
187706c3fb27SDimitry Andric  let NumMicroOps = 7;
187806c3fb27SDimitry Andric}
187906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup161], (instregex "^MOVS(L|Q|W)$")>;
188006c3fb27SDimitry Andric
188106c3fb27SDimitry Andricdef SPRWriteResGroup162 : SchedWriteRes<[SPRPort02_03_11]> {
188206c3fb27SDimitry Andric  let Latency = 6;
188306c3fb27SDimitry Andric}
188406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup162], (instregex "^MOVSX(16|32|64)rm(16|32)$",
188506c3fb27SDimitry Andric                                               "^MOVSX(32|64)rm8$")>;
188606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup162], (instrs MOVSX32rm8_NOREX)>;
188706c3fb27SDimitry Andric
188806c3fb27SDimitry Andricdef SPRWriteResGroup163 : SchedWriteRes<[SPRPort01_05_10, SPRPort02_03_11]> {
188906c3fb27SDimitry Andric  let Latency = 6;
189006c3fb27SDimitry Andric  let NumMicroOps = 2;
189106c3fb27SDimitry Andric}
189206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup163], (instrs MOVSX16rm8)>;
189306c3fb27SDimitry Andric
189406c3fb27SDimitry Andricdef SPRWriteResGroup164 : SchedWriteRes<[SPRPort01_05_10]>;
189506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup164], (instregex "^MOVSX(16|32|64)rr(8|16|32)$")>;
189606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup164], (instrs MOVSX32rr8_NOREX)>;
189706c3fb27SDimitry Andric
189806c3fb27SDimitry Andricdef SPRWriteResGroup165 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
189906c3fb27SDimitry Andric  let Latency = 11;
190006c3fb27SDimitry Andric  let NumMicroOps = 2;
190106c3fb27SDimitry Andric}
190206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup165], (instregex "^MUL_F(32|64)m$",
190306c3fb27SDimitry Andric                                               "^VPABS(B|W)Zrmk(z?)$",
190406c3fb27SDimitry Andric                                               "^VPS(L|R)LWZmik(z?)$",
190506c3fb27SDimitry Andric                                               "^VPSRAWZmik(z?)$")>;
190606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup165, ReadAfterVecYLd], (instregex "^VP(ADD|SUB)(U?)S(B|W)Zrmk(z?)$",
190706c3fb27SDimitry Andric                                                                "^VPAVG(B|W)Zrmk(z?)$",
190806c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SB|UW)Zrmk(z?)$",
190906c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SW|UB)Zrmk(z?)$",
191006c3fb27SDimitry Andric                                                                "^VPSH(L|R)DVWZmk(z?)$",
191106c3fb27SDimitry Andric                                                                "^VPS(L|R)L(V?)WZrmk(z?)$",
191206c3fb27SDimitry Andric                                                                "^VPSRA(V?)WZrmk(z?)$")>;
191306c3fb27SDimitry Andric
191406c3fb27SDimitry Andricdef SPRWriteResGroup166 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
191506c3fb27SDimitry Andric  let Latency = 14;
191606c3fb27SDimitry Andric  let NumMicroOps = 3;
191706c3fb27SDimitry Andric}
191806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup166], (instregex "^MUL_FI(16|32)m$")>;
191906c3fb27SDimitry Andric
192006c3fb27SDimitry Andricdef SPRWriteResGroup167 : SchedWriteRes<[SPRPort00]> {
192106c3fb27SDimitry Andric  let Latency = 4;
192206c3fb27SDimitry Andric}
192306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup167], (instregex "^MUL_F(P?)rST0$",
192406c3fb27SDimitry Andric                                               "^V(U?)COMISHZrr(b?)$",
192506c3fb27SDimitry Andric                                               "^V(U?)COMISHZrr_Int$",
192606c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)QQZrr((b|k|bk|kz)?)$",
192706c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)QQZrrbkz$",
192806c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)DQZrr((b|k|bk|kz)?)$",
192906c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)DQZrrbkz$",
193006c3fb27SDimitry Andric                                               "^VM(AX|IN)(C?)PSZrr((k|kz)?)$",
193106c3fb27SDimitry Andric                                               "^VM(AX|IN)PSZrrb((k|kz)?)$",
193206c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Zrr((k|kz)?)$",
193306c3fb27SDimitry Andric                                               "^VPMADD52(H|L)UQZr((k|kz)?)$")>;
193406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup167], (instrs MUL_FST0r)>;
193506c3fb27SDimitry Andric
193606c3fb27SDimitry Andricdef SPRWriteResGroup168 : SchedWriteRes<[SPRPort00_01_05_06, SPRPort05, SPRPort06]> {
19375f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 1, 2];
193806c3fb27SDimitry Andric  let Latency = 20;
193906c3fb27SDimitry Andric  let NumMicroOps = 10;
194006c3fb27SDimitry Andric}
194106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup168], (instrs MWAITrr)>;
194206c3fb27SDimitry Andric
194306c3fb27SDimitry Andricdef SPRWriteResGroup169 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19445f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 4, 1, 28, 15, 7, 1, 16, 1];
194506c3fb27SDimitry Andric  let Latency = 35;
194606c3fb27SDimitry Andric  let NumMicroOps = 79;
194706c3fb27SDimitry Andric}
194806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup169], (instrs OUT16ir)>;
194906c3fb27SDimitry Andric
195006c3fb27SDimitry Andricdef SPRWriteResGroup170 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19515f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 6, 27, 15, 7, 1, 16, 1];
195206c3fb27SDimitry Andric  let Latency = 35;
195306c3fb27SDimitry Andric  let NumMicroOps = 79;
195406c3fb27SDimitry Andric}
195506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup170], (instrs OUT16rr)>;
195606c3fb27SDimitry Andric
195706c3fb27SDimitry Andricdef SPRWriteResGroup171 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19585f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 4, 1, 30, 15, 9, 1, 18, 1];
195906c3fb27SDimitry Andric  let Latency = 35;
196006c3fb27SDimitry Andric  let NumMicroOps = 85;
196106c3fb27SDimitry Andric}
196206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup171], (instrs OUT32ir)>;
196306c3fb27SDimitry Andric
196406c3fb27SDimitry Andricdef SPRWriteResGroup172 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19655f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 6, 29, 15, 9, 1, 18, 1];
196606c3fb27SDimitry Andric  let Latency = 35;
196706c3fb27SDimitry Andric  let NumMicroOps = 85;
196806c3fb27SDimitry Andric}
196906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup172], (instrs OUT32rr)>;
197006c3fb27SDimitry Andric
197106c3fb27SDimitry Andricdef SPRWriteResGroup173 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19725f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 5, 1, 25, 15, 5, 1, 15, 1];
197306c3fb27SDimitry Andric  let Latency = 35;
197406c3fb27SDimitry Andric  let NumMicroOps = 73;
197506c3fb27SDimitry Andric}
197606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup173], (instrs OUT8ir)>;
197706c3fb27SDimitry Andric
197806c3fb27SDimitry Andricdef SPRWriteResGroup174 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19795f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 5, 26, 15, 5, 1, 15, 1];
198006c3fb27SDimitry Andric  let Latency = 35;
198106c3fb27SDimitry Andric  let NumMicroOps = 73;
198206c3fb27SDimitry Andric}
198306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup174], (instrs OUT8rr)>;
198406c3fb27SDimitry Andric
198506c3fb27SDimitry Andricdef SPRWriteResGroup175 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19865f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 25, 16, 7, 1, 17, 1];
198706c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
198806c3fb27SDimitry Andric  let NumMicroOps = 80;
198906c3fb27SDimitry Andric}
199006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup175], (instrs OUTSB)>;
199106c3fb27SDimitry Andric
199206c3fb27SDimitry Andricdef SPRWriteResGroup176 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
19935f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 28, 16, 10, 1, 20, 1];
199406c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
199506c3fb27SDimitry Andric  let NumMicroOps = 89;
199606c3fb27SDimitry Andric}
199706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup176], (instrs OUTSL)>;
199806c3fb27SDimitry Andric
199906c3fb27SDimitry Andricdef SPRWriteResGroup177 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
20005f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 1, 5, 27, 16, 8, 1, 18, 1];
200106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
200206c3fb27SDimitry Andric  let NumMicroOps = 83;
200306c3fb27SDimitry Andric}
200406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup177], (instrs OUTSW)>;
200506c3fb27SDimitry Andric
200606c3fb27SDimitry Andricdef SPRWriteResGroup178 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11]> {
200706c3fb27SDimitry Andric  let Latency = 8;
200806c3fb27SDimitry Andric  let NumMicroOps = 2;
200906c3fb27SDimitry Andric}
201006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup178], (instregex "^VBROADCASTI32X2Z128rmk(z?)$",
201106c3fb27SDimitry Andric                                               "^VBROADCASTSSZ128rmk(z?)$",
201206c3fb27SDimitry Andric                                               "^VMOV(A|U)P(D|S)Z128rmk(z?)$",
201306c3fb27SDimitry Andric                                               "^VMOV(D|SH|SL)DUPZ128rmk(z?)$",
201406c3fb27SDimitry Andric                                               "^VMOVDQ(A|U)(32|64)Z128rmk(z?)$",
201506c3fb27SDimitry Andric                                               "^VMOVS(D|S)Zrmk(z?)$",
201606c3fb27SDimitry Andric                                               "^VPBROADCAST(D|Q)Z128rmk(z?)$")>;
201706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup178, ReadAfterVecXLd], (instregex "^(V?)P(ADD|SUB)(B|D|Q|W)rm$",
201806c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(B|D|Q|W)Z128rm$",
201906c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Z128rm(b|k|kz)$",
202006c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Z128rmbk(z?)$",
202106c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z128rm(bi|ik)$",
202206c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z128rmbik(z?)$",
202306c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z128rmi((kz)?)$")>;
202406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup178, ReadAfterVecXLd], (instrs VPBLENDDrmi)>;
202506c3fb27SDimitry Andric
202606c3fb27SDimitry Andricdef SPRWriteResGroup179 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
202706c3fb27SDimitry Andric  let Latency = 8;
202806c3fb27SDimitry Andric  let NumMicroOps = 2;
202906c3fb27SDimitry Andric}
203006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup179], (instregex "^VPBROADCAST(B|W)((Z128)?)rm$")>;
203106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup179, ReadAfterVecXLd], (instregex "^(V?)PALIGNRrmi$",
203206c3fb27SDimitry Andric                                                                "^VALIGN(D|Q)Z128rm(bi|ik)$",
203306c3fb27SDimitry Andric                                                                "^VALIGN(D|Q)Z128rmbik(z?)$",
203406c3fb27SDimitry Andric                                                                "^VALIGN(D|Q)Z128rmi((kz)?)$")>;
203506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup179, ReadAfterVecXLd], (instrs VPALIGNRZ128rmi)>;
203606c3fb27SDimitry Andric
203706c3fb27SDimitry Andricdef SPRWriteResGroup180 : SchedWriteRes<[SPRPort00_06, SPRPort05]> {
203806c3fb27SDimitry Andric  let Latency = 140;
203906c3fb27SDimitry Andric  let NumMicroOps = 2;
204006c3fb27SDimitry Andric}
204106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup180], (instrs PAUSE)>;
204206c3fb27SDimitry Andric
204306c3fb27SDimitry Andricdef SPRWriteResGroup181 : SchedWriteRes<[SPRPort01, SPRPort02_03_11]> {
204406c3fb27SDimitry Andric  let Latency = 8;
204506c3fb27SDimitry Andric  let NumMicroOps = 2;
204606c3fb27SDimitry Andric}
204706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup181, ReadAfterLd], (instregex "^P(DEP|EXT)(32|64)rm$")>;
204806c3fb27SDimitry Andric
204906c3fb27SDimitry Andricdef SPRWriteResGroup182 : SchedWriteRes<[SPRPort01_05, SPRPort04_09, SPRPort07_08]> {
205006c3fb27SDimitry Andric  let Latency = 12;
205106c3fb27SDimitry Andric  let NumMicroOps = 3;
205206c3fb27SDimitry Andric}
205306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup182], (instregex "^(V?)PEXTR(D|Q)mr$",
205406c3fb27SDimitry Andric                                               "^VPEXTR(D|Q)Zmr$",
205506c3fb27SDimitry Andric                                               "^VPMOVQDZ128mr(k?)$")>;
205606c3fb27SDimitry Andric
205706c3fb27SDimitry Andricdef SPRWriteResGroup183 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11]> {
20585f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1];
205906c3fb27SDimitry Andric  let Latency = 9;
206006c3fb27SDimitry Andric  let NumMicroOps = 4;
206106c3fb27SDimitry Andric}
206206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup183, ReadAfterVecXLd], (instregex "^(V?)PH(ADD|SUB)SWrm$")>;
206306c3fb27SDimitry Andric
206406c3fb27SDimitry Andricdef SPRWriteResGroup184 : SchedWriteRes<[SPRPort00_01, SPRPort01_05]> {
20655f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
206606c3fb27SDimitry Andric  let Latency = 2;
206706c3fb27SDimitry Andric  let NumMicroOps = 3;
206806c3fb27SDimitry Andric}
206906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup184], (instregex "^(V?)PH(ADD|SUB)SWrr$",
207006c3fb27SDimitry Andric                                               "^VPH(ADD|SUB)SWYrr$")>;
207106c3fb27SDimitry Andric
207206c3fb27SDimitry Andricdef SPRWriteResGroup185 : SchedWriteRes<[SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
207306c3fb27SDimitry Andric  let Latency = 12;
207406c3fb27SDimitry Andric  let NumMicroOps = 3;
207506c3fb27SDimitry Andric}
207606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup185], (instregex "^POP(16|32|64)rmm$",
207706c3fb27SDimitry Andric                                               "^PUSH(16|32)rmm$")>;
207806c3fb27SDimitry Andric
207906c3fb27SDimitry Andricdef SPRWriteResGroup186 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort02_03_11]> {
20805f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 2, 1, 1];
208106c3fb27SDimitry Andric  let Latency = 5;
208206c3fb27SDimitry Andric  let NumMicroOps = 10;
208306c3fb27SDimitry Andric}
208406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup186], (instrs POPF16)>;
208506c3fb27SDimitry Andric
208606c3fb27SDimitry Andricdef SPRWriteResGroup187 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort02_03_11]> {
20875f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
208806c3fb27SDimitry Andric  let Latency = 5;
208906c3fb27SDimitry Andric  let NumMicroOps = 7;
209006c3fb27SDimitry Andric}
209106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup187], (instrs POPF64)>;
209206c3fb27SDimitry Andric
209306c3fb27SDimitry Andricdef SPRWriteResGroup188 : SchedWriteRes<[SPRPort02_03_11]> {
209406c3fb27SDimitry Andric  let Latency = 0;
209506c3fb27SDimitry Andric}
209606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup188], (instregex "^PREFETCHT(0|1|2)$")>;
209706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup188], (instrs PREFETCHNTA)>;
209806c3fb27SDimitry Andric
209906c3fb27SDimitry Andricdef SPRWriteResGroup189 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11, SPRPort06]> {
21005f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
210106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
210206c3fb27SDimitry Andric  let NumMicroOps = 4;
210306c3fb27SDimitry Andric}
210406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup189], (instregex "^PTWRITE((64)?)m$")>;
210506c3fb27SDimitry Andric
210606c3fb27SDimitry Andricdef SPRWriteResGroup190 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort06]> {
21075f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
210806c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
210906c3fb27SDimitry Andric  let NumMicroOps = 3;
211006c3fb27SDimitry Andric}
211106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup190], (instrs PTWRITE64r)>;
211206c3fb27SDimitry Andric
211306c3fb27SDimitry Andricdef SPRWriteResGroup191 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort06]> {
21145f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
211506c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
211606c3fb27SDimitry Andric  let NumMicroOps = 4;
211706c3fb27SDimitry Andric}
211806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup191], (instrs PTWRITEr)>;
211906c3fb27SDimitry Andric
212006c3fb27SDimitry Andricdef SPRWriteResGroup192 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
212106c3fb27SDimitry Andric  let NumMicroOps = 2;
212206c3fb27SDimitry Andric}
212306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup192], (instregex "^PUSH64r((mr)?)$")>;
212406c3fb27SDimitry Andric
212506c3fb27SDimitry Andricdef SPRWriteResGroup193 : SchedWriteRes<[SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
212606c3fb27SDimitry Andric  let NumMicroOps = 3;
212706c3fb27SDimitry Andric}
212806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup193], (instrs PUSH64rmm)>;
212906c3fb27SDimitry Andric
213006c3fb27SDimitry Andricdef SPRWriteResGroup194 : SchedWriteRes<[SPRPort00_06, SPRPort01, SPRPort04_09, SPRPort07_08]> {
213106c3fb27SDimitry Andric  let Latency = 4;
213206c3fb27SDimitry Andric  let NumMicroOps = 4;
213306c3fb27SDimitry Andric}
213406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup194], (instrs PUSHF64)>;
213506c3fb27SDimitry Andric
213606c3fb27SDimitry Andricdef SPRWriteResGroup195 : SchedWriteRes<[SPRPort01, SPRPort04_09, SPRPort07_08]> {
213706c3fb27SDimitry Andric  let NumMicroOps = 3;
213806c3fb27SDimitry Andric}
213906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup195], (instregex "^PUSH(F|G)S64$")>;
214006c3fb27SDimitry Andric
214106c3fb27SDimitry Andricdef SPRWriteResGroup196 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
21425f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 3, 2];
214306c3fb27SDimitry Andric  let Latency = 8;
214406c3fb27SDimitry Andric  let NumMicroOps = 7;
214506c3fb27SDimitry Andric}
214606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup196], (instregex "^RC(L|R)(16|32|64)rCL$")>;
214706c3fb27SDimitry Andric
214806c3fb27SDimitry Andricdef SPRWriteResGroup197 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
21495f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
215006c3fb27SDimitry Andric  let Latency = 13;
215106c3fb27SDimitry Andric  let NumMicroOps = 3;
215206c3fb27SDimitry Andric}
215306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup197, WriteRMW], (instregex "^RC(L|R)8m(1|i)$")>;
215406c3fb27SDimitry Andric
215506c3fb27SDimitry Andricdef SPRWriteResGroup198 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
21565f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 5, 2];
215706c3fb27SDimitry Andric  let Latency = 20;
215806c3fb27SDimitry Andric  let NumMicroOps = 8;
215906c3fb27SDimitry Andric}
216006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup198, WriteRMW], (instrs RCL8mCL)>;
216106c3fb27SDimitry Andric
216206c3fb27SDimitry Andricdef SPRWriteResGroup199 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
21635f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 5, 2];
216406c3fb27SDimitry Andric  let Latency = 7;
216506c3fb27SDimitry Andric  let NumMicroOps = 9;
216606c3fb27SDimitry Andric}
216706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup199], (instrs RCL8rCL)>;
216806c3fb27SDimitry Andric
216906c3fb27SDimitry Andricdef SPRWriteResGroup200 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
21705f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 4, 3];
217106c3fb27SDimitry Andric  let Latency = 20;
217206c3fb27SDimitry Andric  let NumMicroOps = 9;
217306c3fb27SDimitry Andric}
217406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup200, WriteRMW], (instrs RCR8mCL)>;
217506c3fb27SDimitry Andric
217606c3fb27SDimitry Andricdef SPRWriteResGroup201 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
21775f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 4, 3];
217806c3fb27SDimitry Andric  let Latency = 9;
217906c3fb27SDimitry Andric  let NumMicroOps = 10;
218006c3fb27SDimitry Andric}
218106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup201], (instrs RCR8rCL)>;
218206c3fb27SDimitry Andric
218306c3fb27SDimitry Andricdef SPRWriteResGroup202 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_05, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort01_05_10, SPRPort05]> {
21845f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 6, 1, 10, 20, 8, 5, 1, 2];
218506c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
218606c3fb27SDimitry Andric  let NumMicroOps = 54;
218706c3fb27SDimitry Andric}
218806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup202], (instrs RDMSR)>;
218906c3fb27SDimitry Andric
219006c3fb27SDimitry Andricdef SPRWriteResGroup203 : SchedWriteRes<[SPRPort01]> {
219106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
219206c3fb27SDimitry Andric}
219306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup203], (instrs RDPID64)>;
219406c3fb27SDimitry Andric
219506c3fb27SDimitry Andricdef SPRWriteResGroup204 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
219606c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
219706c3fb27SDimitry Andric  let NumMicroOps = 3;
219806c3fb27SDimitry Andric}
219906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup204], (instrs RDPKRUr)>;
220006c3fb27SDimitry Andric
220106c3fb27SDimitry Andricdef SPRWriteResGroup205 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort05]> {
22025f757f3fSDimitry Andric  let ReleaseAtCycles = [9, 6, 2, 1];
220306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
220406c3fb27SDimitry Andric  let NumMicroOps = 18;
220506c3fb27SDimitry Andric}
220606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup205], (instrs RDPMC)>;
220706c3fb27SDimitry Andric
220806c3fb27SDimitry Andricdef SPRWriteResGroup206 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
22095f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 3, 2, 5, 7, 3, 1, 2];
221006c3fb27SDimitry Andric  let Latency = 1386;
221106c3fb27SDimitry Andric  let NumMicroOps = 25;
221206c3fb27SDimitry Andric}
221306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup206], (instrs RDRAND16r)>;
221406c3fb27SDimitry Andric
221506c3fb27SDimitry Andricdef SPRWriteResGroup207 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
22165f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 3, 2, 5, 7, 3, 1, 2];
221706c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
221806c3fb27SDimitry Andric  let NumMicroOps = 25;
221906c3fb27SDimitry Andric}
222006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup207], (instregex "^RDRAND(32|64)r$")>;
222106c3fb27SDimitry Andric
222206c3fb27SDimitry Andricdef SPRWriteResGroup208 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
22235f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 3, 3, 5, 7, 1, 4];
222406c3fb27SDimitry Andric  let Latency = 1381;
222506c3fb27SDimitry Andric  let NumMicroOps = 25;
222606c3fb27SDimitry Andric}
222706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup208], (instrs RDSEED16r)>;
222806c3fb27SDimitry Andric
222906c3fb27SDimitry Andricdef SPRWriteResGroup209 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort05]> {
22305f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 3, 3, 5, 7, 1, 4];
223106c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
223206c3fb27SDimitry Andric  let NumMicroOps = 25;
223306c3fb27SDimitry Andric}
223406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup209], (instregex "^RDSEED(32|64)r$")>;
223506c3fb27SDimitry Andric
223606c3fb27SDimitry Andricdef SPRWriteResGroup210 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort05]> {
22375f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 6, 3, 1];
223806c3fb27SDimitry Andric  let Latency = 18;
223906c3fb27SDimitry Andric  let NumMicroOps = 15;
224006c3fb27SDimitry Andric}
224106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup210], (instrs RDTSC)>;
224206c3fb27SDimitry Andric
224306c3fb27SDimitry Andricdef SPRWriteResGroup211 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort05]> {
22445f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 2, 7, 4, 3];
224506c3fb27SDimitry Andric  let Latency = 42;
224606c3fb27SDimitry Andric  let NumMicroOps = 21;
224706c3fb27SDimitry Andric}
224806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup211], (instrs RDTSCP)>;
224906c3fb27SDimitry Andric
225006c3fb27SDimitry Andricdef SPRWriteResGroup212 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11]> {
225106c3fb27SDimitry Andric  let Latency = 7;
225206c3fb27SDimitry Andric  let NumMicroOps = 2;
225306c3fb27SDimitry Andric}
225406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup212], (instrs RET64)>;
225506c3fb27SDimitry Andric
225606c3fb27SDimitry Andricdef SPRWriteResGroup213 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11]> {
22575f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
225806c3fb27SDimitry Andric  let Latency = 6;
225906c3fb27SDimitry Andric  let NumMicroOps = 3;
226006c3fb27SDimitry Andric}
226106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup213], (instregex "^RETI(16|32|64)$")>;
226206c3fb27SDimitry Andric
226306c3fb27SDimitry Andricdef SPRWriteResGroup214 : SchedWriteRes<[]>;
226406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup214], (instrs REX64_PREFIX)>;
226506c3fb27SDimitry Andric
226606c3fb27SDimitry Andricdef SPRWriteResGroup215 : SchedWriteRes<[SPRPort00_06]> {
22675f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
226806c3fb27SDimitry Andric  let Latency = 12;
226906c3fb27SDimitry Andric  let NumMicroOps = 2;
227006c3fb27SDimitry Andric}
227106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup215, WriteRMW], (instregex "^RO(L|R)(16|32|64)m(1|i|CL)$")>;
227206c3fb27SDimitry Andric
227306c3fb27SDimitry Andricdef SPRWriteResGroup216 : SchedWriteRes<[SPRPort00_06]> {
22745f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
227506c3fb27SDimitry Andric  let NumMicroOps = 2;
227606c3fb27SDimitry Andric}
227706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup216], (instregex "^RO(L|R)(8|16|32|64)r(1|i)$")>;
227806c3fb27SDimitry Andric
227906c3fb27SDimitry Andricdef SPRWriteResGroup217 : SchedWriteRes<[SPRPort00_06]> {
22805f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
228106c3fb27SDimitry Andric  let Latency = 13;
228206c3fb27SDimitry Andric  let NumMicroOps = 2;
228306c3fb27SDimitry Andric}
228406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup217, WriteRMW], (instregex "^RO(L|R)8m(1|i)$",
228506c3fb27SDimitry Andric                                                         "^(RO|SH)L8mCL$",
228606c3fb27SDimitry Andric                                                         "^(RO|SA|SH)R8mCL$")>;
228706c3fb27SDimitry Andric
228806c3fb27SDimitry Andricdef SPRWriteResGroup218 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
22895f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
229006c3fb27SDimitry Andric  let Latency = 15;
229106c3fb27SDimitry Andric  let NumMicroOps = 3;
229206c3fb27SDimitry Andric}
2293*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup218], (instregex "^(V?)ROUNDP(D|S)mi$")>;
2294*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup218, ReadAfterVecXLd], (instregex "^(V?)ROUNDS(D|S)mi((_Int)?)$",
229506c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|S)Z128rm(bi|ik)$",
229606c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|S)Z128rmbik(z?)$",
229706c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|S)Z128rmi((kz)?)$",
229806c3fb27SDimitry Andric                                                                "^VRNDSCALES(D|S)Zm$",
229906c3fb27SDimitry Andric                                                                "^VRNDSCALES(D|S)Zm_Int((k|kz)?)$")>;
230006c3fb27SDimitry Andric
230106c3fb27SDimitry Andricdef SPRWriteResGroup219 : SchedWriteRes<[SPRPort00_01]> {
23025f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
230306c3fb27SDimitry Andric  let Latency = 8;
230406c3fb27SDimitry Andric  let NumMicroOps = 2;
230506c3fb27SDimitry Andric}
2306*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup219], (instregex "^(V?)ROUND(PD|SS)ri$",
2307*0fca6ea1SDimitry Andric                                               "^(V?)ROUND(PS|SD)ri$",
2308*0fca6ea1SDimitry Andric                                               "^(V?)ROUNDS(D|S)ri_Int$",
230906c3fb27SDimitry Andric                                               "^VRNDSCALEP(D|S)Z(128|256)rri((k|kz)?)$",
231006c3fb27SDimitry Andric                                               "^VRNDSCALES(D|S)Zr$",
231106c3fb27SDimitry Andric                                               "^VRNDSCALES(D|S)Zr(b?)_Int((k|kz)?)$",
2312*0fca6ea1SDimitry Andric                                               "^VROUNDP(D|S)Yri$")>;
231306c3fb27SDimitry Andric
231406c3fb27SDimitry Andricdef SPRWriteResGroup220 : SchedWriteRes<[SPRPort00_06]> {
23155f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
231606c3fb27SDimitry Andric  let Latency = 4;
231706c3fb27SDimitry Andric  let NumMicroOps = 2;
231806c3fb27SDimitry Andric}
231906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup220], (instrs SAHF)>;
232006c3fb27SDimitry Andric
232106c3fb27SDimitry Andricdef SPRWriteResGroup221 : SchedWriteRes<[SPRPort00_06]> {
232206c3fb27SDimitry Andric  let Latency = 13;
232306c3fb27SDimitry Andric}
232406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup221, WriteRMW], (instregex "^S(A|H)R8m(1|i)$",
232506c3fb27SDimitry Andric                                                         "^SHL8m(1|i)$")>;
232606c3fb27SDimitry Andric
232706c3fb27SDimitry Andricdef SPRWriteResGroup222 : SchedWriteRes<[SPRPort00_06, SPRPort02_03_11]> {
232806c3fb27SDimitry Andric  let Latency = 8;
232906c3fb27SDimitry Andric  let NumMicroOps = 2;
233006c3fb27SDimitry Andric}
233106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup222, ReadAfterLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^S(A|H)RX(32|64)rm$",
233206c3fb27SDimitry Andric                                                                                                                             "^SHLX(32|64)rm$")>;
233306c3fb27SDimitry Andric
233406c3fb27SDimitry Andricdef SPRWriteResGroup223 : SchedWriteRes<[SPRPort00_06]> {
233506c3fb27SDimitry Andric  let Latency = 3;
233606c3fb27SDimitry Andric}
233706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup223], (instregex "^S(A|H)RX(32|64)rr$",
233806c3fb27SDimitry Andric                                               "^SHLX(32|64)rr$")>;
233906c3fb27SDimitry Andric
234006c3fb27SDimitry Andricdef SPRWriteResGroup224 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort04_09, SPRPort07_08]> {
23415f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 1, 1];
234206c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
234306c3fb27SDimitry Andric  let NumMicroOps = 7;
234406c3fb27SDimitry Andric}
234506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup224], (instrs SERIALIZE)>;
234606c3fb27SDimitry Andric
234706c3fb27SDimitry Andricdef SPRWriteResGroup225 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
234806c3fb27SDimitry Andric  let Latency = 2;
234906c3fb27SDimitry Andric  let NumMicroOps = 2;
235006c3fb27SDimitry Andric}
235106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup225], (instrs SFENCE)>;
235206c3fb27SDimitry Andric
235306c3fb27SDimitry Andricdef SPRWriteResGroup226 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01, SPRPort04_09, SPRPort07_08]> {
23545f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 2, 2];
235506c3fb27SDimitry Andric  let Latency = 21;
235606c3fb27SDimitry Andric  let NumMicroOps = 7;
235706c3fb27SDimitry Andric}
235806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup226], (instregex "^S(G|I)DT64m$")>;
235906c3fb27SDimitry Andric
236006c3fb27SDimitry Andricdef SPRWriteResGroup227 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
236106c3fb27SDimitry Andric  let Latency = 9;
236206c3fb27SDimitry Andric  let NumMicroOps = 3;
236306c3fb27SDimitry Andric}
236406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup227, ReadAfterVecXLd], (instrs SHA1MSG1rm)>;
236506c3fb27SDimitry Andric
236606c3fb27SDimitry Andricdef SPRWriteResGroup228 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
236706c3fb27SDimitry Andric  let Latency = 2;
236806c3fb27SDimitry Andric  let NumMicroOps = 2;
236906c3fb27SDimitry Andric}
237006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup228], (instrs SHA1MSG1rr)>;
237106c3fb27SDimitry Andric
237206c3fb27SDimitry Andricdef SPRWriteResGroup229 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort01_05, SPRPort02_03_11]> {
23735f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 2, 1];
237406c3fb27SDimitry Andric  let Latency = 13;
237506c3fb27SDimitry Andric  let NumMicroOps = 8;
237606c3fb27SDimitry Andric}
237706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup229, ReadAfterVecXLd], (instrs SHA1MSG2rm)>;
237806c3fb27SDimitry Andric
237906c3fb27SDimitry Andricdef SPRWriteResGroup230 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort01_05]> {
23805f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 2];
238106c3fb27SDimitry Andric  let Latency = 6;
238206c3fb27SDimitry Andric  let NumMicroOps = 7;
238306c3fb27SDimitry Andric}
238406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup230], (instrs SHA1MSG2rr)>;
238506c3fb27SDimitry Andric
238606c3fb27SDimitry Andricdef SPRWriteResGroup231 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11]> {
238706c3fb27SDimitry Andric  let Latency = 8;
238806c3fb27SDimitry Andric  let NumMicroOps = 4;
238906c3fb27SDimitry Andric}
239006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup231, ReadAfterVecXLd], (instrs SHA1NEXTErm)>;
239106c3fb27SDimitry Andric
239206c3fb27SDimitry Andricdef SPRWriteResGroup232 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05]> {
239306c3fb27SDimitry Andric  let Latency = 3;
239406c3fb27SDimitry Andric  let NumMicroOps = 3;
239506c3fb27SDimitry Andric}
239606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup232], (instrs SHA1NEXTErr)>;
239706c3fb27SDimitry Andric
239806c3fb27SDimitry Andricdef SPRWriteResGroup233 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
239906c3fb27SDimitry Andric  let Latency = 13;
240006c3fb27SDimitry Andric  let NumMicroOps = 2;
240106c3fb27SDimitry Andric}
240206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup233], (instregex "^VPMOV(S|Z)XBWZ((256)?)rmk(z?)$",
240306c3fb27SDimitry Andric                                               "^VPOPCNT(B|W)Z(128|256)rmk(z?)$",
240406c3fb27SDimitry Andric                                               "^VPOPCNT(B|W)Zrmk(z?)$")>;
240506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup233, ReadAfterVecXLd], (instregex "^VDBPSADBWZ128rmik(z?)$",
240606c3fb27SDimitry Andric                                                                "^VPACK(S|U)SDWZ128rm(bk|kz)$",
240706c3fb27SDimitry Andric                                                                "^VPACK(S|U)SDWZ128rmbkz$",
240806c3fb27SDimitry Andric                                                                "^VPACK(S|U)S(DW|WB)Z128rmk$",
240906c3fb27SDimitry Andric                                                                "^VPACK(S|U)SWBZ128rmkz$",
241006c3fb27SDimitry Andric                                                                "^VPMULTISHIFTQBZ128rm(bk|kz)$",
241106c3fb27SDimitry Andric                                                                "^VPMULTISHIFTQBZ128rm(k|bkz)$")>;
241206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup233, ReadAfterVecXLd], (instrs SHA1RNDS4rmi,
241306c3fb27SDimitry Andric                                                             SHA256RNDS2rm)>;
241406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup233, ReadAfterVecYLd], (instregex "^VDBPSADBWZ((256)?)rmik(z?)$",
241506c3fb27SDimitry Andric                                                                "^VPACK(S|U)SDWZ((256)?)rm(bk|kz)$",
241606c3fb27SDimitry Andric                                                                "^VPACK(S|U)SDWZ((256)?)rmbkz$",
241706c3fb27SDimitry Andric                                                                "^VPACK(S|U)S(DW|WB)Z((256)?)rmk$",
241806c3fb27SDimitry Andric                                                                "^VPACK(S|U)SWBZ((256)?)rmkz$",
241906c3fb27SDimitry Andric                                                                "^VPERMBZ(128|256)rmk(z?)$",
242006c3fb27SDimitry Andric                                                                "^VPERMBZrmk(z?)$",
242106c3fb27SDimitry Andric                                                                "^VPMULTISHIFTQBZ((256)?)rm(bk|kz)$",
242206c3fb27SDimitry Andric                                                                "^VPMULTISHIFTQBZ((256)?)rm(k|bkz)$")>;
242306c3fb27SDimitry Andric
242406c3fb27SDimitry Andricdef SPRWriteResGroup234 : SchedWriteRes<[SPRPort05]> {
242506c3fb27SDimitry Andric  let Latency = 6;
242606c3fb27SDimitry Andric}
242706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup234], (instrs SHA1RNDS4rri,
242806c3fb27SDimitry Andric                                            SHA256RNDS2rr)>;
242906c3fb27SDimitry Andric
243006c3fb27SDimitry Andricdef SPRWriteResGroup235 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
24315f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 2, 1, 1, 1];
243206c3fb27SDimitry Andric  let Latency = 12;
243306c3fb27SDimitry Andric  let NumMicroOps = 8;
243406c3fb27SDimitry Andric}
243506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup235, ReadAfterVecXLd], (instrs SHA256MSG1rm)>;
243606c3fb27SDimitry Andric
243706c3fb27SDimitry Andricdef SPRWriteResGroup236 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort05]> {
24385f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 2, 1, 1];
243906c3fb27SDimitry Andric  let Latency = 5;
244006c3fb27SDimitry Andric  let NumMicroOps = 7;
244106c3fb27SDimitry Andric}
244206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup236], (instrs SHA256MSG1rr)>;
244306c3fb27SDimitry Andric
244406c3fb27SDimitry Andricdef SPRWriteResGroup237 : SchedWriteRes<[SPRPort05]> {
24455f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
244606c3fb27SDimitry Andric  let Latency = 6;
244706c3fb27SDimitry Andric  let NumMicroOps = 2;
244806c3fb27SDimitry Andric}
244906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup237], (instregex "^VPMOV(D|Q|W|SQ|SW)BZrrk(z?)$",
245006c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZrrk(z?)$",
245106c3fb27SDimitry Andric                                               "^VPMOV(U?)SDBZrrk(z?)$",
245206c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZrrk(z?)$")>;
245306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup237], (instrs SHA256MSG2rr)>;
245406c3fb27SDimitry Andric
245506c3fb27SDimitry Andricdef SPRWriteResGroup238 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort07_08]> {
245606c3fb27SDimitry Andric  let Latency = 13;
245706c3fb27SDimitry Andric  let NumMicroOps = 5;
245806c3fb27SDimitry Andric}
245906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup238], (instrs SHRD16mri8)>;
246006c3fb27SDimitry Andric
246106c3fb27SDimitry Andricdef SPRWriteResGroup239 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01]> {
246206c3fb27SDimitry Andric  let Latency = 6;
246306c3fb27SDimitry Andric  let NumMicroOps = 2;
246406c3fb27SDimitry Andric}
246506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup239], (instregex "^SLDT(32|64)r$")>;
246606c3fb27SDimitry Andric
246706c3fb27SDimitry Andricdef SPRWriteResGroup240 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort05]> {
246806c3fb27SDimitry Andric  let NumMicroOps = 2;
246906c3fb27SDimitry Andric}
247006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup240], (instrs SMSW16r)>;
247106c3fb27SDimitry Andric
247206c3fb27SDimitry Andricdef SPRWriteResGroup241 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort05]> {
247306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
247406c3fb27SDimitry Andric  let NumMicroOps = 2;
247506c3fb27SDimitry Andric}
247606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup241], (instregex "^SMSW(32|64)r$")>;
247706c3fb27SDimitry Andric
247806c3fb27SDimitry Andricdef SPRWriteResGroup242 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
247906c3fb27SDimitry Andric  let Latency = 24;
248006c3fb27SDimitry Andric  let NumMicroOps = 2;
248106c3fb27SDimitry Andric}
248206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup242, ReadAfterVecLd], (instregex "^(V?)SQRTSDm_Int$")>;
248306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup242, ReadAfterVecLd], (instrs VSQRTSDZm_Int)>;
248406c3fb27SDimitry Andric
248506c3fb27SDimitry Andricdef SPRWriteResGroup243 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
248606c3fb27SDimitry Andric  let Latency = 6;
248706c3fb27SDimitry Andric  let NumMicroOps = 2;
248806c3fb27SDimitry Andric}
248906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup243], (instrs STD)>;
249006c3fb27SDimitry Andric
249106c3fb27SDimitry Andricdef SPRWriteResGroup244 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01]> {
24925f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 4, 1];
249306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
249406c3fb27SDimitry Andric  let NumMicroOps = 6;
249506c3fb27SDimitry Andric}
249606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup244], (instrs STI)>;
249706c3fb27SDimitry Andric
249806c3fb27SDimitry Andricdef SPRWriteResGroup245 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
24995f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
250006c3fb27SDimitry Andric  let Latency = 8;
250106c3fb27SDimitry Andric  let NumMicroOps = 4;
250206c3fb27SDimitry Andric}
250306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup245], (instrs STOSB)>;
250406c3fb27SDimitry Andric
250506c3fb27SDimitry Andricdef SPRWriteResGroup246 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
25065f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
250706c3fb27SDimitry Andric  let Latency = 7;
250806c3fb27SDimitry Andric  let NumMicroOps = 4;
250906c3fb27SDimitry Andric}
251006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup246], (instregex "^STOS(L|Q|W)$")>;
251106c3fb27SDimitry Andric
251206c3fb27SDimitry Andricdef SPRWriteResGroup247 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort01]> {
251306c3fb27SDimitry Andric  let Latency = 5;
251406c3fb27SDimitry Andric  let NumMicroOps = 2;
251506c3fb27SDimitry Andric}
251606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup247], (instregex "^STR(32|64)r$")>;
251706c3fb27SDimitry Andric
251806c3fb27SDimitry Andricdef SPRWriteResGroup248 : SchedWriteRes<[SPRPort00]> {
251906c3fb27SDimitry Andric  let Latency = 2;
252006c3fb27SDimitry Andric}
252106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup248], (instregex "^(TST|XAM)_F$")>;
252206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup248], (instrs UCOM_FPPr)>;
252306c3fb27SDimitry Andric
252406c3fb27SDimitry Andricdef SPRWriteResGroup249 : SchedWriteRes<[SPRPort01_05]> {
252506c3fb27SDimitry Andric  let Latency = 4;
252606c3fb27SDimitry Andric}
252706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup249], (instregex "^V(ADD|SUB)P(D|S)Z(128|256)rrkz$",
252806c3fb27SDimitry Andric                                               "^V(ADD|SUB)S(D|S)Zrr(b?)_Intkz$")>;
252906c3fb27SDimitry Andric
253006c3fb27SDimitry Andricdef SPRWriteResGroup250 : SchedWriteRes<[SPRPort00_05]> {
253106c3fb27SDimitry Andric  let Latency = 3;
253206c3fb27SDimitry Andric}
253306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup250], (instregex "^V(ADD|SUB)P(D|S)Zrr(b?)$",
253406c3fb27SDimitry Andric                                               "^VMOVDQU(8|16)Zrrk(z?)((_REV)?)$",
253506c3fb27SDimitry Andric                                               "^VP(ADD|SUB)(B|W)Zrrk(z?)$",
253606c3fb27SDimitry Andric                                               "^VPBLENDM(B|W)Zrrk(z?)$",
253706c3fb27SDimitry Andric                                               "^VPMOVM2(B|W)Zrr$")>;
253806c3fb27SDimitry Andric
253906c3fb27SDimitry Andricdef SPRWriteResGroup251 : SchedWriteRes<[SPRPort00_01]> {
254006c3fb27SDimitry Andric  let Latency = 6;
254106c3fb27SDimitry Andric}
254206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup251], (instregex "^V(ADD|SUB)PHZ(128|256)rrk(z?)$",
254306c3fb27SDimitry Andric                                               "^V(ADD|SUB)SHZrr(b?)_Intk(z?)$",
254406c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)WZ(128|256)rrk(z?)$",
254506c3fb27SDimitry Andric                                               "^VCVT(U?)W2PHZ(128|256)rrk(z?)$",
254606c3fb27SDimitry Andric                                               "^VF(N?)M(ADD|SUB)(132|213|231)PHZ(128|256)rk(z?)$",
254706c3fb27SDimitry Andric                                               "^VF(N?)M(ADD|SUB)(132|213|231)SHZr(b?)_Intk(z?)$",
254806c3fb27SDimitry Andric                                               "^VFMADDSUB(132|213|231)PHZ(128|256)rk(z?)$",
254906c3fb27SDimitry Andric                                               "^VFMSUBADD(132|213|231)PHZ(128|256)rk(z?)$",
255006c3fb27SDimitry Andric                                               "^VGETEXPPHZ(128|256)rk(z?)$",
255106c3fb27SDimitry Andric                                               "^VGETEXPSHZr(bk|kz)$",
255206c3fb27SDimitry Andric                                               "^VGETEXPSHZr(k|bkz)$",
255306c3fb27SDimitry Andric                                               "^VGETMANTPHZ(128|256)rrik(z?)$",
255406c3fb27SDimitry Andric                                               "^VGETMANTSHZrri(bk|kz)$",
255506c3fb27SDimitry Andric                                               "^VGETMANTSHZrri(k|bkz)$",
255606c3fb27SDimitry Andric                                               "^VM(AX|IN)CPHZ(128|256)rrk(z?)$",
255706c3fb27SDimitry Andric                                               "^VM(AX|IN|UL)PHZ(128|256)rrk(z?)$",
255806c3fb27SDimitry Andric                                               "^VM(AX|IN|UL)SHZrr(b?)_Intk(z?)$")>;
255906c3fb27SDimitry Andric
256006c3fb27SDimitry Andricdef SPRWriteResGroup252 : SchedWriteRes<[SPRPort00]> {
256106c3fb27SDimitry Andric  let Latency = 5;
256206c3fb27SDimitry Andric}
256306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup252], (instregex "^V(ADD|SUB)PHZrr(b?)$",
256406c3fb27SDimitry Andric                                               "^VAES(DE|EN)C((LAST)?)Zrr$",
256506c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)WZrr(b?)$",
256606c3fb27SDimitry Andric                                               "^VCVT(U?)W2PHZrr(b?)$",
256706c3fb27SDimitry Andric                                               "^VF(N?)M(ADD|SUB)(132|213|231)PHZr(b?)$",
256806c3fb27SDimitry Andric                                               "^VFMADDSUB(132|213|231)PHZr(b?)$",
256906c3fb27SDimitry Andric                                               "^VFMSUBADD(132|213|231)PHZr(b?)$",
257006c3fb27SDimitry Andric                                               "^VGETEXPPHZr(b?)$",
257106c3fb27SDimitry Andric                                               "^VGETMANTPHZrri(b?)$",
257206c3fb27SDimitry Andric                                               "^VM(AX|IN)CPHZrr$",
257306c3fb27SDimitry Andric                                               "^VM(AX|IN|UL)PHZrr(b?)$",
257406c3fb27SDimitry Andric                                               "^VMOVMSKP(D|S)Yrr$")>;
257506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup252], (instrs VGF2P8MULBZrr)>;
257606c3fb27SDimitry Andric
257706c3fb27SDimitry Andricdef SPRWriteResGroup253 : SchedWriteRes<[SPRPort00]> {
257806c3fb27SDimitry Andric  let Latency = 6;
257906c3fb27SDimitry Andric}
258006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup253], (instregex "^V(ADD|SUB)PHZrr(bk|kz)$",
258106c3fb27SDimitry Andric                                               "^V(ADD|SUB)PHZrr(k|bkz)$",
258206c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)WZrr(bk|kz)$",
258306c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)WZrr(k|bkz)$",
258406c3fb27SDimitry Andric                                               "^VCVT(U?)W2PHZrr(bk|kz)$",
258506c3fb27SDimitry Andric                                               "^VCVT(U?)W2PHZrr(k|bkz)$",
258606c3fb27SDimitry Andric                                               "^VF(N?)M(ADD|SUB)(132|213|231)PHZr(bk|kz)$",
258706c3fb27SDimitry Andric                                               "^VF(N?)M(ADD|SUB)(132|213|231)PHZr(k|bkz)$",
258806c3fb27SDimitry Andric                                               "^VFMADDSUB(132|213|231)PHZr(bk|kz)$",
258906c3fb27SDimitry Andric                                               "^VFMADDSUB(132|213|231)PHZr(k|bkz)$",
259006c3fb27SDimitry Andric                                               "^VFMSUBADD(132|213|231)PHZr(bk|kz)$",
259106c3fb27SDimitry Andric                                               "^VFMSUBADD(132|213|231)PHZr(k|bkz)$",
259206c3fb27SDimitry Andric                                               "^VGETEXPPHZr(bk|kz)$",
259306c3fb27SDimitry Andric                                               "^VGETEXPPHZr(k|bkz)$",
259406c3fb27SDimitry Andric                                               "^VGETMANTPHZrri(bk|kz)$",
259506c3fb27SDimitry Andric                                               "^VGETMANTPHZrri(k|bkz)$",
259606c3fb27SDimitry Andric                                               "^VM(AX|IN)CPHZrrk(z?)$",
259706c3fb27SDimitry Andric                                               "^VM(AX|IN|UL)PHZrr(bk|kz)$",
259806c3fb27SDimitry Andric                                               "^VM(AX|IN|UL)PHZrr(k|bkz)$")>;
259906c3fb27SDimitry Andric
260006c3fb27SDimitry Andricdef SPRWriteResGroup254 : SchedWriteRes<[SPRPort01_05, SPRPort02_03_11]> {
260106c3fb27SDimitry Andric  let Latency = 11;
260206c3fb27SDimitry Andric  let NumMicroOps = 2;
260306c3fb27SDimitry Andric}
260406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup254], (instregex "^VPMOV(S|Z)XBWZ128rmk(z?)$",
260506c3fb27SDimitry Andric                                               "^VPSHUF(H|L)WZ(128|256)mik(z?)$")>;
260606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup254, ReadAfterVecYLd], (instregex "^V(ADD|SUB)PSYrm$",
260706c3fb27SDimitry Andric                                                                "^V(ADD|SUB)PSZ256rm((b|k|bk|kz)?)$",
260806c3fb27SDimitry Andric                                                                "^V(ADD|SUB)PSZ256rmbkz$",
260906c3fb27SDimitry Andric                                                                "^VPSHUFBZ256rmk(z?)$",
261006c3fb27SDimitry Andric                                                                "^VPUNPCK(H|L)(BW|WD)Z256rmk(z?)$")>;
261106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup254, ReadAfterVecYLd], (instrs VADDSUBPSYrm)>;
261206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup254, ReadAfterVecXLd], (instregex "^VPSHUFBZ128rmk(z?)$",
261306c3fb27SDimitry Andric                                                                "^VPUNPCK(H|L)(BW|WD)Z128rmk(z?)$")>;
261406c3fb27SDimitry Andric
261506c3fb27SDimitry Andricdef SPRWriteResGroup255 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11]> {
261606c3fb27SDimitry Andric  let Latency = 11;
261706c3fb27SDimitry Andric  let NumMicroOps = 2;
261806c3fb27SDimitry Andric}
261906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup255], (instregex "^VMOVDQU(8|16)Zrmk(z?)$")>;
262006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup255, ReadAfterVecYLd], (instregex "^V(ADD|SUB)PSZrm((b|k|bk|kz)?)$",
262106c3fb27SDimitry Andric                                                                "^V(ADD|SUB)PSZrmbkz$",
262206c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(B|W)Zrmk(z?)$",
262306c3fb27SDimitry Andric                                                                "^VPBLENDM(B|W)Zrmk(z?)$")>;
262406c3fb27SDimitry Andric
262506c3fb27SDimitry Andricdef SPRWriteResGroup256 : SchedWriteRes<[SPRPort00_05]> {
262606c3fb27SDimitry Andric  let Latency = 4;
262706c3fb27SDimitry Andric}
262806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup256], (instregex "^V(ADD|SUB)PSZrr(bk|kz)$",
262906c3fb27SDimitry Andric                                               "^V(ADD|SUB)PSZrr(k|bkz)$")>;
263006c3fb27SDimitry Andric
263106c3fb27SDimitry Andricdef SPRWriteResGroup257 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
263206c3fb27SDimitry Andric  let Latency = 12;
263306c3fb27SDimitry Andric  let NumMicroOps = 2;
263406c3fb27SDimitry Andric}
263506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup257], (instregex "^VCVT(T?)PS2(U?)DQZrm((b|k|bk|kz)?)$",
263606c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)DQZrmbkz$",
263706c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Zrm((b|k|bk|kz)?)$",
263806c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Zrmbkz$")>;
263906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup257, ReadAfterVecXLd], (instregex "^VAES(DE|EN)C((LAST)?)Zrm$")>;
264006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup257, ReadAfterVecYLd], (instregex "^VGF2P8AFFINE((INV)?)QBZrm(b?)i$")>;
264106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup257, ReadAfterVecYLd], (instrs VGF2P8MULBZrm)>;
264206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup257, ReadAfterVecYLd, ReadAfterVecYLd], (instregex "^VPMADD52(H|L)UQZm((b|k|bk|kz)?)$",
264306c3fb27SDimitry Andric                                                                                 "^VPMADD52(H|L)UQZmbkz$")>;
264406c3fb27SDimitry Andric
264506c3fb27SDimitry Andricdef SPRWriteResGroup258 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
264606c3fb27SDimitry Andric  let Latency = 11;
264706c3fb27SDimitry Andric  let NumMicroOps = 2;
264806c3fb27SDimitry Andric}
264906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup258], (instregex "^VPBROADCAST(B|W)Z128rmk(z?)$",
265006c3fb27SDimitry Andric                                               "^VPOPCNT(B|D|Q|W)Z((256)?)rm$",
265106c3fb27SDimitry Andric                                               "^VPOPCNT(D|Q)Z((256)?)rm(b|k|kz)$",
265206c3fb27SDimitry Andric                                               "^VPOPCNT(D|Q)Z((256)?)rmbk(z?)$",
265306c3fb27SDimitry Andric                                               "^VPSHUF(H|L)WZmik(z?)$")>;
265406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup258, ReadAfterVecYLd], (instregex "^VALIGN(D|Q)Z((256)?)rm(bi|ik)$",
265506c3fb27SDimitry Andric                                                                "^VALIGN(D|Q)Z((256)?)rmbik(z?)$",
265606c3fb27SDimitry Andric                                                                "^VALIGN(D|Q)Z((256)?)rmi((kz)?)$",
265706c3fb27SDimitry Andric                                                                "^VFPCLASSP(D|H|S)Z((256)?)rmb$",
265806c3fb27SDimitry Andric                                                                "^VPACK(S|U)S(DW|WB)(Y|Z)rm$",
265906c3fb27SDimitry Andric                                                                "^VPACK(S|U)S(DW|WB)Z256rm$",
266006c3fb27SDimitry Andric                                                                "^VPACK(S|U)SDWZ((256)?)rmb$",
266106c3fb27SDimitry Andric                                                                "^VPALIGNRZ((256)?)rmik(z?)$",
266206c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(S|U)QZ((256)?)rm((b|k|bk|kz)?)$",
266306c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(S|U)QZ((256)?)rmbkz$",
266406c3fb27SDimitry Andric                                                                "^VPMULTISHIFTQBZ((256)?)rm(b?)$",
266506c3fb27SDimitry Andric                                                                "^VPUNPCK(H|L)(BW|WD)Zrmk(z?)$")>;
266606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup258, ReadAfterVecYLd], (instrs VPCMPGTQYrm)>;
266706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup258, ReadAfterVecXLd], (instregex "^VPALIGNRZ128rmik(z?)$",
2668*0fca6ea1SDimitry Andric                                                                "^VPCLMULQDQ(Y|Z)rmi$")>;
2669*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup258, ReadAfterVecXLd], (instrs VPCLMULQDQZ256rmi)>;
267006c3fb27SDimitry Andric
267106c3fb27SDimitry Andricdef SPRWriteResGroup259 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11]> {
26725f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
267306c3fb27SDimitry Andric  let Latency = 10;
267406c3fb27SDimitry Andric  let NumMicroOps = 4;
267506c3fb27SDimitry Andric}
2676*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup259, ReadAfterVecYLd, ReadAfterVecYLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^VBLENDVP(D|S)Yrmr$")>;
2677*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup259, ReadAfterVecYLd, ReadAfterVecYLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instrs VPBLENDVBYrmr)>;
267806c3fb27SDimitry Andric
267906c3fb27SDimitry Andricdef SPRWriteResGroup260 : SchedWriteRes<[SPRPort00_01_05]> {
26805f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
268106c3fb27SDimitry Andric  let Latency = 3;
268206c3fb27SDimitry Andric  let NumMicroOps = 3;
268306c3fb27SDimitry Andric}
2684*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup260], (instregex "^VBLENDVP(S|DY)rrr$",
2685*0fca6ea1SDimitry Andric                                               "^VBLENDVP(D|SY)rrr$",
2686*0fca6ea1SDimitry Andric                                               "^VPBLENDVB(Y?)rrr$")>;
268706c3fb27SDimitry Andric
268806c3fb27SDimitry Andricdef SPRWriteResGroup261 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11]> {
26895f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
269006c3fb27SDimitry Andric  let Latency = 9;
269106c3fb27SDimitry Andric  let NumMicroOps = 4;
269206c3fb27SDimitry Andric}
2693*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup261, ReadAfterVecXLd, ReadAfterVecXLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instregex "^VBLENDVP(D|S)rmr$")>;
2694*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup261, ReadAfterVecXLd, ReadAfterVecXLd, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault], (instrs VPBLENDVBrmr)>;
269506c3fb27SDimitry Andric
269606c3fb27SDimitry Andricdef SPRWriteResGroup262 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11]> {
269706c3fb27SDimitry Andric  let Latency = 9;
269806c3fb27SDimitry Andric  let NumMicroOps = 2;
269906c3fb27SDimitry Andric}
270006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup262], (instregex "^VBROADCAST(F|I)32X(2|4)Z256rmk(z?)$",
270106c3fb27SDimitry Andric                                               "^VBROADCAST(F|I)64X2Z128rmk(z?)$",
270206c3fb27SDimitry Andric                                               "^VBROADCASTS(D|S)Z256rmk(z?)$",
270306c3fb27SDimitry Andric                                               "^VMOV(A|U)P(D|S)Z256rmk(z?)$",
270406c3fb27SDimitry Andric                                               "^VMOV(D|SH|SL)DUPZ256rmk(z?)$",
270506c3fb27SDimitry Andric                                               "^VMOVDQ(A|U)(32|64)Z256rmk(z?)$",
270606c3fb27SDimitry Andric                                               "^VPBROADCAST(D|Q)Z256rmk(z?)$")>;
270706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup262, ReadAfterVecYLd], (instregex "^VINSERT(F|I)128rm$",
270806c3fb27SDimitry Andric                                                                "^VINSERT(F|I)(32x4|64x2)Z256rm((k|kz)?)$",
270906c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(B|D|Q|W)(Y|Z256)rm$",
271006c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Z256rm(b|k|kz)$",
271106c3fb27SDimitry Andric                                                                "^VP(ADD|SUB)(D|Q)Z256rmbk(z?)$",
271206c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z256rm(bi|ik)$",
271306c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z256rmbik(z?)$",
271406c3fb27SDimitry Andric                                                                "^VPTERNLOG(D|Q)Z256rmi((kz)?)$")>;
271506c3fb27SDimitry Andric
271606c3fb27SDimitry Andricdef SPRWriteResGroup263 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
271706c3fb27SDimitry Andric  let Latency = 3;
271806c3fb27SDimitry Andric  let NumMicroOps = 2;
271906c3fb27SDimitry Andric}
272006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup263, ReadAfterVecXLd], (instregex "^VCMPP(D|H|S)Z128rm(bi|ik)$",
272106c3fb27SDimitry Andric                                                                "^VCMPP(D|H|S)Z128rm(i|bik)$",
272206c3fb27SDimitry Andric                                                                "^VFPCLASSP(D|H|S)Z128rm(b?)k$",
272306c3fb27SDimitry Andric                                                                "^VPCMP(B|D|Q|W|UD|UQ|UW)Z128rmi(k?)$",
272406c3fb27SDimitry Andric                                                                "^VPCMP(D|Q|UQ)Z128rmib(k?)$",
272506c3fb27SDimitry Andric                                                                "^VPCMP(EQ|GT)(B|D|Q|W)Z128rm(k?)$",
272606c3fb27SDimitry Andric                                                                "^VPCMP(EQ|GT)(D|Q)Z128rmb(k?)$",
272706c3fb27SDimitry Andric                                                                "^VPCMPUBZ128rmi(k?)$",
272806c3fb27SDimitry Andric                                                                "^VPCMPUDZ128rmib(k?)$",
272906c3fb27SDimitry Andric                                                                "^VPTEST(N?)M(B|D|Q|W)Z128rm(k?)$",
273006c3fb27SDimitry Andric                                                                "^VPTEST(N?)M(D|Q)Z128rmb(k?)$")>;
273106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup263, ReadAfterVecYLd], (instregex "^VCMPP(D|H|S)Z((256)?)rm(bi|ik)$",
273206c3fb27SDimitry Andric                                                                "^VCMPP(D|H|S)Z((256)?)rm(i|bik)$",
273306c3fb27SDimitry Andric                                                                "^VFPCLASSP(D|H|S)Z((256)?)rm(b?)k$",
273406c3fb27SDimitry Andric                                                                "^VPCMP(B|D|Q|W|UD|UQ|UW)Z((256)?)rmi(k?)$",
273506c3fb27SDimitry Andric                                                                "^VPCMP(D|Q|UQ)Z((256)?)rmib(k?)$",
273606c3fb27SDimitry Andric                                                                "^VPCMP(EQ|GT)(B|D|Q|W)Z((256)?)rm(k?)$",
273706c3fb27SDimitry Andric                                                                "^VPCMP(EQ|GT)(D|Q)Z((256)?)rmb(k?)$",
273806c3fb27SDimitry Andric                                                                "^VPCMPUBZ((256)?)rmi(k?)$",
273906c3fb27SDimitry Andric                                                                "^VPCMPUDZ((256)?)rmib(k?)$",
274006c3fb27SDimitry Andric                                                                "^VPTEST(N?)M(B|D|Q|W)Z((256)?)rm(k?)$",
274106c3fb27SDimitry Andric                                                                "^VPTEST(N?)M(D|Q)Z((256)?)rmb(k?)$")>;
2742*0fca6ea1SDimitry Andricdef : InstRW<[SPRWriteResGroup263, ReadAfterVecLd], (instregex "^VCMPS(D|H|S)Zrmi$",
2743*0fca6ea1SDimitry Andric                                                               "^VCMPS(D|H|S)Zrmi_Int(k?)$",
274406c3fb27SDimitry Andric                                                               "^VFPCLASSS(D|H|S)Zrmk$")>;
274506c3fb27SDimitry Andric
274606c3fb27SDimitry Andricdef SPRWriteResGroup264 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
274706c3fb27SDimitry Andric  let Latency = 10;
274806c3fb27SDimitry Andric  let NumMicroOps = 2;
274906c3fb27SDimitry Andric}
275006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup264, ReadAfterVecLd], (instregex "^V(U?)COMISHZrm((_Int)?)$")>;
275106c3fb27SDimitry Andric
275206c3fb27SDimitry Andricdef SPRWriteResGroup265 : SchedWriteRes<[SPRPort04_09, SPRPort05, SPRPort07_08]> {
27535f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1];
275406c3fb27SDimitry Andric  let Latency = 12;
275506c3fb27SDimitry Andric  let NumMicroOps = 4;
275606c3fb27SDimitry Andric}
275706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup265], (instregex "^VCOMPRESSP(D|S)Z(128|256)mr$",
275806c3fb27SDimitry Andric                                               "^VCOMPRESSP(D|S)Zmr$",
275906c3fb27SDimitry Andric                                               "^VPCOMPRESS(D|Q)Z(128|256)mr$",
276006c3fb27SDimitry Andric                                               "^VPCOMPRESS(D|Q)Zmr$",
276106c3fb27SDimitry Andric                                               "^VPMOV(D|Q|W|SQ|SW)BZmr$",
276206c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZmr$",
276306c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Zmr$",
276406c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZmr$")>;
276506c3fb27SDimitry Andric
276606c3fb27SDimitry Andricdef SPRWriteResGroup266 : SchedWriteRes<[SPRPort04_09, SPRPort05, SPRPort07_08]> {
27675f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1];
276806c3fb27SDimitry Andric  let Latency = 15;
276906c3fb27SDimitry Andric  let NumMicroOps = 4;
277006c3fb27SDimitry Andric}
277106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup266], (instregex "^VCOMPRESSP(D|S)Z(128|256)mrk$",
277206c3fb27SDimitry Andric                                               "^VCOMPRESSP(D|S)Zmrk$",
277306c3fb27SDimitry Andric                                               "^VPCOMPRESS(D|Q)Z(128|256)mrk$",
277406c3fb27SDimitry Andric                                               "^VPCOMPRESS(D|Q)Zmrk$",
277506c3fb27SDimitry Andric                                               "^VPMOV(D|Q|W|SQ|SW)BZmrk$",
277606c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZmrk$",
277706c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Zmrk$",
277806c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZmrk$")>;
277906c3fb27SDimitry Andric
278006c3fb27SDimitry Andricdef SPRWriteResGroup267 : SchedWriteRes<[SPRPort05]> {
27815f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
278206c3fb27SDimitry Andric  let Latency = 3;
278306c3fb27SDimitry Andric  let NumMicroOps = 2;
278406c3fb27SDimitry Andric}
278506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup267], (instregex "^VCOMPRESSP(D|S)Z(128|256)rr$",
278606c3fb27SDimitry Andric                                               "^VCOMPRESSP(D|S)Zrr$",
278706c3fb27SDimitry Andric                                               "^VEXPANDP(D|S)Z(128|256)rr$",
278806c3fb27SDimitry Andric                                               "^VEXPANDP(D|S)Zrr$",
278906c3fb27SDimitry Andric                                               "^VPCOMPRESS(B|D|Q|W)Z(128|256)rr$",
279006c3fb27SDimitry Andric                                               "^VPCOMPRESS(B|D|Q|W)Zrr$",
279106c3fb27SDimitry Andric                                               "^VPEXPAND(B|D|Q|W)Z(128|256)rr$",
279206c3fb27SDimitry Andric                                               "^VPEXPAND(B|D|Q|W)Zrr$")>;
279306c3fb27SDimitry Andric
279406c3fb27SDimitry Andricdef SPRWriteResGroup268 : SchedWriteRes<[SPRPort00, SPRPort05]> {
279506c3fb27SDimitry Andric  let Latency = 7;
279606c3fb27SDimitry Andric  let NumMicroOps = 2;
279706c3fb27SDimitry Andric}
279806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup268], (instregex "^VCVT(U?)DQ2PDZrr((k|kz)?)$",
279906c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)QQZrr((b|k|bk|kz)?)$",
280006c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)QQZrrbkz$",
280106c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZrr((b|k|bk|kz)?)$",
280206c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZrrbkz$")>;
280306c3fb27SDimitry Andric
280406c3fb27SDimitry Andricdef SPRWriteResGroup269 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
280506c3fb27SDimitry Andric  let Latency = 15;
280606c3fb27SDimitry Andric  let NumMicroOps = 4;
280706c3fb27SDimitry Andric}
280806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup269], (instregex "^VCVT(U?)DQ2PHZ128rm(b?)$",
280906c3fb27SDimitry Andric                                               "^VCVTNEPS2BF16Z128rm(b?)$")>;
281006c3fb27SDimitry Andric
281106c3fb27SDimitry Andricdef SPRWriteResGroup270 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
281206c3fb27SDimitry Andric  let Latency = 19;
281306c3fb27SDimitry Andric  let NumMicroOps = 4;
281406c3fb27SDimitry Andric}
281506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup270], (instregex "^VCVT(U?)DQ2PHZ128rm(bk|kz)$",
281606c3fb27SDimitry Andric                                               "^VCVT(U?)DQ2PHZ128rm(k|bkz)$")>;
281706c3fb27SDimitry Andric
281806c3fb27SDimitry Andricdef SPRWriteResGroup271 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
281906c3fb27SDimitry Andric  let Latency = 7;
282006c3fb27SDimitry Andric  let NumMicroOps = 3;
282106c3fb27SDimitry Andric}
282206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup271], (instregex "^VCVT(U?)DQ2PHZ128rr$")>;
282306c3fb27SDimitry Andric
282406c3fb27SDimitry Andricdef SPRWriteResGroup272 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
282506c3fb27SDimitry Andric  let Latency = 12;
282606c3fb27SDimitry Andric  let NumMicroOps = 3;
282706c3fb27SDimitry Andric}
282806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup272], (instregex "^VCVT(U?)DQ2PHZ128rrk(z?)$")>;
282906c3fb27SDimitry Andric
283006c3fb27SDimitry Andricdef SPRWriteResGroup273 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
283106c3fb27SDimitry Andric  let Latency = 17;
283206c3fb27SDimitry Andric  let NumMicroOps = 4;
283306c3fb27SDimitry Andric}
283406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup273], (instregex "^VCVT(U?)DQ2PHZ256rm(b?)$",
283506c3fb27SDimitry Andric                                               "^VCVTNEPS2BF16Z128rm(bk|kz)$",
283606c3fb27SDimitry Andric                                               "^VCVTNEPS2BF16Z128rm(k|bkz)$")>;
283706c3fb27SDimitry Andric
283806c3fb27SDimitry Andricdef SPRWriteResGroup274 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
283906c3fb27SDimitry Andric  let Latency = 21;
284006c3fb27SDimitry Andric  let NumMicroOps = 4;
284106c3fb27SDimitry Andric}
284206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup274], (instregex "^VCVT(U?)DQ2PHZ256rm(bk|kz)$",
284306c3fb27SDimitry Andric                                               "^VCVT(U?)DQ2PHZ256rm(k|bkz)$")>;
284406c3fb27SDimitry Andric
284506c3fb27SDimitry Andricdef SPRWriteResGroup275 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
284606c3fb27SDimitry Andric  let Latency = 9;
284706c3fb27SDimitry Andric  let NumMicroOps = 3;
284806c3fb27SDimitry Andric}
284906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup275], (instregex "^VCVT(U?)DQ2PHZ256rr$")>;
285006c3fb27SDimitry Andric
285106c3fb27SDimitry Andricdef SPRWriteResGroup276 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
285206c3fb27SDimitry Andric  let Latency = 14;
285306c3fb27SDimitry Andric  let NumMicroOps = 3;
285406c3fb27SDimitry Andric}
285506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup276], (instregex "^VCVT(U?)DQ2PHZ256rrk(z?)$")>;
285606c3fb27SDimitry Andric
285706c3fb27SDimitry Andricdef SPRWriteResGroup277 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
28585f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
285906c3fb27SDimitry Andric  let Latency = 17;
286006c3fb27SDimitry Andric  let NumMicroOps = 4;
286106c3fb27SDimitry Andric}
286206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup277], (instregex "^VCVT(U?)DQ2PHZrm(b?)$")>;
286306c3fb27SDimitry Andric
286406c3fb27SDimitry Andricdef SPRWriteResGroup278 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
28655f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
286606c3fb27SDimitry Andric  let Latency = 21;
286706c3fb27SDimitry Andric  let NumMicroOps = 4;
286806c3fb27SDimitry Andric}
286906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup278], (instregex "^VCVT(U?)DQ2PHZrm(bk|kz)$",
287006c3fb27SDimitry Andric                                               "^VCVT(U?)DQ2PHZrm(k|bkz)$")>;
287106c3fb27SDimitry Andric
287206c3fb27SDimitry Andricdef SPRWriteResGroup279 : SchedWriteRes<[SPRPort00, SPRPort05]> {
28735f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
287406c3fb27SDimitry Andric  let Latency = 9;
287506c3fb27SDimitry Andric  let NumMicroOps = 3;
287606c3fb27SDimitry Andric}
287706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup279], (instregex "^VCVT(U?)DQ2PHZrr(b?)$")>;
287806c3fb27SDimitry Andric
287906c3fb27SDimitry Andricdef SPRWriteResGroup280 : SchedWriteRes<[SPRPort00, SPRPort05]> {
28805f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
288106c3fb27SDimitry Andric  let Latency = 14;
288206c3fb27SDimitry Andric  let NumMicroOps = 3;
288306c3fb27SDimitry Andric}
288406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup280], (instregex "^VCVT(U?)DQ2PHZrr(bk|kz)$",
288506c3fb27SDimitry Andric                                               "^VCVT(U?)DQ2PHZrr(k|bkz)$")>;
288606c3fb27SDimitry Andric
288706c3fb27SDimitry Andricdef SPRWriteResGroup281 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
28885f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1];
288906c3fb27SDimitry Andric  let Latency = 15;
289006c3fb27SDimitry Andric  let NumMicroOps = 5;
289106c3fb27SDimitry Andric}
289206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup281, ReadAfterVecXLd], (instregex "^VCVTNE2PS2BF16Z128rm(b?)$")>;
289306c3fb27SDimitry Andric
289406c3fb27SDimitry Andricdef SPRWriteResGroup282 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
28955f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1];
289606c3fb27SDimitry Andric  let Latency = 17;
289706c3fb27SDimitry Andric  let NumMicroOps = 5;
289806c3fb27SDimitry Andric}
289906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup282, ReadAfterVecXLd], (instregex "^VCVTNE2PS2BF16Z128rm(bk|kz)$",
290006c3fb27SDimitry Andric                                                                "^VCVTNE2PS2BF16Z128rm(k|bkz)$")>;
290106c3fb27SDimitry Andric
290206c3fb27SDimitry Andricdef SPRWriteResGroup283 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
29035f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
290406c3fb27SDimitry Andric  let Latency = 8;
290506c3fb27SDimitry Andric  let NumMicroOps = 4;
290606c3fb27SDimitry Andric}
290706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup283], (instregex "^VCVTNE2PS2BF16Z(128|256)rr$")>;
290806c3fb27SDimitry Andric
290906c3fb27SDimitry Andricdef SPRWriteResGroup284 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
29105f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
291106c3fb27SDimitry Andric  let Latency = 10;
291206c3fb27SDimitry Andric  let NumMicroOps = 4;
291306c3fb27SDimitry Andric}
291406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup284], (instregex "^VCVTNE2PS2BF16Z(128|256)rrk(z?)$")>;
291506c3fb27SDimitry Andric
291606c3fb27SDimitry Andricdef SPRWriteResGroup285 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
29175f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1];
291806c3fb27SDimitry Andric  let Latency = 16;
291906c3fb27SDimitry Andric  let NumMicroOps = 5;
292006c3fb27SDimitry Andric}
292106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup285, ReadAfterVecYLd], (instregex "^VCVTNE2PS2BF16Z256rm(b?)$")>;
292206c3fb27SDimitry Andric
292306c3fb27SDimitry Andricdef SPRWriteResGroup286 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
29245f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1];
292506c3fb27SDimitry Andric  let Latency = 18;
292606c3fb27SDimitry Andric  let NumMicroOps = 5;
292706c3fb27SDimitry Andric}
292806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup286, ReadAfterVecYLd], (instregex "^VCVTNE2PS2BF16Z256rm(bk|kz)$",
292906c3fb27SDimitry Andric                                                                "^VCVTNE2PS2BF16Z256rm(k|bkz)$")>;
293006c3fb27SDimitry Andric
293106c3fb27SDimitry Andricdef SPRWriteResGroup287 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
29325f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
293306c3fb27SDimitry Andric  let Latency = 16;
293406c3fb27SDimitry Andric  let NumMicroOps = 5;
293506c3fb27SDimitry Andric}
293606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup287, ReadAfterVecYLd], (instregex "^VCVTNE2PS2BF16Zrm(b?)$",
293706c3fb27SDimitry Andric                                                                "^VDPBF16PSZm((b|k|bk|kz)?)$")>;
293806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup287, ReadAfterVecYLd], (instrs VDPBF16PSZmbkz)>;
293906c3fb27SDimitry Andric
294006c3fb27SDimitry Andricdef SPRWriteResGroup288 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
29415f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
294206c3fb27SDimitry Andric  let Latency = 18;
294306c3fb27SDimitry Andric  let NumMicroOps = 5;
294406c3fb27SDimitry Andric}
294506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup288, ReadAfterVecYLd], (instregex "^VCVTNE2PS2BF16Zrm(bk|kz)$",
294606c3fb27SDimitry Andric                                                                "^VCVTNE2PS2BF16Zrm(k|bkz)$")>;
294706c3fb27SDimitry Andric
294806c3fb27SDimitry Andricdef SPRWriteResGroup289 : SchedWriteRes<[SPRPort00, SPRPort05]> {
29495f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
295006c3fb27SDimitry Andric  let Latency = 8;
295106c3fb27SDimitry Andric  let NumMicroOps = 4;
295206c3fb27SDimitry Andric}
295306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup289], (instregex "^VDPBF16PSZr((k|kz)?)$")>;
295406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup289], (instrs VCVTNE2PS2BF16Zrr)>;
295506c3fb27SDimitry Andric
295606c3fb27SDimitry Andricdef SPRWriteResGroup290 : SchedWriteRes<[SPRPort00, SPRPort05]> {
29575f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
295806c3fb27SDimitry Andric  let Latency = 10;
295906c3fb27SDimitry Andric  let NumMicroOps = 4;
296006c3fb27SDimitry Andric}
296106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup290], (instregex "^VCVTNE2PS2BF16Zrrk(z?)$")>;
296206c3fb27SDimitry Andric
296306c3fb27SDimitry Andricdef SPRWriteResGroup291 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
296406c3fb27SDimitry Andric  let Latency = 8;
296506c3fb27SDimitry Andric  let NumMicroOps = 3;
296606c3fb27SDimitry Andric}
296706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup291], (instregex "^VCVTNEPS2BF16Z(128|256)rr$")>;
296806c3fb27SDimitry Andric
296906c3fb27SDimitry Andricdef SPRWriteResGroup292 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort05]> {
297006c3fb27SDimitry Andric  let Latency = 10;
297106c3fb27SDimitry Andric  let NumMicroOps = 3;
297206c3fb27SDimitry Andric}
297306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup292], (instregex "^VCVTNEPS2BF16Z(128|256)rrk(z?)$")>;
297406c3fb27SDimitry Andric
297506c3fb27SDimitry Andricdef SPRWriteResGroup293 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
297606c3fb27SDimitry Andric  let Latency = 16;
297706c3fb27SDimitry Andric  let NumMicroOps = 4;
297806c3fb27SDimitry Andric}
297906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup293], (instregex "^VCVTNEPS2BF16Z256rm(b?)$")>;
298006c3fb27SDimitry Andric
298106c3fb27SDimitry Andricdef SPRWriteResGroup294 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
298206c3fb27SDimitry Andric  let Latency = 18;
298306c3fb27SDimitry Andric  let NumMicroOps = 4;
298406c3fb27SDimitry Andric}
298506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup294], (instregex "^VCVTNEPS2BF16Z256rm(bk|kz)$",
298606c3fb27SDimitry Andric                                               "^VCVTNEPS2BF16Z256rm(k|bkz)$")>;
298706c3fb27SDimitry Andric
298806c3fb27SDimitry Andricdef SPRWriteResGroup295 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
29895f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
299006c3fb27SDimitry Andric  let Latency = 16;
299106c3fb27SDimitry Andric  let NumMicroOps = 4;
299206c3fb27SDimitry Andric}
299306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup295], (instregex "^VCVTNEPS2BF16Zrm(b?)$")>;
299406c3fb27SDimitry Andric
299506c3fb27SDimitry Andricdef SPRWriteResGroup296 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
29965f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
299706c3fb27SDimitry Andric  let Latency = 18;
299806c3fb27SDimitry Andric  let NumMicroOps = 4;
299906c3fb27SDimitry Andric}
300006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup296], (instregex "^VCVTNEPS2BF16Zrm(bk|kz)$",
300106c3fb27SDimitry Andric                                               "^VCVTNEPS2BF16Zrm(k|bkz)$")>;
300206c3fb27SDimitry Andric
300306c3fb27SDimitry Andricdef SPRWriteResGroup297 : SchedWriteRes<[SPRPort00, SPRPort05]> {
30045f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
300506c3fb27SDimitry Andric  let Latency = 8;
300606c3fb27SDimitry Andric  let NumMicroOps = 3;
300706c3fb27SDimitry Andric}
300806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup297], (instrs VCVTNEPS2BF16Zrr)>;
300906c3fb27SDimitry Andric
301006c3fb27SDimitry Andricdef SPRWriteResGroup298 : SchedWriteRes<[SPRPort00, SPRPort05]> {
30115f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
301206c3fb27SDimitry Andric  let Latency = 10;
301306c3fb27SDimitry Andric  let NumMicroOps = 3;
301406c3fb27SDimitry Andric}
301506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup298], (instregex "^VCVTNEPS2BF16Zrrk(z?)$")>;
301606c3fb27SDimitry Andric
301706c3fb27SDimitry Andricdef SPRWriteResGroup299 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
301806c3fb27SDimitry Andric  let Latency = 15;
301906c3fb27SDimitry Andric  let NumMicroOps = 3;
302006c3fb27SDimitry Andric}
302106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup299], (instregex "^VCVT(T?)PD2DQYrm$",
302206c3fb27SDimitry Andric                                               "^VCVT(T?)P(D|H)2(U?)DQZ256rm(b?)$",
302306c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)DQZ256rm(bk|kz)$",
302406c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)DQZ256rm(k|bkz)$",
302506c3fb27SDimitry Andric                                               "^VCVTPH2PSXZ128rm(bk|kz)$",
302606c3fb27SDimitry Andric                                               "^VCVTPH2PSXZ128rm(k|bkz)$",
302706c3fb27SDimitry Andric                                               "^VCVTPH2PSXZ256rm(b?)$",
302806c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZ256rm((b|k|bk|kz)?)$",
302906c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZ256rmbkz$")>;
303006c3fb27SDimitry Andric
303106c3fb27SDimitry Andricdef SPRWriteResGroup300 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
303206c3fb27SDimitry Andric  let Latency = 15;
303306c3fb27SDimitry Andric  let NumMicroOps = 3;
303406c3fb27SDimitry Andric}
303506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup300], (instregex "^VCVT(T?)P(D|H)2(U?)DQZrm(b?)$",
303606c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)DQZrm(bk|kz)$",
303706c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)DQZrm(k|bkz)$",
303806c3fb27SDimitry Andric                                               "^VCVTPH2PSXZrm(b?)$",
303906c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZrm((b|k|bk|kz)?)$",
304006c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZrmbkz$")>;
304106c3fb27SDimitry Andric
304206c3fb27SDimitry Andricdef SPRWriteResGroup301 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
30435f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 2];
304406c3fb27SDimitry Andric  let Latency = 19;
304506c3fb27SDimitry Andric  let NumMicroOps = 7;
304606c3fb27SDimitry Andric}
304706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup301], (instregex "^VCVTPD2PHZ128rm(b?)$")>;
304806c3fb27SDimitry Andric
304906c3fb27SDimitry Andricdef SPRWriteResGroup302 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
30505f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 2];
305106c3fb27SDimitry Andric  let Latency = 22;
305206c3fb27SDimitry Andric  let NumMicroOps = 7;
305306c3fb27SDimitry Andric}
305406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup302], (instregex "^VCVTPD2PHZ128rm(bk|kz)$",
305506c3fb27SDimitry Andric                                               "^VCVTPD2PHZ128rm(k|bkz)$")>;
305606c3fb27SDimitry Andric
305706c3fb27SDimitry Andricdef SPRWriteResGroup303 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
30585f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
305906c3fb27SDimitry Andric  let Latency = 12;
306006c3fb27SDimitry Andric  let NumMicroOps = 5;
306106c3fb27SDimitry Andric}
306206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup303], (instrs VCVTPD2PHZ128rr)>;
306306c3fb27SDimitry Andric
306406c3fb27SDimitry Andricdef SPRWriteResGroup304 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
30655f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
306606c3fb27SDimitry Andric  let Latency = 15;
306706c3fb27SDimitry Andric  let NumMicroOps = 5;
306806c3fb27SDimitry Andric}
306906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup304], (instregex "^VCVTPD2PHZ128rrk(z?)$")>;
307006c3fb27SDimitry Andric
307106c3fb27SDimitry Andricdef SPRWriteResGroup305 : SchedWriteRes<[SPRPort00_01, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
30725f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
307306c3fb27SDimitry Andric  let Latency = 21;
307406c3fb27SDimitry Andric  let NumMicroOps = 6;
307506c3fb27SDimitry Andric}
307606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup305], (instregex "^VCVTPD2PHZ256rm(b?)$")>;
307706c3fb27SDimitry Andric
307806c3fb27SDimitry Andricdef SPRWriteResGroup306 : SchedWriteRes<[SPRPort00_01, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
30795f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
308006c3fb27SDimitry Andric  let Latency = 24;
308106c3fb27SDimitry Andric  let NumMicroOps = 6;
308206c3fb27SDimitry Andric}
308306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup306], (instregex "^VCVTPD2PHZ256rm(bk|kz)$",
308406c3fb27SDimitry Andric                                               "^VCVTPD2PHZ256rm(k|bkz)$")>;
308506c3fb27SDimitry Andric
308606c3fb27SDimitry Andricdef SPRWriteResGroup307 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
30875f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
308806c3fb27SDimitry Andric  let Latency = 13;
308906c3fb27SDimitry Andric  let NumMicroOps = 4;
309006c3fb27SDimitry Andric}
309106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup307], (instrs VCVTPD2PHZ256rr)>;
309206c3fb27SDimitry Andric
309306c3fb27SDimitry Andricdef SPRWriteResGroup308 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
30945f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
309506c3fb27SDimitry Andric  let Latency = 16;
309606c3fb27SDimitry Andric  let NumMicroOps = 4;
309706c3fb27SDimitry Andric}
309806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup308], (instregex "^VCVTPD2PHZ256rrk(z?)$")>;
309906c3fb27SDimitry Andric
310006c3fb27SDimitry Andricdef SPRWriteResGroup309 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
31015f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
310206c3fb27SDimitry Andric  let Latency = 23;
310306c3fb27SDimitry Andric  let NumMicroOps = 6;
310406c3fb27SDimitry Andric}
310506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup309], (instregex "^VCVTP(D2PH|H2PD)Zrm(b?)$")>;
310606c3fb27SDimitry Andric
310706c3fb27SDimitry Andricdef SPRWriteResGroup310 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
31085f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
310906c3fb27SDimitry Andric  let Latency = 26;
311006c3fb27SDimitry Andric  let NumMicroOps = 6;
311106c3fb27SDimitry Andric}
311206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup310], (instregex "^VCVTP(D2PH|H2PD)Zrm(bk|kz)$",
311306c3fb27SDimitry Andric                                               "^VCVTP(D2PH|H2PD)Zrm(k|bkz)$")>;
311406c3fb27SDimitry Andric
311506c3fb27SDimitry Andricdef SPRWriteResGroup311 : SchedWriteRes<[SPRPort00, SPRPort05]> {
31165f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
311706c3fb27SDimitry Andric  let Latency = 15;
311806c3fb27SDimitry Andric  let NumMicroOps = 4;
311906c3fb27SDimitry Andric}
312006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup311], (instregex "^VCVTP(D2PH|H2PD)Zrr(b?)$")>;
312106c3fb27SDimitry Andric
312206c3fb27SDimitry Andricdef SPRWriteResGroup312 : SchedWriteRes<[SPRPort00, SPRPort05]> {
31235f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
312406c3fb27SDimitry Andric  let Latency = 18;
312506c3fb27SDimitry Andric  let NumMicroOps = 4;
312606c3fb27SDimitry Andric}
312706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup312], (instregex "^VCVTP(D2PH|H2PD)Zrr(bk|kz)$",
312806c3fb27SDimitry Andric                                               "^VCVTP(D2PH|H2PD)Zrr(k|bkz)$")>;
312906c3fb27SDimitry Andric
313006c3fb27SDimitry Andricdef SPRWriteResGroup313 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
313106c3fb27SDimitry Andric  let Latency = 11;
313206c3fb27SDimitry Andric  let NumMicroOps = 2;
313306c3fb27SDimitry Andric}
313406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup313], (instregex "^VCVT(T?)PD2(U?)QQZ128rm((b|k|bk|kz)?)$",
313506c3fb27SDimitry Andric                                               "^VCVT(T?)PD2(U?)QQZ128rmbkz$",
313606c3fb27SDimitry Andric                                               "^VPABS(B|W)Z(128|256)rmk(z?)$",
313706c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Z128rm((b|k|bk|kz)?)$",
313806c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Z128rmbkz$",
313906c3fb27SDimitry Andric                                               "^VPS(L|R)LWZ(128|256)mik(z?)$",
314006c3fb27SDimitry Andric                                               "^VPSRAWZ(128|256)mik(z?)$")>;
314106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup313, ReadAfterVecLd], (instregex "^VFIXUPIMMS(D|S)Zrmi((k|kz)?)$",
314206c3fb27SDimitry Andric                                                               "^VSCALEFS(D|S)Zrm((k|kz)?)$")>;
314306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup313, ReadAfterVecXLd], (instregex "^VP(ADD|SUB)(U?)S(B|W)Z128rmk(z?)$",
314406c3fb27SDimitry Andric                                                                "^VPAVG(B|W)Z128rmk(z?)$",
314506c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SB|UW)Z128rmk(z?)$",
314606c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SW|UB)Z128rmk(z?)$",
314706c3fb27SDimitry Andric                                                                "^VPSH(L|R)DVWZ128mk(z?)$",
314806c3fb27SDimitry Andric                                                                "^VPS(L|R)L(V?)WZ128rmk(z?)$",
314906c3fb27SDimitry Andric                                                                "^VPSRA(V?)WZ128rmk(z?)$")>;
315006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup313, ReadAfterVecYLd], (instregex "^VP(ADD|SUB)(U?)S(B|W)Z256rmk(z?)$",
315106c3fb27SDimitry Andric                                                                "^VPAVG(B|W)Z256rmk(z?)$",
315206c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SB|UW)Z256rmk(z?)$",
315306c3fb27SDimitry Andric                                                                "^VPM(AX|IN)(SW|UB)Z256rmk(z?)$",
315406c3fb27SDimitry Andric                                                                "^VPSH(L|R)DVWZ256mk(z?)$",
315506c3fb27SDimitry Andric                                                                "^VPS(L|R)L(V?)WZ256rmk(z?)$",
315606c3fb27SDimitry Andric                                                                "^VPSRA(V?)WZ256rmk(z?)$")>;
315706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup313, ReadAfterVecXLd, ReadAfterVecXLd], (instregex "^VPMADD52(H|L)UQZ128m((b|k|bk|kz)?)$",
315806c3fb27SDimitry Andric                                                                                 "^VPMADD52(H|L)UQZ128mbkz$")>;
315906c3fb27SDimitry Andric
316006c3fb27SDimitry Andricdef SPRWriteResGroup314 : SchedWriteRes<[SPRPort00_01]> {
316106c3fb27SDimitry Andric  let Latency = 4;
316206c3fb27SDimitry Andric}
316306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup314], (instregex "^VCVT(T?)PD2(U?)QQZ(128|256)rr((k|kz)?)$",
316406c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PDZ(128|256)rr((k|kz)?)$",
316506c3fb27SDimitry Andric                                               "^VFIXUPIMMS(D|S)Zrri((k|kz)?)$",
316606c3fb27SDimitry Andric                                               "^VPLZCNT(D|Q)Z(128|256)rr((k|kz)?)$",
316706c3fb27SDimitry Andric                                               "^VPMADD52(H|L)UQZ(128|256)r((k|kz)?)$",
316806c3fb27SDimitry Andric                                               "^VSCALEFS(D|S)Zrr((k|kz)?)$",
316906c3fb27SDimitry Andric                                               "^VSCALEFS(D|S)Zrrb_Int((k|kz)?)$")>;
317006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup314, ReadAfterVecLd], (instregex "^VFIXUPIMMS(D|S)Zrrib((k|kz)?)$")>;
317106c3fb27SDimitry Andric
317206c3fb27SDimitry Andricdef SPRWriteResGroup315 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
317306c3fb27SDimitry Andric  let Latency = 14;
317406c3fb27SDimitry Andric  let NumMicroOps = 3;
317506c3fb27SDimitry Andric}
317606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup315], (instregex "^VCVT(T?)PH2(U?)DQZ128rm(b?)$",
317706c3fb27SDimitry Andric                                               "^VCVTPS2PHXZ128rm(b?)$")>;
317806c3fb27SDimitry Andric
317906c3fb27SDimitry Andricdef SPRWriteResGroup316 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
318006c3fb27SDimitry Andric  let Latency = 17;
318106c3fb27SDimitry Andric  let NumMicroOps = 3;
318206c3fb27SDimitry Andric}
318306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup316], (instregex "^VCVT(T?)PH2(U?)DQZ128rm(bk|kz)$",
318406c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)DQZ128rm(k|bkz)$")>;
318506c3fb27SDimitry Andric
318606c3fb27SDimitry Andricdef SPRWriteResGroup317 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
318706c3fb27SDimitry Andric  let Latency = 11;
318806c3fb27SDimitry Andric  let NumMicroOps = 2;
318906c3fb27SDimitry Andric}
319006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup317], (instregex "^VCVT(T?)PH2(U?)DQZ(128|256)rrk(z?)$",
319106c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)(X?)Z256rrk(z?)$")>;
319206c3fb27SDimitry Andric
319306c3fb27SDimitry Andricdef SPRWriteResGroup318 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
319406c3fb27SDimitry Andric  let Latency = 18;
319506c3fb27SDimitry Andric  let NumMicroOps = 3;
319606c3fb27SDimitry Andric}
319706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup318], (instregex "^VCVT(T?)PH2(U?)DQZ256rm(bk|kz)$",
319806c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)DQZ256rm(k|bkz)$",
319906c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZ256rm(bk|kz)$",
320006c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZ256rm(k|bkz)$")>;
320106c3fb27SDimitry Andric
320206c3fb27SDimitry Andricdef SPRWriteResGroup319 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
320306c3fb27SDimitry Andric  let Latency = 18;
320406c3fb27SDimitry Andric  let NumMicroOps = 3;
320506c3fb27SDimitry Andric}
320606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup319], (instregex "^VCVT(T?)PH2(U?)DQZrm(bk|kz)$",
320706c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)DQZrm(k|bkz)$",
320806c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZrm(bk|kz)$",
320906c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZrm(k|bkz)$")>;
321006c3fb27SDimitry Andric
321106c3fb27SDimitry Andricdef SPRWriteResGroup320 : SchedWriteRes<[SPRPort00, SPRPort05]> {
321206c3fb27SDimitry Andric  let Latency = 8;
321306c3fb27SDimitry Andric  let NumMicroOps = 2;
321406c3fb27SDimitry Andric}
321506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup320], (instregex "^VCVT(T?)PH2(U?)DQZrr(b?)$",
321606c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)(X?)Zrr(b?)$",
321706c3fb27SDimitry Andric                                               "^VPSHUFBITQMBZ(128|256)rrk$")>;
321806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup320], (instrs VPSHUFBITQMBZrrk)>;
321906c3fb27SDimitry Andric
322006c3fb27SDimitry Andricdef SPRWriteResGroup321 : SchedWriteRes<[SPRPort00, SPRPort05]> {
322106c3fb27SDimitry Andric  let Latency = 11;
322206c3fb27SDimitry Andric  let NumMicroOps = 2;
322306c3fb27SDimitry Andric}
322406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup321], (instregex "^VCVT(T?)PH2(U?)DQZrr(bk|kz)$",
322506c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)DQZrr(k|bkz)$",
322606c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZrr(bk|kz)$",
322706c3fb27SDimitry Andric                                               "^VCVTP(H2PS|S2PH)XZrr(k|bkz)$")>;
322806c3fb27SDimitry Andric
322906c3fb27SDimitry Andricdef SPRWriteResGroup322 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
32305f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 2];
323106c3fb27SDimitry Andric  let Latency = 23;
323206c3fb27SDimitry Andric  let NumMicroOps = 7;
323306c3fb27SDimitry Andric}
323406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup322], (instregex "^VCVTPH2PDZ128rm(b?)$")>;
323506c3fb27SDimitry Andric
323606c3fb27SDimitry Andricdef SPRWriteResGroup323 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
32375f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 1, 2];
323806c3fb27SDimitry Andric  let Latency = 26;
323906c3fb27SDimitry Andric  let NumMicroOps = 7;
324006c3fb27SDimitry Andric}
324106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup323], (instregex "^VCVTPH2PDZ128rm(bk|kz)$",
324206c3fb27SDimitry Andric                                               "^VCVTPH2PDZ128rm(k|bkz)$")>;
324306c3fb27SDimitry Andric
324406c3fb27SDimitry Andricdef SPRWriteResGroup324 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort05]> {
32455f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
324606c3fb27SDimitry Andric  let Latency = 16;
324706c3fb27SDimitry Andric  let NumMicroOps = 6;
324806c3fb27SDimitry Andric}
324906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup324], (instrs VCVTPH2PDZ128rr)>;
325006c3fb27SDimitry Andric
325106c3fb27SDimitry Andricdef SPRWriteResGroup325 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort05]> {
32525f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1, 2];
325306c3fb27SDimitry Andric  let Latency = 19;
325406c3fb27SDimitry Andric  let NumMicroOps = 6;
325506c3fb27SDimitry Andric}
325606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup325], (instregex "^VCVTPH2PDZ128rrk(z?)$")>;
325706c3fb27SDimitry Andric
325806c3fb27SDimitry Andricdef SPRWriteResGroup326 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
32595f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
326006c3fb27SDimitry Andric  let Latency = 22;
326106c3fb27SDimitry Andric  let NumMicroOps = 5;
326206c3fb27SDimitry Andric}
326306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup326], (instregex "^VCVTPH2PDZ256rm(b?)$")>;
326406c3fb27SDimitry Andric
326506c3fb27SDimitry Andricdef SPRWriteResGroup327 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
32665f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
326706c3fb27SDimitry Andric  let Latency = 25;
326806c3fb27SDimitry Andric  let NumMicroOps = 5;
326906c3fb27SDimitry Andric}
327006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup327], (instregex "^VCVTPH2PDZ256rm(bk|kz)$",
327106c3fb27SDimitry Andric                                               "^VCVTPH2PDZ256rm(k|bkz)$")>;
327206c3fb27SDimitry Andric
327306c3fb27SDimitry Andricdef SPRWriteResGroup328 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
32745f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
327506c3fb27SDimitry Andric  let Latency = 15;
327606c3fb27SDimitry Andric  let NumMicroOps = 4;
327706c3fb27SDimitry Andric}
327806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup328], (instrs VCVTPH2PDZ256rr)>;
327906c3fb27SDimitry Andric
328006c3fb27SDimitry Andricdef SPRWriteResGroup329 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
32815f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
328206c3fb27SDimitry Andric  let Latency = 18;
328306c3fb27SDimitry Andric  let NumMicroOps = 4;
328406c3fb27SDimitry Andric}
328506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup329], (instregex "^VCVTPH2PDZ256rrk(z?)$")>;
328606c3fb27SDimitry Andric
328706c3fb27SDimitry Andricdef SPRWriteResGroup330 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
328806c3fb27SDimitry Andric  let Latency = 9;
328906c3fb27SDimitry Andric  let NumMicroOps = 2;
329006c3fb27SDimitry Andric}
329106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup330], (instregex "^VCVTP(H2PS|S2PH)(X?)Z128rrk(z?)$")>;
329206c3fb27SDimitry Andric
329306c3fb27SDimitry Andricdef SPRWriteResGroup331 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
329406c3fb27SDimitry Andric  let Latency = 14;
329506c3fb27SDimitry Andric  let NumMicroOps = 2;
329606c3fb27SDimitry Andric}
329706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup331], (instregex "^VCVTPH2PSZ(128|256)rmk(z?)$")>;
329806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup331, ReadAfterVecLd], (instregex "^VCVTSH2SSZrm_Intk(z?)$")>;
329906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup331, ReadAfterVecXLd], (instregex "^VPMADDUBSWZ128rmk(z?)$",
330006c3fb27SDimitry Andric                                                                "^VPMULH((U|RS)?)WZ128rmk(z?)$",
330106c3fb27SDimitry Andric                                                                "^VPMULLWZ128rmk(z?)$")>;
330206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup331, ReadAfterVecYLd], (instregex "^VPMADDUBSWZ256rmk(z?)$",
330306c3fb27SDimitry Andric                                                                "^VPMULH((U|RS)?)WZ256rmk(z?)$",
330406c3fb27SDimitry Andric                                                                "^VPMULLWZ256rmk(z?)$")>;
330506c3fb27SDimitry Andric
330606c3fb27SDimitry Andricdef SPRWriteResGroup332 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
330706c3fb27SDimitry Andric  let Latency = 13;
330806c3fb27SDimitry Andric  let NumMicroOps = 3;
330906c3fb27SDimitry Andric}
331006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup332], (instregex "^VCVT(T?)PS2(U?)QQZrm((b|k|bk|kz)?)$",
331106c3fb27SDimitry Andric                                               "^VCVT(T?)PS2(U?)QQZrmbkz$")>;
331206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup332], (instrs VCVTPH2PSZrm)>;
331306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup332, ReadAfterVecYLd], (instregex "^VPERMWZrmk(z?)$")>;
331406c3fb27SDimitry Andric
331506c3fb27SDimitry Andricdef SPRWriteResGroup333 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
33165f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1, 1, 1];
331706c3fb27SDimitry Andric  let Latency = 17;
331806c3fb27SDimitry Andric  let NumMicroOps = 6;
331906c3fb27SDimitry Andric}
332006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup333], (instregex "^VCVT(T?)PH2(U?)QQZ128rm((b|k|bk|kz)?)$",
332106c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)QQZ128rmbkz$")>;
332206c3fb27SDimitry Andric
332306c3fb27SDimitry Andricdef SPRWriteResGroup334 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
33245f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1];
332506c3fb27SDimitry Andric  let Latency = 10;
332606c3fb27SDimitry Andric  let NumMicroOps = 4;
332706c3fb27SDimitry Andric}
332806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup334], (instregex "^VCVT(T?)PH2(U?)QQZ(128|256)rr((k|kz)?)$")>;
332906c3fb27SDimitry Andric
333006c3fb27SDimitry Andricdef SPRWriteResGroup335 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
33315f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1, 1, 1];
333206c3fb27SDimitry Andric  let Latency = 18;
333306c3fb27SDimitry Andric  let NumMicroOps = 6;
333406c3fb27SDimitry Andric}
333506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup335], (instregex "^VCVT(T?)PH2(U?)QQZ256rm((b|k|bk|kz)?)$",
333606c3fb27SDimitry Andric                                               "^VCVT(T?)PH2(U?)QQZ256rmbkz$")>;
333706c3fb27SDimitry Andric
333806c3fb27SDimitry Andricdef SPRWriteResGroup336 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
333906c3fb27SDimitry Andric  let Latency = 16;
334006c3fb27SDimitry Andric  let NumMicroOps = 3;
334106c3fb27SDimitry Andric}
334206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup336], (instregex "^VCVTPS2PHXZ128rm(bk|kz)$",
334306c3fb27SDimitry Andric                                               "^VCVTPS2PHXZ128rm(k|bkz)$",
334406c3fb27SDimitry Andric                                               "^VCVTPS2PHXZ256rm(b?)$")>;
334506c3fb27SDimitry Andric
334606c3fb27SDimitry Andricdef SPRWriteResGroup337 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
334706c3fb27SDimitry Andric  let Latency = 16;
334806c3fb27SDimitry Andric  let NumMicroOps = 3;
334906c3fb27SDimitry Andric}
335006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup337], (instregex "^VCVTPS2PHXZrm(b?)$")>;
335106c3fb27SDimitry Andric
335206c3fb27SDimitry Andricdef SPRWriteResGroup338 : SchedWriteRes<[SPRPort00_01, SPRPort04_09, SPRPort07_08]> {
335306c3fb27SDimitry Andric  let Latency = 16;
335406c3fb27SDimitry Andric  let NumMicroOps = 3;
335506c3fb27SDimitry Andric}
335606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup338], (instregex "^VCVTPS2PHZ(128|256)mrk$")>;
335706c3fb27SDimitry Andric
335806c3fb27SDimitry Andricdef SPRWriteResGroup339 : SchedWriteRes<[SPRPort00, SPRPort04_09, SPRPort07_08]> {
335906c3fb27SDimitry Andric  let Latency = 16;
336006c3fb27SDimitry Andric  let NumMicroOps = 3;
336106c3fb27SDimitry Andric}
336206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup339], (instrs VCVTPS2PHZmrk)>;
336306c3fb27SDimitry Andric
336406c3fb27SDimitry Andricdef SPRWriteResGroup340 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
336506c3fb27SDimitry Andric  let Latency = 5;
336606c3fb27SDimitry Andric  let NumMicroOps = 2;
336706c3fb27SDimitry Andric}
336806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup340], (instregex "^VCVT(T?)PS2(U?)QQZ128rr((k|kz)?)$",
336906c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PSZ128rr((k|kz)?)$")>;
337006c3fb27SDimitry Andric
337106c3fb27SDimitry Andricdef SPRWriteResGroup341 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
337206c3fb27SDimitry Andric  let Latency = 15;
337306c3fb27SDimitry Andric  let NumMicroOps = 5;
337406c3fb27SDimitry Andric}
337506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup341], (instregex "^VCVT(U?)QQ2PHZ128rm(b?)$")>;
337606c3fb27SDimitry Andric
337706c3fb27SDimitry Andricdef SPRWriteResGroup342 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
337806c3fb27SDimitry Andric  let Latency = 17;
337906c3fb27SDimitry Andric  let NumMicroOps = 5;
338006c3fb27SDimitry Andric}
338106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup342], (instregex "^VCVT(U?)QQ2PHZ128rm(bk|kz)$",
338206c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PHZ128rm(k|bkz)$")>;
338306c3fb27SDimitry Andric
338406c3fb27SDimitry Andricdef SPRWriteResGroup343 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort05]> {
338506c3fb27SDimitry Andric  let Latency = 8;
338606c3fb27SDimitry Andric  let NumMicroOps = 4;
338706c3fb27SDimitry Andric}
338806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup343], (instregex "^VCVT(U?)QQ2PHZ128rr$")>;
338906c3fb27SDimitry Andric
339006c3fb27SDimitry Andricdef SPRWriteResGroup344 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort05]> {
339106c3fb27SDimitry Andric  let Latency = 10;
339206c3fb27SDimitry Andric  let NumMicroOps = 4;
339306c3fb27SDimitry Andric}
339406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup344], (instregex "^VCVT(U?)QQ2PHZ128rrk(z?)$",
339506c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PHZ256rr$")>;
339606c3fb27SDimitry Andric
339706c3fb27SDimitry Andricdef SPRWriteResGroup345 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
339806c3fb27SDimitry Andric  let Latency = 18;
339906c3fb27SDimitry Andric  let NumMicroOps = 5;
340006c3fb27SDimitry Andric}
340106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup345], (instregex "^VCVT(U?)QQ2PHZ256rm(b?)$")>;
340206c3fb27SDimitry Andric
340306c3fb27SDimitry Andricdef SPRWriteResGroup346 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
340406c3fb27SDimitry Andric  let Latency = 20;
340506c3fb27SDimitry Andric  let NumMicroOps = 5;
340606c3fb27SDimitry Andric}
340706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup346], (instregex "^VCVT(U?)QQ2PHZ256rm(bk|kz)$",
340806c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PHZ256rm(k|bkz)$")>;
340906c3fb27SDimitry Andric
341006c3fb27SDimitry Andricdef SPRWriteResGroup347 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort05]> {
341106c3fb27SDimitry Andric  let Latency = 12;
341206c3fb27SDimitry Andric  let NumMicroOps = 4;
341306c3fb27SDimitry Andric}
341406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup347], (instregex "^VCVT(U?)QQ2PHZ256rrk(z?)$")>;
341506c3fb27SDimitry Andric
341606c3fb27SDimitry Andricdef SPRWriteResGroup348 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
34175f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2];
341806c3fb27SDimitry Andric  let Latency = 18;
341906c3fb27SDimitry Andric  let NumMicroOps = 5;
342006c3fb27SDimitry Andric}
342106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup348], (instregex "^VCVT(U?)QQ2PHZrm(b?)$")>;
342206c3fb27SDimitry Andric
342306c3fb27SDimitry Andricdef SPRWriteResGroup349 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
34245f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2];
342506c3fb27SDimitry Andric  let Latency = 20;
342606c3fb27SDimitry Andric  let NumMicroOps = 5;
342706c3fb27SDimitry Andric}
342806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup349], (instregex "^VCVT(U?)QQ2PHZrm(bk|kz)$",
342906c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PHZrm(k|bkz)$")>;
343006c3fb27SDimitry Andric
343106c3fb27SDimitry Andricdef SPRWriteResGroup350 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
34325f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
343306c3fb27SDimitry Andric  let Latency = 10;
343406c3fb27SDimitry Andric  let NumMicroOps = 4;
343506c3fb27SDimitry Andric}
343606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup350], (instregex "^VCVT(U?)QQ2PHZrr(b?)$")>;
343706c3fb27SDimitry Andric
343806c3fb27SDimitry Andricdef SPRWriteResGroup351 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
34395f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
344006c3fb27SDimitry Andric  let Latency = 12;
344106c3fb27SDimitry Andric  let NumMicroOps = 4;
344206c3fb27SDimitry Andric}
344306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup351], (instregex "^VCVT(U?)QQ2PHZrr(bk|kz)$",
344406c3fb27SDimitry Andric                                               "^VCVT(U?)QQ2PHZrr(k|bkz)$")>;
344506c3fb27SDimitry Andric
344606c3fb27SDimitry Andricdef SPRWriteResGroup352 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
34475f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 1, 1];
344806c3fb27SDimitry Andric  let Latency = 18;
344906c3fb27SDimitry Andric  let NumMicroOps = 7;
345006c3fb27SDimitry Andric}
345106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup352, ReadAfterVecLd], (instregex "^VCVTSD2SHZrm((_Int)?)$")>;
345206c3fb27SDimitry Andric
345306c3fb27SDimitry Andricdef SPRWriteResGroup353 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
34545f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2, 1, 1, 1];
345506c3fb27SDimitry Andric  let Latency = 21;
345606c3fb27SDimitry Andric  let NumMicroOps = 7;
345706c3fb27SDimitry Andric}
345806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup353, ReadAfterVecLd], (instregex "^VCVTSD2SHZrm_Intk(z?)$")>;
345906c3fb27SDimitry Andric
346006c3fb27SDimitry Andricdef SPRWriteResGroup354 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
34615f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
346206c3fb27SDimitry Andric  let Latency = 11;
346306c3fb27SDimitry Andric  let NumMicroOps = 4;
346406c3fb27SDimitry Andric}
346506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup354], (instregex "^VCVTSD2SHZrr(b?)_Int$")>;
346606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup354], (instrs VCVTSD2SHZrr)>;
346706c3fb27SDimitry Andric
346806c3fb27SDimitry Andricdef SPRWriteResGroup355 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
34695f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
347006c3fb27SDimitry Andric  let Latency = 14;
347106c3fb27SDimitry Andric  let NumMicroOps = 4;
347206c3fb27SDimitry Andric}
347306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup355], (instregex "^VCVTSD2SHZrr(b?)_Intk(z?)$")>;
347406c3fb27SDimitry Andric
347506c3fb27SDimitry Andricdef SPRWriteResGroup356 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
34765f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
347706c3fb27SDimitry Andric  let Latency = 18;
347806c3fb27SDimitry Andric  let NumMicroOps = 4;
347906c3fb27SDimitry Andric}
348006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup356, ReadAfterVecLd], (instregex "^VCVTSH2SDZrm((_Int)?)$")>;
348106c3fb27SDimitry Andric
348206c3fb27SDimitry Andricdef SPRWriteResGroup357 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
34835f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
348406c3fb27SDimitry Andric  let Latency = 20;
348506c3fb27SDimitry Andric  let NumMicroOps = 4;
348606c3fb27SDimitry Andric}
348706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup357, ReadAfterVecLd], (instregex "^VCVTSH2SDZrm_Intk(z?)$")>;
348806c3fb27SDimitry Andric
348906c3fb27SDimitry Andricdef SPRWriteResGroup358 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
34905f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
349106c3fb27SDimitry Andric  let Latency = 10;
349206c3fb27SDimitry Andric  let NumMicroOps = 3;
349306c3fb27SDimitry Andric}
349406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup358], (instregex "^VCVTSH2SDZrr(b?)_Int$")>;
349506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup358], (instrs VCVTSH2SDZrr)>;
349606c3fb27SDimitry Andric
349706c3fb27SDimitry Andricdef SPRWriteResGroup359 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
34985f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
349906c3fb27SDimitry Andric  let Latency = 13;
350006c3fb27SDimitry Andric  let NumMicroOps = 3;
350106c3fb27SDimitry Andric}
350206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup359], (instregex "^VCVTSH2SDZrr(b?)_Intk(z?)$")>;
350306c3fb27SDimitry Andric
350406c3fb27SDimitry Andricdef SPRWriteResGroup360 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort02_03_11]> {
350506c3fb27SDimitry Andric  let Latency = 13;
350606c3fb27SDimitry Andric  let NumMicroOps = 3;
350706c3fb27SDimitry Andric}
350806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup360, ReadAfterVecLd], (instregex "^VCVT(T?)SH2(U?)SI((64)?)Zrm_Int$",
350906c3fb27SDimitry Andric                                                               "^VCVTTSH2(U?)SI((64)?)Zrm$")>;
351006c3fb27SDimitry Andric
351106c3fb27SDimitry Andricdef SPRWriteResGroup361 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05]> {
351206c3fb27SDimitry Andric  let Latency = 8;
351306c3fb27SDimitry Andric  let NumMicroOps = 3;
351406c3fb27SDimitry Andric}
351506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup361], (instregex "^VCVT(T?)SH2(U?)SI((64)?)Zrr(b?)_Int$",
351606c3fb27SDimitry Andric                                               "^VCVTTSH2(U?)SI((64)?)Zrr$")>;
351706c3fb27SDimitry Andric
351806c3fb27SDimitry Andricdef SPRWriteResGroup362 : SchedWriteRes<[SPRPort00_01]> {
351906c3fb27SDimitry Andric  let Latency = 8;
352006c3fb27SDimitry Andric}
352106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup362], (instregex "^VCVTSH2SSZrr(b?)_Intk(z?)$")>;
352206c3fb27SDimitry Andric
352306c3fb27SDimitry Andricdef SPRWriteResGroup363 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
352406c3fb27SDimitry Andric  let Latency = 14;
352506c3fb27SDimitry Andric  let NumMicroOps = 3;
352606c3fb27SDimitry Andric}
352706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup363, ReadAfterVecLd], (instregex "^VCVT(U?)SI((64)?)2SHZrm((_Int)?)$",
352806c3fb27SDimitry Andric                                                               "^VCVTSS2SHZrm((_Int)?)$")>;
352906c3fb27SDimitry Andric
353006c3fb27SDimitry Andricdef SPRWriteResGroup364 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
353106c3fb27SDimitry Andric  let Latency = 16;
353206c3fb27SDimitry Andric  let NumMicroOps = 3;
353306c3fb27SDimitry Andric}
353406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup364, ReadAfterVecLd], (instregex "^VCVTSS2SHZrm_Intk(z?)$")>;
353506c3fb27SDimitry Andric
353606c3fb27SDimitry Andricdef SPRWriteResGroup365 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05]> {
353706c3fb27SDimitry Andric  let Latency = 6;
353806c3fb27SDimitry Andric  let NumMicroOps = 2;
353906c3fb27SDimitry Andric}
354006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup365], (instregex "^VCVTSS2SHZrr(b?)_Int$")>;
354106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup365], (instrs VCVTSS2SHZrr)>;
354206c3fb27SDimitry Andric
354306c3fb27SDimitry Andricdef SPRWriteResGroup366 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05]> {
354406c3fb27SDimitry Andric  let Latency = 9;
354506c3fb27SDimitry Andric  let NumMicroOps = 2;
354606c3fb27SDimitry Andric}
354706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup366], (instregex "^VCVTSS2SHZrr(b?)_Intk(z?)$")>;
354806c3fb27SDimitry Andric
354906c3fb27SDimitry Andricdef SPRWriteResGroup367 : SchedWriteRes<[SPRPort05]> {
355006c3fb27SDimitry Andric  let Latency = 5;
355106c3fb27SDimitry Andric}
355206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup367], (instregex "^VDBPSADBWZ(128|256)rrik(z?)$",
355306c3fb27SDimitry Andric                                               "^VDBPSADBWZrrik(z?)$",
355406c3fb27SDimitry Andric                                               "^VPACK(S|U)S(DW|WB)Z(128|256)rrk(z?)$",
355506c3fb27SDimitry Andric                                               "^VPACK(S|U)S(DW|WB)Zrrk(z?)$",
355606c3fb27SDimitry Andric                                               "^VPBROADCAST(B|W|Dr|Qr|Wr)Z((256)?)rrk(z?)$",
355706c3fb27SDimitry Andric                                               "^VPBROADCAST(B|D|Q|W)rZ(128|256)rr$",
355806c3fb27SDimitry Andric                                               "^VPBROADCASTBrZ(128|256)rrk(z?)$",
355906c3fb27SDimitry Andric                                               "^VPBROADCAST(B|D|Q|W)rZrr$",
356006c3fb27SDimitry Andric                                               "^VPBROADCASTBrZrrk(z?)$",
356106c3fb27SDimitry Andric                                               "^VPBROADCAST(D|Q|W)rZ128rrk(z?)$",
356206c3fb27SDimitry Andric                                               "^VPERMBZ(128|256)rrk(z?)$",
356306c3fb27SDimitry Andric                                               "^VPERMBZrrk(z?)$",
356406c3fb27SDimitry Andric                                               "^VPMOV(S|Z)XBWZ((256)?)rrk(z?)$",
356506c3fb27SDimitry Andric                                               "^VPMULTISHIFTQBZ(128|256)rrk(z?)$",
356606c3fb27SDimitry Andric                                               "^VPMULTISHIFTQBZrrk(z?)$",
356706c3fb27SDimitry Andric                                               "^VPOPCNT(B|W)Z(128|256)rrk(z?)$",
356806c3fb27SDimitry Andric                                               "^VPOPCNT(B|W)Zrrk(z?)$")>;
356906c3fb27SDimitry Andric
357006c3fb27SDimitry Andricdef SPRWriteResGroup368 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
35715f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
357206c3fb27SDimitry Andric  let Latency = 36;
357306c3fb27SDimitry Andric  let NumMicroOps = 4;
357406c3fb27SDimitry Andric}
357506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup368, ReadAfterVecXLd], (instregex "^VDIVPHZ128rm(b?)$")>;
357606c3fb27SDimitry Andric
357706c3fb27SDimitry Andricdef SPRWriteResGroup369 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
35785f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
357906c3fb27SDimitry Andric  let Latency = 38;
358006c3fb27SDimitry Andric  let NumMicroOps = 4;
358106c3fb27SDimitry Andric}
358206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup369, ReadAfterVecXLd], (instregex "^VDIVPHZ128rm(bk|kz)$",
358306c3fb27SDimitry Andric                                                                "^VDIVPHZ128rm(k|bkz)$")>;
358406c3fb27SDimitry Andric
358506c3fb27SDimitry Andricdef SPRWriteResGroup370 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
35865f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
358706c3fb27SDimitry Andric  let Latency = 31;
358806c3fb27SDimitry Andric  let NumMicroOps = 3;
358906c3fb27SDimitry Andric}
359006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup370], (instregex "^VDIVPHZ(128|256)rr$")>;
359106c3fb27SDimitry Andric
359206c3fb27SDimitry Andricdef SPRWriteResGroup371 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
35935f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
359406c3fb27SDimitry Andric  let Latency = 33;
359506c3fb27SDimitry Andric  let NumMicroOps = 3;
359606c3fb27SDimitry Andric}
359706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup371], (instregex "^VDIVPHZ(128|256)rrk$",
359806c3fb27SDimitry Andric                                               "^VSQRTPHZ(128|256)r$")>;
359906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup371], (instrs VDIVPHZ128rrkz)>;
360006c3fb27SDimitry Andric
360106c3fb27SDimitry Andricdef SPRWriteResGroup372 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
36025f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
360306c3fb27SDimitry Andric  let Latency = 37;
360406c3fb27SDimitry Andric  let NumMicroOps = 4;
360506c3fb27SDimitry Andric}
360606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup372, ReadAfterVecYLd], (instregex "^VDIVPHZ256rm(b?)$")>;
360706c3fb27SDimitry Andric
360806c3fb27SDimitry Andricdef SPRWriteResGroup373 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
36095f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
361006c3fb27SDimitry Andric  let Latency = 39;
361106c3fb27SDimitry Andric  let NumMicroOps = 4;
361206c3fb27SDimitry Andric}
361306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup373, ReadAfterVecYLd], (instregex "^VDIVPHZ256rm(bk|kz)$",
361406c3fb27SDimitry Andric                                                                "^VDIVPHZ256rm(k|bkz)$")>;
361506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup373, ReadAfterVecXLd], (instregex "^VSQRTPHZ128m(b?)$")>;
361606c3fb27SDimitry Andric
361706c3fb27SDimitry Andricdef SPRWriteResGroup374 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
36185f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
361906c3fb27SDimitry Andric  let Latency = 11;
362006c3fb27SDimitry Andric  let NumMicroOps = 3;
362106c3fb27SDimitry Andric}
362206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup374], (instrs VDIVPHZ256rrkz)>;
362306c3fb27SDimitry Andric
362406c3fb27SDimitry Andricdef SPRWriteResGroup375 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
36255f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 2, 1, 1, 1];
362606c3fb27SDimitry Andric  let Latency = 49;
362706c3fb27SDimitry Andric  let NumMicroOps = 9;
362806c3fb27SDimitry Andric}
362906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup375, ReadAfterVecYLd], (instregex "^VDIVPHZrm(b?)$")>;
363006c3fb27SDimitry Andric
363106c3fb27SDimitry Andricdef SPRWriteResGroup376 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
36325f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 2, 1, 1, 1];
363306c3fb27SDimitry Andric  let Latency = 51;
363406c3fb27SDimitry Andric  let NumMicroOps = 9;
363506c3fb27SDimitry Andric}
363606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup376, ReadAfterVecYLd], (instregex "^VDIVPHZrm(bk|kz)$",
363706c3fb27SDimitry Andric                                                                "^VDIVPHZrm(k|bkz)$")>;
363806c3fb27SDimitry Andric
363906c3fb27SDimitry Andricdef SPRWriteResGroup377 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort05]> {
36405f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1];
364106c3fb27SDimitry Andric  let Latency = 41;
364206c3fb27SDimitry Andric  let NumMicroOps = 6;
364306c3fb27SDimitry Andric}
364406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup377], (instregex "^VDIVPHZrr(b?)$")>;
364506c3fb27SDimitry Andric
364606c3fb27SDimitry Andricdef SPRWriteResGroup378 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort05]> {
36475f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1];
364806c3fb27SDimitry Andric  let Latency = 43;
364906c3fb27SDimitry Andric  let NumMicroOps = 6;
365006c3fb27SDimitry Andric}
365106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup378], (instregex "^VDIVPHZrr(bk|kz)$",
365206c3fb27SDimitry Andric                                               "^VDIVPHZrr(k|bkz)$")>;
365306c3fb27SDimitry Andric
365406c3fb27SDimitry Andricdef SPRWriteResGroup379 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
36555f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
365606c3fb27SDimitry Andric  let Latency = 17;
365706c3fb27SDimitry Andric  let NumMicroOps = 3;
365806c3fb27SDimitry Andric}
365906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup379], (instrs VDIVPSZrr)>;
366006c3fb27SDimitry Andric
366106c3fb27SDimitry Andricdef SPRWriteResGroup380 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
366206c3fb27SDimitry Andric  let Latency = 21;
366306c3fb27SDimitry Andric  let NumMicroOps = 2;
366406c3fb27SDimitry Andric}
366506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup380, ReadAfterVecLd], (instregex "^VDIVSHZrm_Int((k|kz)?)$")>;
366606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup380, ReadAfterVecLd], (instrs VDIVSHZrm)>;
366706c3fb27SDimitry Andric
366806c3fb27SDimitry Andricdef SPRWriteResGroup381 : SchedWriteRes<[SPRPort00]> {
366906c3fb27SDimitry Andric  let Latency = 14;
367006c3fb27SDimitry Andric}
367106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup381], (instrs VDIVSHZrr_Int,
367206c3fb27SDimitry Andric                                            VSQRTSHZr_Int)>;
367306c3fb27SDimitry Andric
367406c3fb27SDimitry Andricdef SPRWriteResGroup382 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
36755f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
367606c3fb27SDimitry Andric  let Latency = 15;
367706c3fb27SDimitry Andric  let NumMicroOps = 5;
367806c3fb27SDimitry Andric}
367906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup382, ReadAfterVecXLd], (instregex "^VDPBF16PSZ128m((b|k|bk|kz)?)$")>;
368006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup382, ReadAfterVecXLd], (instrs VDPBF16PSZ128mbkz)>;
368106c3fb27SDimitry Andric
368206c3fb27SDimitry Andricdef SPRWriteResGroup383 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
36835f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 2];
368406c3fb27SDimitry Andric  let Latency = 8;
368506c3fb27SDimitry Andric  let NumMicroOps = 4;
368606c3fb27SDimitry Andric}
368706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup383], (instregex "^VDPBF16PSZ(128|256)r((k|kz)?)$")>;
368806c3fb27SDimitry Andric
368906c3fb27SDimitry Andricdef SPRWriteResGroup384 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
36905f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 2];
369106c3fb27SDimitry Andric  let Latency = 16;
369206c3fb27SDimitry Andric  let NumMicroOps = 5;
369306c3fb27SDimitry Andric}
369406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup384, ReadAfterVecYLd], (instregex "^VDPBF16PSZ256m((b|k|bk|kz)?)$")>;
369506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup384, ReadAfterVecYLd], (instrs VDPBF16PSZ256mbkz)>;
369606c3fb27SDimitry Andric
369706c3fb27SDimitry Andricdef SPRWriteResGroup385 : SchedWriteRes<[SPRPort00, SPRPort01, SPRPort02_03_11]> {
36985f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 7, 18];
369906c3fb27SDimitry Andric  let Latency = 81;
370006c3fb27SDimitry Andric  let NumMicroOps = 31;
370106c3fb27SDimitry Andric}
370206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup385], (instrs VERRm)>;
370306c3fb27SDimitry Andric
370406c3fb27SDimitry Andricdef SPRWriteResGroup386 : SchedWriteRes<[SPRPort00, SPRPort01, SPRPort02_03_11]> {
37055f757f3fSDimitry Andric  let ReleaseAtCycles = [6, 7, 17];
370606c3fb27SDimitry Andric  let Latency = 74;
370706c3fb27SDimitry Andric  let NumMicroOps = 30;
370806c3fb27SDimitry Andric}
370906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup386], (instrs VERRr)>;
371006c3fb27SDimitry Andric
371106c3fb27SDimitry Andricdef SPRWriteResGroup387 : SchedWriteRes<[SPRPort00, SPRPort01, SPRPort02_03_11]> {
37125f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 8, 21];
371306c3fb27SDimitry Andric  let Latency = 81;
371406c3fb27SDimitry Andric  let NumMicroOps = 34;
371506c3fb27SDimitry Andric}
371606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup387], (instrs VERWm)>;
371706c3fb27SDimitry Andric
371806c3fb27SDimitry Andricdef SPRWriteResGroup388 : SchedWriteRes<[SPRPort00, SPRPort01, SPRPort02_03_11]> {
37195f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 8, 20];
372006c3fb27SDimitry Andric  let Latency = 74;
372106c3fb27SDimitry Andric  let NumMicroOps = 33;
372206c3fb27SDimitry Andric}
372306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup388], (instrs VERWr)>;
372406c3fb27SDimitry Andric
372506c3fb27SDimitry Andricdef SPRWriteResGroup389 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
37265f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
372706c3fb27SDimitry Andric  let Latency = 10;
372806c3fb27SDimitry Andric  let NumMicroOps = 3;
372906c3fb27SDimitry Andric}
373006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup389, ReadAfterVecYLd], (instregex "^VEXPANDP(D|S)Z128rm((k|kz)?)$",
373106c3fb27SDimitry Andric                                                                "^VPEXPAND(B|D|Q|W)Z128rm$",
373206c3fb27SDimitry Andric                                                                "^VPEXPAND(D|Q)Z128rmk(z?)$")>;
373306c3fb27SDimitry Andric
373406c3fb27SDimitry Andricdef SPRWriteResGroup390 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
37355f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
373606c3fb27SDimitry Andric  let Latency = 16;
373706c3fb27SDimitry Andric  let NumMicroOps = 3;
373806c3fb27SDimitry Andric}
373906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup390], (instregex "^VF(C?)MADDCPHZ(128|256)m(b?)$",
3740*0fca6ea1SDimitry Andric                                               "^VROUNDP(D|S)Ymi$")>;
374106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup390, ReadAfterVecXLd], (instregex "^VF(C?)MADDCSHZm$",
374206c3fb27SDimitry Andric                                                                "^VF(C?)MULCPHZ128rm(b?)$",
374306c3fb27SDimitry Andric                                                                "^VF(C?)MULCSHZrm$",
374406c3fb27SDimitry Andric                                                                "^VRNDSCALEPHZ128rm(b?)i$",
374506c3fb27SDimitry Andric                                                                "^VRNDSCALESHZm((_Int)?)$",
374606c3fb27SDimitry Andric                                                                "^VSCALEFPHZ128rm(b?)$")>;
374706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup390, ReadAfterVecYLd], (instregex "^VF(C?)MULCPHZ256rm(b?)$",
374806c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|H|S)Z256rm(b?)i$",
374906c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|S)Z256rm(b?)ik(z?)$",
375006c3fb27SDimitry Andric                                                                "^VSCALEFPHZ256rm(b?)$")>;
375106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup390, ReadAfterVecLd], (instrs VSCALEFSHZrm)>;
375206c3fb27SDimitry Andric
375306c3fb27SDimitry Andricdef SPRWriteResGroup391 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
37545f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
375506c3fb27SDimitry Andric  let Latency = 21;
375606c3fb27SDimitry Andric  let NumMicroOps = 3;
375706c3fb27SDimitry Andric}
375806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup391], (instregex "^VF(C?)MADDCPHZ(128|256)m(bk|kz)$",
375906c3fb27SDimitry Andric                                               "^VF(C?)MADDCPHZ(128|256)m(k|bkz)$")>;
376006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup391, ReadAfterVecXLd], (instregex "^VF(C?)MADDCSHZmk(z?)$",
376106c3fb27SDimitry Andric                                                                "^VF(C?)MULCPHZ128rm(bk|kz)$",
376206c3fb27SDimitry Andric                                                                "^VF(C?)MULCPHZ128rm(k|bkz)$",
376306c3fb27SDimitry Andric                                                                "^VF(C?)MULCSHZrmk(z?)$")>;
376406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup391, ReadAfterVecYLd], (instregex "^VF(C?)MULCPHZ256rm(bk|kz)$",
376506c3fb27SDimitry Andric                                                                "^VF(C?)MULCPHZ256rm(k|bkz)$")>;
376606c3fb27SDimitry Andric
376706c3fb27SDimitry Andricdef SPRWriteResGroup392 : SchedWriteRes<[SPRPort00_01]> {
37685f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
376906c3fb27SDimitry Andric  let Latency = 9;
377006c3fb27SDimitry Andric  let NumMicroOps = 2;
377106c3fb27SDimitry Andric}
377206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup392], (instregex "^VF(C?)MADDCPHZ(128|256)r$",
377306c3fb27SDimitry Andric                                               "^VF(C?)MADDCSHZr(b?)$",
377406c3fb27SDimitry Andric                                               "^VF(C?)MULCPHZ(128|256)rr$",
377506c3fb27SDimitry Andric                                               "^VF(C?)MULCSHZrr(b?)$",
377606c3fb27SDimitry Andric                                               "^VRNDSCALEPHZ(128|256)rri$",
377706c3fb27SDimitry Andric                                               "^VRNDSCALESHZr(b?)_Int$",
377806c3fb27SDimitry Andric                                               "^VSCALEFPHZ(128|256)rr$")>;
377906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup392], (instrs VRNDSCALESHZr,
378006c3fb27SDimitry Andric                                            VSCALEFSHZrr,
378106c3fb27SDimitry Andric                                            VSCALEFSHZrrb_Int)>;
378206c3fb27SDimitry Andric
378306c3fb27SDimitry Andricdef SPRWriteResGroup393 : SchedWriteRes<[SPRPort00_01]> {
37845f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
378506c3fb27SDimitry Andric  let Latency = 15;
378606c3fb27SDimitry Andric  let NumMicroOps = 2;
378706c3fb27SDimitry Andric}
378806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup393], (instregex "^VF(C?)MADDCPHZ(128|256)rk(z?)$",
378906c3fb27SDimitry Andric                                               "^VF(C?)MADDCSHZr(bk|kz)$",
379006c3fb27SDimitry Andric                                               "^VF(C?)MADDCSHZr(k|bkz)$",
379106c3fb27SDimitry Andric                                               "^VF(C?)MULCPHZ(128|256)rrk(z?)$",
379206c3fb27SDimitry Andric                                               "^VF(C?)MULCSHZrr(bk|kz)$",
379306c3fb27SDimitry Andric                                               "^VF(C?)MULCSHZrr(k|bkz)$")>;
379406c3fb27SDimitry Andric
379506c3fb27SDimitry Andricdef SPRWriteResGroup394 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
37965f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
379706c3fb27SDimitry Andric  let Latency = 16;
379806c3fb27SDimitry Andric  let NumMicroOps = 3;
379906c3fb27SDimitry Andric}
380006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup394], (instregex "^VF(C?)MADDCPHZm(b?)$")>;
380106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup394, ReadAfterVecYLd], (instregex "^VF(C?)MULCPHZrm(b?)$",
380206c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|H|S)Zrm(b?)i$",
380306c3fb27SDimitry Andric                                                                "^VRNDSCALEP(D|S)Zrm(b?)ik(z?)$",
380406c3fb27SDimitry Andric                                                                "^VSCALEFPHZrm(b?)$")>;
380506c3fb27SDimitry Andric
380606c3fb27SDimitry Andricdef SPRWriteResGroup395 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
38075f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
380806c3fb27SDimitry Andric  let Latency = 21;
380906c3fb27SDimitry Andric  let NumMicroOps = 3;
381006c3fb27SDimitry Andric}
381106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup395], (instregex "^VF(C?)MADDCPHZm(bk|kz)$",
381206c3fb27SDimitry Andric                                               "^VF(C?)MADDCPHZm(k|bkz)$")>;
381306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup395, ReadAfterVecYLd], (instregex "^VF(C?)MULCPHZrm(bk|kz)$",
381406c3fb27SDimitry Andric                                                                "^VF(C?)MULCPHZrm(k|bkz)$")>;
381506c3fb27SDimitry Andric
381606c3fb27SDimitry Andricdef SPRWriteResGroup396 : SchedWriteRes<[SPRPort00]> {
38175f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
381806c3fb27SDimitry Andric  let Latency = 9;
381906c3fb27SDimitry Andric  let NumMicroOps = 2;
382006c3fb27SDimitry Andric}
382106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup396], (instregex "^VF(C?)MADDCPHZr(b?)$",
382206c3fb27SDimitry Andric                                               "^VF(C?)MULCPHZrr(b?)$",
382306c3fb27SDimitry Andric                                               "^VRNDSCALEPHZrri(b?)$",
382406c3fb27SDimitry Andric                                               "^VSCALEFPHZrr(b?)$")>;
382506c3fb27SDimitry Andric
382606c3fb27SDimitry Andricdef SPRWriteResGroup397 : SchedWriteRes<[SPRPort00]> {
38275f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
382806c3fb27SDimitry Andric  let Latency = 15;
382906c3fb27SDimitry Andric  let NumMicroOps = 2;
383006c3fb27SDimitry Andric}
383106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup397], (instregex "^VF(C?)MADDCPHZr(bk|kz)$",
383206c3fb27SDimitry Andric                                               "^VF(C?)MADDCPHZr(k|bkz)$",
383306c3fb27SDimitry Andric                                               "^VF(C?)MULCPHZrr(bk|kz)$",
383406c3fb27SDimitry Andric                                               "^VF(C?)MULCPHZrr(k|bkz)$")>;
383506c3fb27SDimitry Andric
383606c3fb27SDimitry Andricdef SPRWriteResGroup398 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11]> {
38375f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 4];
383806c3fb27SDimitry Andric  let Latency = 29;
383906c3fb27SDimitry Andric  let NumMicroOps = 8;
384006c3fb27SDimitry Andric}
384106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup398, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDYrm$",
384206c3fb27SDimitry Andric                                                                              "^VPGATHER(D|Q)QYrm$")>;
384306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup398, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSYrm,
384406c3fb27SDimitry Andric                                                                           VPGATHERQDYrm)>;
384506c3fb27SDimitry Andric
384606c3fb27SDimitry Andricdef SPRWriteResGroup399 : SchedWriteRes<[SPRPort00, SPRPort01_05, SPRPort02_03_11]> {
38475f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
384806c3fb27SDimitry Andric  let Latency = 20;
384906c3fb27SDimitry Andric  let NumMicroOps = 4;
385006c3fb27SDimitry Andric}
385106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup399, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDZ128rm$",
385206c3fb27SDimitry Andric                                                                              "^VPGATHER(D|Q)QZ128rm$")>;
385306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup399, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSZ128rm,
385406c3fb27SDimitry Andric                                                                           VPGATHERQDZ128rm)>;
385506c3fb27SDimitry Andric
385606c3fb27SDimitry Andricdef SPRWriteResGroup400 : SchedWriteRes<[SPRPort00, SPRPort01_05, SPRPort02_03_11]> {
38575f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 4];
385806c3fb27SDimitry Andric  let Latency = 28;
385906c3fb27SDimitry Andric  let NumMicroOps = 7;
386006c3fb27SDimitry Andric}
386106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup400, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDZ256rm$",
386206c3fb27SDimitry Andric                                                                              "^VPGATHER(D|Q)QZ256rm$")>;
386306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup400, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSZ256rm,
386406c3fb27SDimitry Andric                                                                           VPGATHERQDZ256rm)>;
386506c3fb27SDimitry Andric
386606c3fb27SDimitry Andricdef SPRWriteResGroup401 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
38675f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 8, 2];
386806c3fb27SDimitry Andric  let Latency = 28;
386906c3fb27SDimitry Andric  let NumMicroOps = 11;
387006c3fb27SDimitry Andric}
387106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup401, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDZrm$",
387206c3fb27SDimitry Andric                                                                              "^VPGATHER(D|Q)QZrm$")>;
387306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup401, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSZrm,
387406c3fb27SDimitry Andric                                                                           VPGATHERQDZrm)>;
387506c3fb27SDimitry Andric
387606c3fb27SDimitry Andricdef SPRWriteResGroup402 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11]> {
38775f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2];
387806c3fb27SDimitry Andric  let Latency = 20;
387906c3fb27SDimitry Andric  let NumMicroOps = 5;
388006c3fb27SDimitry Andric}
388106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup402, WriteVecMaskedGatherWriteback], (instregex "^VGATHER(D|Q)PDrm$",
388206c3fb27SDimitry Andric                                                                              "^VPGATHER(D|Q)Qrm$")>;
388306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup402, WriteVecMaskedGatherWriteback], (instrs VGATHERQPSrm,
388406c3fb27SDimitry Andric                                                                           VPGATHERQDrm)>;
388506c3fb27SDimitry Andric
388606c3fb27SDimitry Andricdef SPRWriteResGroup403 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11]> {
38875f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 8];
388806c3fb27SDimitry Andric  let Latency = 30;
388906c3fb27SDimitry Andric  let NumMicroOps = 12;
389006c3fb27SDimitry Andric}
389106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup403, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSYrm,
389206c3fb27SDimitry Andric                                                                           VPGATHERDDYrm)>;
389306c3fb27SDimitry Andric
389406c3fb27SDimitry Andricdef SPRWriteResGroup404 : SchedWriteRes<[SPRPort00, SPRPort01_05, SPRPort02_03_11]> {
38955f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 4];
389606c3fb27SDimitry Andric  let Latency = 27;
389706c3fb27SDimitry Andric  let NumMicroOps = 7;
389806c3fb27SDimitry Andric}
389906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup404, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSZ128rm,
390006c3fb27SDimitry Andric                                                                           VPGATHERDDZ128rm)>;
390106c3fb27SDimitry Andric
390206c3fb27SDimitry Andricdef SPRWriteResGroup405 : SchedWriteRes<[SPRPort00, SPRPort01_05, SPRPort02_03_11]> {
39035f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 8];
390406c3fb27SDimitry Andric  let Latency = 29;
390506c3fb27SDimitry Andric  let NumMicroOps = 11;
390606c3fb27SDimitry Andric}
390706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup405, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSZ256rm,
390806c3fb27SDimitry Andric                                                                           VPGATHERDDZ256rm)>;
390906c3fb27SDimitry Andric
391006c3fb27SDimitry Andricdef SPRWriteResGroup406 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
39115f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 16, 2];
391206c3fb27SDimitry Andric  let Latency = 30;
391306c3fb27SDimitry Andric  let NumMicroOps = 19;
391406c3fb27SDimitry Andric}
391506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup406, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSZrm,
391606c3fb27SDimitry Andric                                                                           VPGATHERDDZrm)>;
391706c3fb27SDimitry Andric
391806c3fb27SDimitry Andricdef SPRWriteResGroup407 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11]> {
39195f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 4];
392006c3fb27SDimitry Andric  let Latency = 28;
392106c3fb27SDimitry Andric  let NumMicroOps = 8;
392206c3fb27SDimitry Andric}
392306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup407, WriteVecMaskedGatherWriteback], (instrs VGATHERDPSrm,
392406c3fb27SDimitry Andric                                                                           VPGATHERDDrm)>;
392506c3fb27SDimitry Andric
392606c3fb27SDimitry Andricdef SPRWriteResGroup408 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
392706c3fb27SDimitry Andric  let Latency = 15;
392806c3fb27SDimitry Andric  let NumMicroOps = 2;
392906c3fb27SDimitry Andric}
393006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup408, ReadAfterVecXLd], (instregex "^VGF2P8AFFINE((INV)?)QBZ128rm(b?)ik(z?)$",
393106c3fb27SDimitry Andric                                                                "^VGF2P8MULBZ128rmk(z?)$")>;
393206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup408, ReadAfterVecYLd], (instregex "^VGF2P8AFFINE((INV)?)QBZ256rm(b?)ik(z?)$",
393306c3fb27SDimitry Andric                                                                "^VGF2P8MULBZ256rmk(z?)$")>;
393406c3fb27SDimitry Andric
393506c3fb27SDimitry Andricdef SPRWriteResGroup409 : SchedWriteRes<[SPRPort00_01]> {
393606c3fb27SDimitry Andric  let Latency = 9;
393706c3fb27SDimitry Andric}
393806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup409], (instregex "^VGF2P8AFFINE((INV)?)QBZ(128|256)rrik$",
393906c3fb27SDimitry Andric                                               "^VGF2P8MULBZ(128|256)rrk$")>;
394006c3fb27SDimitry Andric
394106c3fb27SDimitry Andricdef SPRWriteResGroup410 : SchedWriteRes<[SPRPort00_01]> {
394206c3fb27SDimitry Andric  let Latency = 10;
394306c3fb27SDimitry Andric}
394406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup410], (instregex "^VGF2P8AFFINE((INV)?)QBZ(128|256)rrikz$",
394506c3fb27SDimitry Andric                                               "^VGF2P8MULBZ(128|256)rrkz$")>;
394606c3fb27SDimitry Andric
394706c3fb27SDimitry Andricdef SPRWriteResGroup411 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
394806c3fb27SDimitry Andric  let Latency = 15;
394906c3fb27SDimitry Andric  let NumMicroOps = 2;
395006c3fb27SDimitry Andric}
395106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup411, ReadAfterVecYLd], (instregex "^VGF2P8AFFINE((INV)?)QBZrm(b?)ik(z?)$",
395206c3fb27SDimitry Andric                                                                "^VGF2P8MULBZrmk(z?)$")>;
395306c3fb27SDimitry Andric
395406c3fb27SDimitry Andricdef SPRWriteResGroup412 : SchedWriteRes<[SPRPort00]> {
395506c3fb27SDimitry Andric  let Latency = 9;
395606c3fb27SDimitry Andric}
395706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup412], (instregex "^VGF2P8AFFINE((INV)?)QBZrrik$")>;
395806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup412], (instrs VGF2P8MULBZrrk)>;
395906c3fb27SDimitry Andric
396006c3fb27SDimitry Andricdef SPRWriteResGroup413 : SchedWriteRes<[SPRPort00]> {
396106c3fb27SDimitry Andric  let Latency = 10;
396206c3fb27SDimitry Andric}
396306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup413], (instregex "^VGF2P8AFFINE((INV)?)QBZrrikz$")>;
396406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup413], (instrs VGF2P8MULBZrrkz)>;
396506c3fb27SDimitry Andric
396606c3fb27SDimitry Andricdef SPRWriteResGroup414 : SchedWriteRes<[SPRPort01_05, SPRPort05]> {
39675f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
396806c3fb27SDimitry Andric  let Latency = 5;
396906c3fb27SDimitry Andric  let NumMicroOps = 3;
397006c3fb27SDimitry Andric}
397106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup414], (instregex "^VH(ADD|SUB)P(D|S)rr$")>;
397206c3fb27SDimitry Andric
397306c3fb27SDimitry Andricdef SPRWriteResGroup415 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort02_03_11]> {
397406c3fb27SDimitry Andric  let Latency = 7;
397506c3fb27SDimitry Andric  let NumMicroOps = 3;
397606c3fb27SDimitry Andric}
397706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup415], (instrs VLDMXCSR)>;
397806c3fb27SDimitry Andric
397906c3fb27SDimitry Andricdef SPRWriteResGroup416 : SchedWriteRes<[SPRPort01, SPRPort01_05, SPRPort02_03, SPRPort02_03_11, SPRPort04, SPRPort04_09, SPRPort05, SPRPort06]> {
39805f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 8, 1, 1, 2, 3];
398106c3fb27SDimitry Andric  let Latency = 40;
398206c3fb27SDimitry Andric  let NumMicroOps = 18;
398306c3fb27SDimitry Andric}
398406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup416], (instrs VMCLEARm)>;
398506c3fb27SDimitry Andric
398606c3fb27SDimitry Andricdef SPRWriteResGroup417 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11]> {
398706c3fb27SDimitry Andric  let Latency = 11;
398806c3fb27SDimitry Andric  let NumMicroOps = 2;
398906c3fb27SDimitry Andric}
399006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup417], (instregex "^VMOVDQU(8|16)Z(128|256)rmk(z?)$",
399106c3fb27SDimitry Andric                                               "^VMOVSHZrmk(z?)$")>;
399206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup417, ReadAfterVecXLd], (instregex "^VP(ADD|SUB)(B|W)Z128rmk(z?)$",
399306c3fb27SDimitry Andric                                                                "^VPBLENDM(B|W)Z128rmk(z?)$")>;
399406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup417, ReadAfterVecYLd], (instregex "^VP(ADD|SUB)(B|W)Z256rmk(z?)$",
399506c3fb27SDimitry Andric                                                                "^VPBLENDM(B|W)Z256rmk(z?)$")>;
399606c3fb27SDimitry Andric
399706c3fb27SDimitry Andricdef SPRWriteResGroup418 : SchedWriteRes<[SPRPort00_01_05]> {
399806c3fb27SDimitry Andric  let Latency = 3;
399906c3fb27SDimitry Andric}
400006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup418], (instregex "^VMOVDQU(8|16)Z(128|256)rrk(z?)((_REV)?)$",
400106c3fb27SDimitry Andric                                               "^VMOVSHZrrk(z?)((_REV)?)$",
400206c3fb27SDimitry Andric                                               "^VP(ADD|SUB)(B|W)Z(128|256)rrk(z?)$",
400306c3fb27SDimitry Andric                                               "^VPBLENDM(B|W)Z(128|256)rrk(z?)$",
400406c3fb27SDimitry Andric                                               "^VPMOVM2(B|W)Z(128|256)rr$")>;
400506c3fb27SDimitry Andric
400606c3fb27SDimitry Andricdef SPRWriteResGroup419 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
40075f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 2];
400806c3fb27SDimitry Andric  let Latency = 12;
400906c3fb27SDimitry Andric  let NumMicroOps = 5;
401006c3fb27SDimitry Andric}
401106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup419], (instrs VMOVDQU8Zmrk)>;
401206c3fb27SDimitry Andric
401306c3fb27SDimitry Andricdef SPRWriteResGroup420 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
401406c3fb27SDimitry Andric  let Latency = 477;
401506c3fb27SDimitry Andric  let NumMicroOps = 2;
401606c3fb27SDimitry Andric}
401706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup420], (instrs VMOVNTDQZ128mr)>;
401806c3fb27SDimitry Andric
401906c3fb27SDimitry Andricdef SPRWriteResGroup421 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
402006c3fb27SDimitry Andric  let Latency = 470;
402106c3fb27SDimitry Andric  let NumMicroOps = 2;
402206c3fb27SDimitry Andric}
402306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup421], (instrs VMOVNTDQZ256mr,
402406c3fb27SDimitry Andric                                            VMOVNTPSmr)>;
402506c3fb27SDimitry Andric
402606c3fb27SDimitry Andricdef SPRWriteResGroup422 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
402706c3fb27SDimitry Andric  let Latency = 473;
402806c3fb27SDimitry Andric  let NumMicroOps = 2;
402906c3fb27SDimitry Andric}
403006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup422], (instregex "^VMOVNT(PD|DQZ)mr$")>;
403106c3fb27SDimitry Andric
403206c3fb27SDimitry Andricdef SPRWriteResGroup423 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
403306c3fb27SDimitry Andric  let Latency = 521;
403406c3fb27SDimitry Andric  let NumMicroOps = 2;
403506c3fb27SDimitry Andric}
403606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup423], (instrs VMOVNTDQmr)>;
403706c3fb27SDimitry Andric
403806c3fb27SDimitry Andricdef SPRWriteResGroup424 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
403906c3fb27SDimitry Andric  let Latency = 550;
404006c3fb27SDimitry Andric  let NumMicroOps = 2;
404106c3fb27SDimitry Andric}
404206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup424], (instrs VMOVNTPDZ128mr)>;
404306c3fb27SDimitry Andric
404406c3fb27SDimitry Andricdef SPRWriteResGroup425 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
404506c3fb27SDimitry Andric  let Latency = 474;
404606c3fb27SDimitry Andric  let NumMicroOps = 2;
404706c3fb27SDimitry Andric}
404806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup425], (instrs VMOVNTPDZ256mr)>;
404906c3fb27SDimitry Andric
405006c3fb27SDimitry Andricdef SPRWriteResGroup426 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
405106c3fb27SDimitry Andric  let Latency = 464;
405206c3fb27SDimitry Andric  let NumMicroOps = 2;
405306c3fb27SDimitry Andric}
405406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup426], (instrs VMOVNTPDZmr)>;
405506c3fb27SDimitry Andric
405606c3fb27SDimitry Andricdef SPRWriteResGroup427 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
405706c3fb27SDimitry Andric  let Latency = 494;
405806c3fb27SDimitry Andric  let NumMicroOps = 2;
405906c3fb27SDimitry Andric}
406006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup427], (instrs VMOVNTPSYmr)>;
406106c3fb27SDimitry Andric
406206c3fb27SDimitry Andricdef SPRWriteResGroup428 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
406306c3fb27SDimitry Andric  let Latency = 475;
406406c3fb27SDimitry Andric  let NumMicroOps = 2;
406506c3fb27SDimitry Andric}
406606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup428], (instrs VMOVNTPSZ128mr)>;
406706c3fb27SDimitry Andric
406806c3fb27SDimitry Andricdef SPRWriteResGroup429 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
406906c3fb27SDimitry Andric  let Latency = 476;
407006c3fb27SDimitry Andric  let NumMicroOps = 2;
407106c3fb27SDimitry Andric}
407206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup429], (instrs VMOVNTPSZ256mr)>;
407306c3fb27SDimitry Andric
407406c3fb27SDimitry Andricdef SPRWriteResGroup430 : SchedWriteRes<[SPRPort04_09, SPRPort07_08]> {
407506c3fb27SDimitry Andric  let Latency = 471;
407606c3fb27SDimitry Andric  let NumMicroOps = 2;
407706c3fb27SDimitry Andric}
407806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup430], (instrs VMOVNTPSZmr)>;
407906c3fb27SDimitry Andric
408006c3fb27SDimitry Andricdef SPRWriteResGroup431 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
40815f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1, 8];
408206c3fb27SDimitry Andric  let Latency = 10;
408306c3fb27SDimitry Andric  let NumMicroOps = 12;
408406c3fb27SDimitry Andric}
408506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup431, ReadAfterVecXLd], (instregex "^VP2INTERSECTDZ128rm(b?)$")>;
408606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup431, ReadAfterVecYLd], (instregex "^VP2INTERSECTQZ256rm(b?)$")>;
408706c3fb27SDimitry Andric
408806c3fb27SDimitry Andricdef SPRWriteResGroup432 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
40895f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 8];
409006c3fb27SDimitry Andric  let Latency = 10;
409106c3fb27SDimitry Andric  let NumMicroOps = 12;
409206c3fb27SDimitry Andric}
409306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup432], (instrs VP2INTERSECTDZ128rr,
409406c3fb27SDimitry Andric                                            VP2INTERSECTQZ256rr)>;
409506c3fb27SDimitry Andric
409606c3fb27SDimitry Andricdef SPRWriteResGroup433 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort02_03_11, SPRPort05]> {
40975f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 8, 7, 2, 1, 11];
409806c3fb27SDimitry Andric  let Latency = 27;
409906c3fb27SDimitry Andric  let NumMicroOps = 30;
410006c3fb27SDimitry Andric}
410106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup433, ReadAfterVecYLd], (instregex "^VP2INTERSECTDZ256rm(b?)$")>;
410206c3fb27SDimitry Andric
410306c3fb27SDimitry Andricdef SPRWriteResGroup434 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05, SPRPort01_05, SPRPort05]> {
41045f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 8, 8, 2, 11];
410506c3fb27SDimitry Andric  let Latency = 27;
410606c3fb27SDimitry Andric  let NumMicroOps = 30;
410706c3fb27SDimitry Andric}
410806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup434], (instrs VP2INTERSECTDZ256rr)>;
410906c3fb27SDimitry Andric
411006c3fb27SDimitry Andricdef SPRWriteResGroup435 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
41115f757f3fSDimitry Andric  let ReleaseAtCycles = [13, 9, 1, 23];
411206c3fb27SDimitry Andric  let Latency = 40;
411306c3fb27SDimitry Andric  let NumMicroOps = 46;
411406c3fb27SDimitry Andric}
411506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup435, ReadAfterVecYLd], (instregex "^VP2INTERSECTDZrm(b?)$")>;
411606c3fb27SDimitry Andric
411706c3fb27SDimitry Andricdef SPRWriteResGroup436 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
41185f757f3fSDimitry Andric  let ReleaseAtCycles = [13, 10, 23];
411906c3fb27SDimitry Andric  let Latency = 40;
412006c3fb27SDimitry Andric  let NumMicroOps = 46;
412106c3fb27SDimitry Andric}
412206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup436], (instrs VP2INTERSECTDZrr)>;
412306c3fb27SDimitry Andric
412406c3fb27SDimitry Andricdef SPRWriteResGroup437 : SchedWriteRes<[SPRPort02_03_11, SPRPort05]> {
41255f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 4];
412606c3fb27SDimitry Andric  let Latency = 6;
412706c3fb27SDimitry Andric  let NumMicroOps = 5;
412806c3fb27SDimitry Andric}
412906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup437, ReadAfterVecXLd], (instregex "^VP2INTERSECTQZ128rm(b?)$")>;
413006c3fb27SDimitry Andric
413106c3fb27SDimitry Andricdef SPRWriteResGroup438 : SchedWriteRes<[SPRPort05]> {
41325f757f3fSDimitry Andric  let ReleaseAtCycles = [4];
413306c3fb27SDimitry Andric  let Latency = 6;
413406c3fb27SDimitry Andric  let NumMicroOps = 4;
413506c3fb27SDimitry Andric}
413606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup438], (instrs VP2INTERSECTQZ128rr)>;
413706c3fb27SDimitry Andric
413806c3fb27SDimitry Andricdef SPRWriteResGroup439 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
41395f757f3fSDimitry Andric  let ReleaseAtCycles = [8, 7, 1, 14];
414006c3fb27SDimitry Andric  let Latency = 29;
414106c3fb27SDimitry Andric  let NumMicroOps = 30;
414206c3fb27SDimitry Andric}
414306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup439, ReadAfterVecYLd], (instregex "^VP2INTERSECTQZrm(b?)$")>;
414406c3fb27SDimitry Andric
414506c3fb27SDimitry Andricdef SPRWriteResGroup440 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
41465f757f3fSDimitry Andric  let ReleaseAtCycles = [8, 8, 14];
414706c3fb27SDimitry Andric  let Latency = 30;
414806c3fb27SDimitry Andric  let NumMicroOps = 30;
414906c3fb27SDimitry Andric}
415006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup440], (instrs VP2INTERSECTQZrr)>;
415106c3fb27SDimitry Andric
415206c3fb27SDimitry Andricdef SPRWriteResGroup441 : SchedWriteRes<[SPRPort00_01]> {
415306c3fb27SDimitry Andric  let Latency = 3;
415406c3fb27SDimitry Andric}
415506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup441], (instregex "^VP(A|SU)BS(B|W)Z(128|256)rrk(z?)$",
415606c3fb27SDimitry Andric                                               "^VPADD(U?)S(B|W)Z(128|256)rrk(z?)$",
415706c3fb27SDimitry Andric                                               "^VPAVG(B|W)Z(128|256)rrk(z?)$",
415806c3fb27SDimitry Andric                                               "^VPM(AX|IN)(SB|UW)Z(128|256)rrk(z?)$",
415906c3fb27SDimitry Andric                                               "^VPM(AX|IN)(SW|UB)Z(128|256)rrk(z?)$",
416006c3fb27SDimitry Andric                                               "^VPSH(L|R)DVWZ(128|256)rk(z?)$",
416106c3fb27SDimitry Andric                                               "^VPS(L|R)LVWZ(128|256)rrk(z?)$",
416206c3fb27SDimitry Andric                                               "^VPS(L|R)LWZ(128|256)rik(z?)$",
416306c3fb27SDimitry Andric                                               "^VPSRAVWZ(128|256)rrk(z?)$",
416406c3fb27SDimitry Andric                                               "^VPSRAWZ(128|256)rik(z?)$",
416506c3fb27SDimitry Andric                                               "^VPSUBUS(B|W)Z(128|256)rrk(z?)$")>;
416606c3fb27SDimitry Andric
416706c3fb27SDimitry Andricdef SPRWriteResGroup442 : SchedWriteRes<[SPRPort01_05, SPRPort02_03_11]> {
416806c3fb27SDimitry Andric  let Latency = 9;
416906c3fb27SDimitry Andric  let NumMicroOps = 2;
417006c3fb27SDimitry Andric}
417106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup442, ReadAfterVecYLd], (instregex "^VSHUFP(D|S)Yrmi$",
417206c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z256rm(bi|ik)$",
417306c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z256rmbik(z?)$",
417406c3fb27SDimitry Andric                                                                "^VSHUFP(D|S)Z256rmi((kz)?)$")>;
417506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup442, ReadAfterVecYLd], (instrs VPBLENDWYrmi)>;
417606c3fb27SDimitry Andric
417706c3fb27SDimitry Andricdef SPRWriteResGroup443 : SchedWriteRes<[SPRPort00, SPRPort05]> {
417806c3fb27SDimitry Andric  let Latency = 6;
417906c3fb27SDimitry Andric  let NumMicroOps = 2;
418006c3fb27SDimitry Andric}
418106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup443], (instregex "^VPBROADCASTM(B2Q|W2D)Z(128|256)rr$",
418206c3fb27SDimitry Andric                                               "^VPBROADCASTM(B2Q|W2D)Zrr$",
418306c3fb27SDimitry Andric                                               "^VP(ERM|SRA)WZrrk(z?)$",
418406c3fb27SDimitry Andric                                               "^VPSHUFBITQMBZ(128|256)rr$",
418506c3fb27SDimitry Andric                                               "^VPS(L|R)LWZrrk(z?)$")>;
418606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup443], (instrs VPSHUFBITQMBZrr)>;
418706c3fb27SDimitry Andric
418806c3fb27SDimitry Andricdef SPRWriteResGroup444 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort04_09, SPRPort05, SPRPort07_08]> {
41895f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2, 1];
419006c3fb27SDimitry Andric  let Latency = 12;
419106c3fb27SDimitry Andric  let NumMicroOps = 6;
419206c3fb27SDimitry Andric}
419306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup444], (instregex "^VPCOMPRESS(B|W)Z(128|256)mr$")>;
419406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup444], (instrs VPCOMPRESSWZmr)>;
419506c3fb27SDimitry Andric
419606c3fb27SDimitry Andricdef SPRWriteResGroup445 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort04_09, SPRPort05, SPRPort07_08]> {
41975f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2, 1];
419806c3fb27SDimitry Andric  let Latency = 14;
419906c3fb27SDimitry Andric  let NumMicroOps = 6;
420006c3fb27SDimitry Andric}
420106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup445], (instregex "^VPCOMPRESS(B|W)Z(128|256)mrk$")>;
420206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup445], (instrs VPCOMPRESSWZmrk)>;
420306c3fb27SDimitry Andric
420406c3fb27SDimitry Andricdef SPRWriteResGroup446 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort05, SPRPort07_08]> {
42055f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 2, 2];
420606c3fb27SDimitry Andric  let Latency = 12;
420706c3fb27SDimitry Andric  let NumMicroOps = 8;
420806c3fb27SDimitry Andric}
420906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup446], (instrs VPCOMPRESSBZmr)>;
421006c3fb27SDimitry Andric
421106c3fb27SDimitry Andricdef SPRWriteResGroup447 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort05, SPRPort07_08]> {
42125f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2, 2, 2];
421306c3fb27SDimitry Andric  let Latency = 14;
421406c3fb27SDimitry Andric  let NumMicroOps = 8;
421506c3fb27SDimitry Andric}
421606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup447], (instrs VPCOMPRESSBZmrk)>;
421706c3fb27SDimitry Andric
421806c3fb27SDimitry Andricdef SPRWriteResGroup448 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
42195f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 4, 1, 5];
422006c3fb27SDimitry Andric  let Latency = 17;
422106c3fb27SDimitry Andric  let NumMicroOps = 15;
422206c3fb27SDimitry Andric}
422306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup448], (instregex "^VPCONFLICTDZ128rm((b|k|bk|kz)?)$")>;
422406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup448], (instrs VPCONFLICTDZ128rmbkz)>;
422506c3fb27SDimitry Andric
422606c3fb27SDimitry Andricdef SPRWriteResGroup449 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
42275f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 5, 5];
422806c3fb27SDimitry Andric  let Latency = 12;
422906c3fb27SDimitry Andric  let NumMicroOps = 15;
423006c3fb27SDimitry Andric}
423106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup449], (instregex "^VPCONFLICTDZ128rr((k|kz)?)$")>;
423206c3fb27SDimitry Andric
423306c3fb27SDimitry Andricdef SPRWriteResGroup450 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
42345f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 5, 1, 1, 9];
423506c3fb27SDimitry Andric  let Latency = 24;
423606c3fb27SDimitry Andric  let NumMicroOps = 23;
423706c3fb27SDimitry Andric}
423806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup450], (instregex "^VPCONFLICTDZ256rm((b|k|bk|kz)?)$")>;
423906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup450], (instrs VPCONFLICTDZ256rmbkz)>;
424006c3fb27SDimitry Andric
424106c3fb27SDimitry Andricdef SPRWriteResGroup451 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort00_06, SPRPort05]> {
42425f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 1, 9];
424306c3fb27SDimitry Andric  let Latency = 17;
424406c3fb27SDimitry Andric  let NumMicroOps = 23;
424506c3fb27SDimitry Andric}
424606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup451], (instregex "^VPCONFLICTDZ256rr((k|kz)?)$")>;
424706c3fb27SDimitry Andric
424806c3fb27SDimitry Andricdef SPRWriteResGroup452 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
42495f757f3fSDimitry Andric  let ReleaseAtCycles = [11, 8, 1, 17];
425006c3fb27SDimitry Andric  let Latency = 33;
425106c3fb27SDimitry Andric  let NumMicroOps = 37;
425206c3fb27SDimitry Andric}
425306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup452], (instregex "^VPCONFLICTDZrm((b|k|bk|kz)?)$")>;
425406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup452], (instrs VPCONFLICTDZrmbkz)>;
425506c3fb27SDimitry Andric
425606c3fb27SDimitry Andricdef SPRWriteResGroup453 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
42575f757f3fSDimitry Andric  let ReleaseAtCycles = [11, 9, 17];
425806c3fb27SDimitry Andric  let Latency = 26;
425906c3fb27SDimitry Andric  let NumMicroOps = 37;
426006c3fb27SDimitry Andric}
426106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup453], (instregex "^VPCONFLICTDZrr((kz)?)$")>;
426206c3fb27SDimitry Andric
426306c3fb27SDimitry Andricdef SPRWriteResGroup454 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
42645f757f3fSDimitry Andric  let ReleaseAtCycles = [11, 9, 17];
426506c3fb27SDimitry Andric  let Latency = 25;
426606c3fb27SDimitry Andric  let NumMicroOps = 37;
426706c3fb27SDimitry Andric}
426806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup454], (instrs VPCONFLICTDZrrk)>;
426906c3fb27SDimitry Andric
427006c3fb27SDimitry Andricdef SPRWriteResGroup455 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
42715f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
427206c3fb27SDimitry Andric  let Latency = 11;
427306c3fb27SDimitry Andric  let NumMicroOps = 4;
427406c3fb27SDimitry Andric}
427506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup455], (instregex "^VPCONFLICTQZ128rm((b|k|bk|kz)?)$")>;
427606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup455], (instrs VPCONFLICTQZ128rmbkz)>;
42775f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup455, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZ128rm$")>;
427806c3fb27SDimitry Andric
427906c3fb27SDimitry Andricdef SPRWriteResGroup456 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
42805f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
428106c3fb27SDimitry Andric  let Latency = 4;
428206c3fb27SDimitry Andric  let NumMicroOps = 3;
428306c3fb27SDimitry Andric}
428406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup456], (instregex "^VPCONFLICTQZ128rr((k|kz)?)$")>;
428506c3fb27SDimitry Andric
428606c3fb27SDimitry Andricdef SPRWriteResGroup457 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
42875f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 4, 1, 5];
428806c3fb27SDimitry Andric  let Latency = 20;
428906c3fb27SDimitry Andric  let NumMicroOps = 15;
429006c3fb27SDimitry Andric}
429106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup457], (instregex "^VPCONFLICTQZ256rm((b|k|bk|kz)?)$")>;
429206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup457], (instrs VPCONFLICTQZ256rmbkz)>;
429306c3fb27SDimitry Andric
429406c3fb27SDimitry Andricdef SPRWriteResGroup458 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort05]> {
42955f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 5, 5];
429606c3fb27SDimitry Andric  let Latency = 13;
429706c3fb27SDimitry Andric  let NumMicroOps = 15;
429806c3fb27SDimitry Andric}
429906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup458], (instregex "^VPCONFLICTQZ256rr((k|kz)?)$")>;
430006c3fb27SDimitry Andric
430106c3fb27SDimitry Andricdef SPRWriteResGroup459 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
43025f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 5, 1, 9];
430306c3fb27SDimitry Andric  let Latency = 23;
430406c3fb27SDimitry Andric  let NumMicroOps = 22;
430506c3fb27SDimitry Andric}
430606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup459], (instregex "^VPCONFLICTQZrm((b|k|bk|kz)?)$")>;
430706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup459], (instrs VPCONFLICTQZrmbkz)>;
430806c3fb27SDimitry Andric
430906c3fb27SDimitry Andricdef SPRWriteResGroup460 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
43105f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 9];
431106c3fb27SDimitry Andric  let Latency = 17;
431206c3fb27SDimitry Andric  let NumMicroOps = 22;
431306c3fb27SDimitry Andric}
431406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup460], (instregex "^VPCONFLICTQZrr((kz)?)$")>;
431506c3fb27SDimitry Andric
431606c3fb27SDimitry Andricdef SPRWriteResGroup461 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort05]> {
43175f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 6, 9];
431806c3fb27SDimitry Andric  let Latency = 16;
431906c3fb27SDimitry Andric  let NumMicroOps = 22;
432006c3fb27SDimitry Andric}
432106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup461], (instrs VPCONFLICTQZrrk)>;
432206c3fb27SDimitry Andric
432306c3fb27SDimitry Andricdef SPRWriteResGroup462 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
43245f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
432506c3fb27SDimitry Andric  let Latency = 13;
432606c3fb27SDimitry Andric  let NumMicroOps = 4;
432706c3fb27SDimitry Andric}
43285f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup462, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZ128rmk(z?)$")>;
43295f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup462, ReadAfterVecYLd], (instrs VPERMT2WZ128rm)>;
433006c3fb27SDimitry Andric
433106c3fb27SDimitry Andricdef SPRWriteResGroup463 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
43325f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
433306c3fb27SDimitry Andric  let Latency = 5;
433406c3fb27SDimitry Andric  let NumMicroOps = 3;
433506c3fb27SDimitry Andric}
43365f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup463], (instregex "^VPERM(I|T)2BZ(128|256)rr$")>;
433706c3fb27SDimitry Andric
433806c3fb27SDimitry Andricdef SPRWriteResGroup464 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
43395f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
434006c3fb27SDimitry Andric  let Latency = 7;
434106c3fb27SDimitry Andric  let NumMicroOps = 3;
434206c3fb27SDimitry Andric}
43435f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup464], (instregex "^VPERM(I|T)2BZ(128|256)rrk(z?)$",
43445f757f3fSDimitry Andric                                               "^VPERM(I|T)2WZ(128|256)rr$")>;
434506c3fb27SDimitry Andric
434606c3fb27SDimitry Andricdef SPRWriteResGroup465 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
43475f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
434806c3fb27SDimitry Andric  let Latency = 12;
434906c3fb27SDimitry Andric  let NumMicroOps = 4;
435006c3fb27SDimitry Andric}
43515f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup465, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZ256rm$")>;
435206c3fb27SDimitry Andric
435306c3fb27SDimitry Andricdef SPRWriteResGroup466 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
43545f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
435506c3fb27SDimitry Andric  let Latency = 14;
435606c3fb27SDimitry Andric  let NumMicroOps = 4;
435706c3fb27SDimitry Andric}
43585f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup466, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZ256rmk(z?)$")>;
43595f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup466, ReadAfterVecYLd], (instrs VPERMI2WZ128rm,
43605f757f3fSDimitry Andric                                                             VPERMT2WZ256rm)>;
436106c3fb27SDimitry Andric
436206c3fb27SDimitry Andricdef SPRWriteResGroup467 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
43635f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
436406c3fb27SDimitry Andric  let Latency = 12;
436506c3fb27SDimitry Andric  let NumMicroOps = 4;
436606c3fb27SDimitry Andric}
43675f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup467, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZrm$")>;
436806c3fb27SDimitry Andric
436906c3fb27SDimitry Andricdef SPRWriteResGroup468 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
43705f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
437106c3fb27SDimitry Andric  let Latency = 14;
437206c3fb27SDimitry Andric  let NumMicroOps = 4;
437306c3fb27SDimitry Andric}
43745f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup468, ReadAfterVecYLd], (instregex "^VPERM(I|T)2BZrmk(z?)$")>;
43755f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup468, ReadAfterVecYLd], (instrs VPERMT2WZrm)>;
437606c3fb27SDimitry Andric
437706c3fb27SDimitry Andricdef SPRWriteResGroup469 : SchedWriteRes<[SPRPort00_05, SPRPort05]> {
43785f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
437906c3fb27SDimitry Andric  let Latency = 5;
438006c3fb27SDimitry Andric  let NumMicroOps = 3;
438106c3fb27SDimitry Andric}
43825f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup469], (instregex "^VPERM(I|T)2BZrr$")>;
438306c3fb27SDimitry Andric
438406c3fb27SDimitry Andricdef SPRWriteResGroup470 : SchedWriteRes<[SPRPort00_05, SPRPort05]> {
43855f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
438606c3fb27SDimitry Andric  let Latency = 7;
438706c3fb27SDimitry Andric  let NumMicroOps = 3;
438806c3fb27SDimitry Andric}
43895f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup470], (instregex "^VPERM(I|T)2BZrrk(z?)$",
43905f757f3fSDimitry Andric                                               "^VPERM(I|T)2WZrr$")>;
439106c3fb27SDimitry Andric
439206c3fb27SDimitry Andricdef SPRWriteResGroup471 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
43935f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
439406c3fb27SDimitry Andric  let Latency = 16;
439506c3fb27SDimitry Andric  let NumMicroOps = 4;
439606c3fb27SDimitry Andric}
43975f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup471, ReadAfterVecYLd], (instregex "^VPERMI2WZ128rmk(z?)$",
43985f757f3fSDimitry Andric                                                                "^VPERMT2WZ256rmk(z?)$")>;
439906c3fb27SDimitry Andric
440006c3fb27SDimitry Andricdef SPRWriteResGroup472 : SchedWriteRes<[SPRPort00_01_05, SPRPort05]> {
44015f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
440206c3fb27SDimitry Andric  let Latency = 9;
440306c3fb27SDimitry Andric  let NumMicroOps = 3;
440406c3fb27SDimitry Andric}
44055f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup472], (instregex "^VPERM(I|T)2WZ(128|256)rrk(z?)$")>;
440606c3fb27SDimitry Andric
440706c3fb27SDimitry Andricdef SPRWriteResGroup473 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
44085f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
440906c3fb27SDimitry Andric  let Latency = 15;
441006c3fb27SDimitry Andric  let NumMicroOps = 4;
441106c3fb27SDimitry Andric}
44125f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup473, ReadAfterVecYLd], (instregex "^VPERMT2WZ128rmk(z?)$")>;
44135f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup473, ReadAfterVecYLd], (instrs VPERMI2WZ256rm)>;
441406c3fb27SDimitry Andric
441506c3fb27SDimitry Andricdef SPRWriteResGroup474 : SchedWriteRes<[SPRPort00_01_05, SPRPort02_03_11, SPRPort05]> {
44165f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
441706c3fb27SDimitry Andric  let Latency = 17;
441806c3fb27SDimitry Andric  let NumMicroOps = 4;
441906c3fb27SDimitry Andric}
44205f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup474, ReadAfterVecYLd], (instregex "^VPERMI2WZ256rmk(z?)$")>;
442106c3fb27SDimitry Andric
442206c3fb27SDimitry Andricdef SPRWriteResGroup475 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
44235f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
442406c3fb27SDimitry Andric  let Latency = 15;
442506c3fb27SDimitry Andric  let NumMicroOps = 4;
442606c3fb27SDimitry Andric}
44275f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup475, ReadAfterVecYLd], (instrs VPERMI2WZrm)>;
442806c3fb27SDimitry Andric
442906c3fb27SDimitry Andricdef SPRWriteResGroup476 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
44305f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
443106c3fb27SDimitry Andric  let Latency = 17;
443206c3fb27SDimitry Andric  let NumMicroOps = 4;
443306c3fb27SDimitry Andric}
44345f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup476, ReadAfterVecYLd], (instregex "^VPERMI2WZrmk(z?)$")>;
443506c3fb27SDimitry Andric
443606c3fb27SDimitry Andricdef SPRWriteResGroup477 : SchedWriteRes<[SPRPort00_05, SPRPort05]> {
44375f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2];
443806c3fb27SDimitry Andric  let Latency = 9;
443906c3fb27SDimitry Andric  let NumMicroOps = 3;
444006c3fb27SDimitry Andric}
44415f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup477], (instregex "^VPERM(I|T)2WZrrk(z?)$")>;
444206c3fb27SDimitry Andric
444306c3fb27SDimitry Andricdef SPRWriteResGroup478 : SchedWriteRes<[SPRPort00_05, SPRPort02_03_11, SPRPort05]> {
44445f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 2];
444506c3fb27SDimitry Andric  let Latency = 16;
444606c3fb27SDimitry Andric  let NumMicroOps = 4;
444706c3fb27SDimitry Andric}
44485f757f3fSDimitry Andricdef : InstRW<[SPRWriteResGroup478, ReadAfterVecYLd], (instregex "^VPERMT2WZrmk(z?)$")>;
444906c3fb27SDimitry Andric
445006c3fb27SDimitry Andricdef SPRWriteResGroup479 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
445106c3fb27SDimitry Andric  let Latency = 10;
445206c3fb27SDimitry Andric  let NumMicroOps = 3;
445306c3fb27SDimitry Andric}
445406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup479, ReadAfterVecYLd], (instrs VPERMWZ128rm)>;
445506c3fb27SDimitry Andric
445606c3fb27SDimitry Andricdef SPRWriteResGroup480 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
445706c3fb27SDimitry Andric  let Latency = 13;
445806c3fb27SDimitry Andric  let NumMicroOps = 3;
445906c3fb27SDimitry Andric}
446006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup480, ReadAfterVecYLd], (instregex "^VPERMWZ(128|256)rmk(z?)$")>;
446106c3fb27SDimitry Andric
446206c3fb27SDimitry Andricdef SPRWriteResGroup481 : SchedWriteRes<[SPRPort00_01, SPRPort05]> {
446306c3fb27SDimitry Andric  let Latency = 4;
446406c3fb27SDimitry Andric  let NumMicroOps = 2;
446506c3fb27SDimitry Andric}
446606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup481], (instregex "^VPERMWZ(128|256)rr$")>;
446706c3fb27SDimitry Andric
446806c3fb27SDimitry Andricdef SPRWriteResGroup482 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11, SPRPort05]> {
446906c3fb27SDimitry Andric  let Latency = 11;
447006c3fb27SDimitry Andric  let NumMicroOps = 3;
447106c3fb27SDimitry Andric}
447206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup482, ReadAfterVecYLd], (instrs VPERMWZ256rm)>;
447306c3fb27SDimitry Andric
447406c3fb27SDimitry Andricdef SPRWriteResGroup483 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
447506c3fb27SDimitry Andric  let Latency = 11;
447606c3fb27SDimitry Andric  let NumMicroOps = 3;
447706c3fb27SDimitry Andric}
447806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup483, ReadAfterVecYLd], (instrs VPERMWZrm)>;
447906c3fb27SDimitry Andric
448006c3fb27SDimitry Andricdef SPRWriteResGroup484 : SchedWriteRes<[SPRPort05]> {
44815f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
448206c3fb27SDimitry Andric  let Latency = 8;
448306c3fb27SDimitry Andric  let NumMicroOps = 2;
448406c3fb27SDimitry Andric}
448506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup484], (instregex "^VPEXPAND(B|W)Z(128|256)rrk(z?)$",
448606c3fb27SDimitry Andric                                               "^VPEXPAND(B|W)Zrrk(z?)$")>;
448706c3fb27SDimitry Andric
448806c3fb27SDimitry Andricdef SPRWriteResGroup485 : SchedWriteRes<[SPRPort00_01, SPRPort01_05, SPRPort02_03_11]> {
44895f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 1];
449006c3fb27SDimitry Andric  let Latency = 10;
449106c3fb27SDimitry Andric  let NumMicroOps = 4;
449206c3fb27SDimitry Andric}
449306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup485, ReadAfterVecYLd], (instregex "^VPH(ADD|SUB)SWYrm$")>;
449406c3fb27SDimitry Andric
449506c3fb27SDimitry Andricdef SPRWriteResGroup486 : SchedWriteRes<[SPRPort00_01]> {
449606c3fb27SDimitry Andric  let Latency = 7;
449706c3fb27SDimitry Andric}
449806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup486], (instregex "^VPMADDUBSWZ(128|256)rrk(z?)$",
449906c3fb27SDimitry Andric                                               "^VPMULH((U|RS)?)WZ(128|256)rrk(z?)$",
450006c3fb27SDimitry Andric                                               "^VPMULLWZ(128|256)rrk(z?)$")>;
450106c3fb27SDimitry Andric
450206c3fb27SDimitry Andricdef SPRWriteResGroup487 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
450306c3fb27SDimitry Andric  let Latency = 14;
450406c3fb27SDimitry Andric  let NumMicroOps = 2;
450506c3fb27SDimitry Andric}
450606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup487, ReadAfterVecYLd], (instregex "^VPMADDUBSWZrmk(z?)$",
450706c3fb27SDimitry Andric                                                                "^VPMULH((U|RS)?)WZrmk(z?)$",
450806c3fb27SDimitry Andric                                                                "^VPMULLWZrmk(z?)$")>;
450906c3fb27SDimitry Andric
451006c3fb27SDimitry Andricdef SPRWriteResGroup488 : SchedWriteRes<[SPRPort00]> {
451106c3fb27SDimitry Andric  let Latency = 7;
451206c3fb27SDimitry Andric}
451306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup488], (instregex "^VPMADDUBSWZrrk(z?)$",
451406c3fb27SDimitry Andric                                               "^VPMULH((U|RS)?)WZrrk(z?)$",
451506c3fb27SDimitry Andric                                               "^VPMULLWZrrk(z?)$")>;
451606c3fb27SDimitry Andric
451706c3fb27SDimitry Andricdef SPRWriteResGroup489 : SchedWriteRes<[SPRPort01_05, SPRPort04_09, SPRPort05, SPRPort07_08]> {
451806c3fb27SDimitry Andric  let Latency = 12;
451906c3fb27SDimitry Andric  let NumMicroOps = 4;
452006c3fb27SDimitry Andric}
452106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup489], (instregex "^VPMOV((US)?)DBZ(128|256)mr$",
452206c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ(128|256)mr$",
452306c3fb27SDimitry Andric                                               "^VPMOV(Q|W|SD|SW)BZ256mr$",
452406c3fb27SDimitry Andric                                               "^VPMOV(W|SD)BZ128mr$",
452506c3fb27SDimitry Andric                                               "^VPMOV(U?)SQBZ256mr$",
452606c3fb27SDimitry Andric                                               "^VPMOV(U?)SQDZ(128|256)mr$",
452706c3fb27SDimitry Andric                                               "^VPMOV(U?)SWBZ128mr$")>;
452806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup489], (instrs VPMOVUSWBZ256mr)>;
452906c3fb27SDimitry Andric
453006c3fb27SDimitry Andricdef SPRWriteResGroup490 : SchedWriteRes<[SPRPort01_05, SPRPort04_09, SPRPort05, SPRPort07_08]> {
453106c3fb27SDimitry Andric  let Latency = 13;
453206c3fb27SDimitry Andric  let NumMicroOps = 4;
453306c3fb27SDimitry Andric}
453406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup490], (instregex "^VPMOV(D|Q|W|SQ|SW)BZ128mrk$",
453506c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ128mrk$",
453606c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Z128mrk$",
453706c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ128mrk$")>;
453806c3fb27SDimitry Andric
453906c3fb27SDimitry Andricdef SPRWriteResGroup491 : SchedWriteRes<[SPRPort01_05, SPRPort05]> {
454006c3fb27SDimitry Andric  let Latency = 2;
454106c3fb27SDimitry Andric  let NumMicroOps = 2;
454206c3fb27SDimitry Andric}
454306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup491], (instregex "^VPMOV(D|Q|W|SQ|SW)BZ128rr$",
454406c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ128rr$",
454506c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Z128rr$",
454606c3fb27SDimitry Andric                                               "^VPMOV(U?)SQDZ128rrk(z?)$",
454706c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ128rr$")>;
454806c3fb27SDimitry Andric
454906c3fb27SDimitry Andricdef SPRWriteResGroup492 : SchedWriteRes<[SPRPort01_05, SPRPort05]> {
455006c3fb27SDimitry Andric  let Latency = 4;
455106c3fb27SDimitry Andric  let NumMicroOps = 2;
455206c3fb27SDimitry Andric}
455306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup492], (instregex "^VPMOV(D|Q|W|SQ|SW)BZ128rrk(z?)$",
455406c3fb27SDimitry Andric                                               "^VPMOV(D|Q|W|SQ|SW)BZ256rr$",
455506c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ128rrk(z?)$",
455606c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ256rr$",
455706c3fb27SDimitry Andric                                               "^VPMOV(U?)SDBZ128rrk(z?)$",
455806c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Z256rr$",
455906c3fb27SDimitry Andric                                               "^VPMOV(U?)SQDZ256rrk(z?)$",
456006c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ128rrk(z?)$",
456106c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ256rr$")>;
456206c3fb27SDimitry Andric
456306c3fb27SDimitry Andricdef SPRWriteResGroup493 : SchedWriteRes<[SPRPort01_05, SPRPort04_09, SPRPort05, SPRPort07_08]> {
456406c3fb27SDimitry Andric  let Latency = 15;
456506c3fb27SDimitry Andric  let NumMicroOps = 4;
456606c3fb27SDimitry Andric}
456706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup493], (instregex "^VPMOV(D|Q|W|SQ|SW)BZ256mrk$",
456806c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ256mrk$",
456906c3fb27SDimitry Andric                                               "^VPMOV(U?)S(DB|QD)Z256mrk$",
457006c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ256mrk$")>;
457106c3fb27SDimitry Andric
457206c3fb27SDimitry Andricdef SPRWriteResGroup494 : SchedWriteRes<[SPRPort01_05, SPRPort05]> {
457306c3fb27SDimitry Andric  let Latency = 6;
457406c3fb27SDimitry Andric  let NumMicroOps = 2;
457506c3fb27SDimitry Andric}
457606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup494], (instregex "^VPMOV(D|Q|W|SQ|SW)BZ256rrk(z?)$",
457706c3fb27SDimitry Andric                                               "^VPMOV((S|US)?)(D|Q)WZ256rrk(z?)$",
457806c3fb27SDimitry Andric                                               "^VPMOV(U?)SDBZ256rrk(z?)$",
457906c3fb27SDimitry Andric                                               "^VPMOVUS(Q|W)BZ256rrk(z?)$")>;
458006c3fb27SDimitry Andric
458106c3fb27SDimitry Andricdef SPRWriteResGroup495 : SchedWriteRes<[SPRPort01_05, SPRPort04_09, SPRPort05, SPRPort07_08]> {
458206c3fb27SDimitry Andric  let Latency = 20;
458306c3fb27SDimitry Andric  let NumMicroOps = 4;
458406c3fb27SDimitry Andric}
458506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup495], (instregex "^VPMOV((S|US)?)QBZ128mr$")>;
458606c3fb27SDimitry Andric
458706c3fb27SDimitry Andricdef SPRWriteResGroup496 : SchedWriteRes<[SPRPort04_09, SPRPort05, SPRPort07_08]> {
458806c3fb27SDimitry Andric  let Latency = 14;
458906c3fb27SDimitry Andric  let NumMicroOps = 3;
459006c3fb27SDimitry Andric}
459106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup496], (instregex "^VPMOVQDZ((256)?)mrk$")>;
459206c3fb27SDimitry Andric
459306c3fb27SDimitry Andricdef SPRWriteResGroup497 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
45945f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
459506c3fb27SDimitry Andric  let Latency = 23;
459606c3fb27SDimitry Andric  let NumMicroOps = 4;
459706c3fb27SDimitry Andric}
459806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup497, ReadAfterVecXLd], (instregex "^VPMULLQZ128rm((b|k|bk|kz)?)$")>;
459906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup497, ReadAfterVecXLd], (instrs VPMULLQZ128rmbkz)>;
460006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup497, ReadAfterVecYLd], (instregex "^VPMULLQZ256rm((b|k|bk|kz)?)$")>;
460106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup497, ReadAfterVecYLd], (instrs VPMULLQZ256rmbkz)>;
460206c3fb27SDimitry Andric
460306c3fb27SDimitry Andricdef SPRWriteResGroup498 : SchedWriteRes<[SPRPort00_01]> {
46045f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
460506c3fb27SDimitry Andric  let Latency = 15;
460606c3fb27SDimitry Andric  let NumMicroOps = 3;
460706c3fb27SDimitry Andric}
460806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup498], (instregex "^VPMULLQZ(128|256)rr((k|kz)?)$")>;
460906c3fb27SDimitry Andric
461006c3fb27SDimitry Andricdef SPRWriteResGroup499 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
46115f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
461206c3fb27SDimitry Andric  let Latency = 23;
461306c3fb27SDimitry Andric  let NumMicroOps = 4;
461406c3fb27SDimitry Andric}
461506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup499, ReadAfterVecYLd], (instregex "^VPMULLQZrm((b|k|bk|kz)?)$")>;
461606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup499, ReadAfterVecYLd], (instrs VPMULLQZrmbkz)>;
461706c3fb27SDimitry Andric
461806c3fb27SDimitry Andricdef SPRWriteResGroup500 : SchedWriteRes<[SPRPort00]> {
46195f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
462006c3fb27SDimitry Andric  let Latency = 15;
462106c3fb27SDimitry Andric  let NumMicroOps = 3;
462206c3fb27SDimitry Andric}
462306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup500], (instregex "^VPMULLQZrr((k|kz)?)$")>;
462406c3fb27SDimitry Andric
462506c3fb27SDimitry Andricdef SPRWriteResGroup501 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
46265f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 4, 4];
462706c3fb27SDimitry Andric  let Latency = 12;
462806c3fb27SDimitry Andric  let NumMicroOps = 11;
462906c3fb27SDimitry Andric}
463006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup501], (instregex "^VPSCATTER(D|Q)QZ256mr$",
463106c3fb27SDimitry Andric                                               "^VSCATTER(D|Q)PDZ256mr$")>;
463206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup501], (instrs VPSCATTERDDZ128mr,
463306c3fb27SDimitry Andric                                            VPSCATTERQDZ256mr,
463406c3fb27SDimitry Andric                                            VSCATTERDPSZ128mr,
463506c3fb27SDimitry Andric                                            VSCATTERQPSZ256mr)>;
463606c3fb27SDimitry Andric
463706c3fb27SDimitry Andricdef SPRWriteResGroup502 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
46385f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 8, 8];
463906c3fb27SDimitry Andric  let Latency = 12;
464006c3fb27SDimitry Andric  let NumMicroOps = 19;
464106c3fb27SDimitry Andric}
464206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup502], (instrs VPSCATTERDDZ256mr,
464306c3fb27SDimitry Andric                                            VSCATTERDPSZ256mr)>;
464406c3fb27SDimitry Andric
464506c3fb27SDimitry Andricdef SPRWriteResGroup503 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
46465f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 16, 16];
464706c3fb27SDimitry Andric  let Latency = 19;
464806c3fb27SDimitry Andric  let NumMicroOps = 35;
464906c3fb27SDimitry Andric}
465006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup503], (instrs VPSCATTERDDZmr,
465106c3fb27SDimitry Andric                                            VSCATTERDPSZmr)>;
465206c3fb27SDimitry Andric
465306c3fb27SDimitry Andricdef SPRWriteResGroup504 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
46545f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 1, 1, 2, 2];
465506c3fb27SDimitry Andric  let Latency = 12;
465606c3fb27SDimitry Andric  let NumMicroOps = 7;
465706c3fb27SDimitry Andric}
465806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup504], (instregex "^VPSCATTER(D|Q)QZ128mr$",
465906c3fb27SDimitry Andric                                               "^VSCATTER(D|Q)PDZ128mr$")>;
466006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup504], (instrs VPSCATTERQDZ128mr,
466106c3fb27SDimitry Andric                                            VSCATTERQPSZ128mr)>;
466206c3fb27SDimitry Andric
466306c3fb27SDimitry Andricdef SPRWriteResGroup505 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06_10, SPRPort04_09, SPRPort07_08]> {
46645f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 8, 8];
466506c3fb27SDimitry Andric  let Latency = 12;
466606c3fb27SDimitry Andric  let NumMicroOps = 19;
466706c3fb27SDimitry Andric}
466806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup505], (instregex "^VPSCATTER(D|Q)QZmr$",
466906c3fb27SDimitry Andric                                               "^VSCATTER(D|Q)PDZmr$")>;
467006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup505], (instrs VPSCATTERQDZmr,
467106c3fb27SDimitry Andric                                            VSCATTERQPSZmr)>;
467206c3fb27SDimitry Andric
467306c3fb27SDimitry Andricdef SPRWriteResGroup506 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
467406c3fb27SDimitry Andric  let Latency = 8;
467506c3fb27SDimitry Andric  let NumMicroOps = 2;
467606c3fb27SDimitry Andric}
467706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup506, ReadAfterVecXLd], (instregex "^VPSH(L|R)D(D|Q)Z128rmbi$",
467806c3fb27SDimitry Andric                                                                "^VPSH(L|R)D(D|Q|W)Z128rmi$",
467906c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q|W)Z128m$",
468006c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Z128m(b|k|kz)$",
468106c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Z128mbk(z?)$")>;
468206c3fb27SDimitry Andric
468306c3fb27SDimitry Andricdef SPRWriteResGroup507 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
468406c3fb27SDimitry Andric  let Latency = 9;
468506c3fb27SDimitry Andric  let NumMicroOps = 3;
468606c3fb27SDimitry Andric}
468706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup507, ReadAfterVecXLd], (instregex "^VPSH(L|R)D(D|Q)Z128rm(b?)ik(z?)$")>;
468806c3fb27SDimitry Andric
468906c3fb27SDimitry Andricdef SPRWriteResGroup508 : SchedWriteRes<[SPRPort00_01]>;
469006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup508], (instregex "^VPSH(L|R)D(D|Q|W)Z(128|256)rri$",
469106c3fb27SDimitry Andric                                               "^VPSH(L|R)DV(D|Q|W)Z(128|256)r$",
469206c3fb27SDimitry Andric                                               "^VPSH(L|R)DV(D|Q)Z(128|256)rk(z?)$")>;
469306c3fb27SDimitry Andric
469406c3fb27SDimitry Andricdef SPRWriteResGroup509 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05]> {
469506c3fb27SDimitry Andric  let Latency = 2;
469606c3fb27SDimitry Andric  let NumMicroOps = 2;
469706c3fb27SDimitry Andric}
469806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup509], (instregex "^VPSH(L|R)D(D|Q)Z(128|256)rrik(z?)$")>;
469906c3fb27SDimitry Andric
470006c3fb27SDimitry Andricdef SPRWriteResGroup510 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
470106c3fb27SDimitry Andric  let Latency = 9;
470206c3fb27SDimitry Andric  let NumMicroOps = 2;
470306c3fb27SDimitry Andric}
470406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup510, ReadAfterVecYLd], (instregex "^VPSH(L|R)D(D|Q)Z256rmbi$",
470506c3fb27SDimitry Andric                                                                "^VPSH(L|R)D(D|Q|W)Z256rmi$",
470606c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q|W)Z256m$",
470706c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Z256m(b|k|kz)$",
470806c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Z256mbk(z?)$")>;
470906c3fb27SDimitry Andric
471006c3fb27SDimitry Andricdef SPRWriteResGroup511 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
471106c3fb27SDimitry Andric  let Latency = 10;
471206c3fb27SDimitry Andric  let NumMicroOps = 3;
471306c3fb27SDimitry Andric}
471406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup511, ReadAfterVecYLd], (instregex "^VPSH(L|R)D(D|Q)Z256rm(b?)ik(z?)$")>;
471506c3fb27SDimitry Andric
471606c3fb27SDimitry Andricdef SPRWriteResGroup512 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
471706c3fb27SDimitry Andric  let Latency = 9;
471806c3fb27SDimitry Andric  let NumMicroOps = 2;
471906c3fb27SDimitry Andric}
472006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup512, ReadAfterVecYLd], (instregex "^VPSH(L|R)D(D|Q)Zrmbi$",
472106c3fb27SDimitry Andric                                                                "^VPSH(L|R)D(D|Q|W)Zrmi$",
472206c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q|W)Zm$",
472306c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Zm(b|k|kz)$",
472406c3fb27SDimitry Andric                                                                "^VPSH(L|R)DV(D|Q)Zmbk(z?)$")>;
472506c3fb27SDimitry Andric
472606c3fb27SDimitry Andricdef SPRWriteResGroup513 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
472706c3fb27SDimitry Andric  let Latency = 10;
472806c3fb27SDimitry Andric  let NumMicroOps = 3;
472906c3fb27SDimitry Andric}
473006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup513, ReadAfterVecYLd], (instregex "^VPSH(L|R)D(D|Q)Zrm(b?)ik(z?)$")>;
473106c3fb27SDimitry Andric
473206c3fb27SDimitry Andricdef SPRWriteResGroup514 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
473306c3fb27SDimitry Andric  let Latency = 2;
473406c3fb27SDimitry Andric  let NumMicroOps = 2;
473506c3fb27SDimitry Andric}
473606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup514], (instregex "^VPSH(L|R)D(D|Q)Zrrik(z?)$")>;
473706c3fb27SDimitry Andric
473806c3fb27SDimitry Andricdef SPRWriteResGroup515 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
473906c3fb27SDimitry Andric  let Latency = 11;
474006c3fb27SDimitry Andric  let NumMicroOps = 3;
474106c3fb27SDimitry Andric}
474206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup515, ReadAfterVecXLd], (instregex "^VPSH(L|R)DWZ128rmik(z?)$")>;
474306c3fb27SDimitry Andric
474406c3fb27SDimitry Andricdef SPRWriteResGroup516 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05]> {
474506c3fb27SDimitry Andric  let Latency = 4;
474606c3fb27SDimitry Andric  let NumMicroOps = 2;
474706c3fb27SDimitry Andric}
474806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup516], (instregex "^VPSH(L|R)DWZ(128|256)rrik(z?)$")>;
474906c3fb27SDimitry Andric
475006c3fb27SDimitry Andricdef SPRWriteResGroup517 : SchedWriteRes<[SPRPort00_01, SPRPort00_01_05, SPRPort02_03_11]> {
475106c3fb27SDimitry Andric  let Latency = 12;
475206c3fb27SDimitry Andric  let NumMicroOps = 3;
475306c3fb27SDimitry Andric}
475406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup517, ReadAfterVecYLd], (instregex "^VPSH(L|R)DWZ256rmik(z?)$")>;
475506c3fb27SDimitry Andric
475606c3fb27SDimitry Andricdef SPRWriteResGroup518 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
475706c3fb27SDimitry Andric  let Latency = 12;
475806c3fb27SDimitry Andric  let NumMicroOps = 3;
475906c3fb27SDimitry Andric}
476006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup518, ReadAfterVecYLd], (instregex "^VPSH(L|R)DWZrmik(z?)$")>;
476106c3fb27SDimitry Andric
476206c3fb27SDimitry Andricdef SPRWriteResGroup519 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
476306c3fb27SDimitry Andric  let Latency = 4;
476406c3fb27SDimitry Andric  let NumMicroOps = 2;
476506c3fb27SDimitry Andric}
476606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup519], (instregex "^VPSH(L|R)DWZrrik(z?)$")>;
476706c3fb27SDimitry Andric
476806c3fb27SDimitry Andricdef SPRWriteResGroup520 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
476906c3fb27SDimitry Andric  let Latency = 6;
477006c3fb27SDimitry Andric  let NumMicroOps = 3;
477106c3fb27SDimitry Andric}
477206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup520, ReadAfterVecXLd], (instrs VPSHUFBITQMBZ128rm)>;
477306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup520, ReadAfterVecYLd], (instregex "^VPSHUFBITQMBZ((256)?)rm$")>;
477406c3fb27SDimitry Andric
477506c3fb27SDimitry Andricdef SPRWriteResGroup521 : SchedWriteRes<[SPRPort00, SPRPort02_03_11, SPRPort05]> {
477606c3fb27SDimitry Andric  let Latency = 8;
477706c3fb27SDimitry Andric  let NumMicroOps = 3;
477806c3fb27SDimitry Andric}
477906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup521, ReadAfterVecXLd], (instrs VPSHUFBITQMBZ128rmk)>;
478006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup521, ReadAfterVecYLd], (instregex "^VPSHUFBITQMBZ((256)?)rmk$")>;
478106c3fb27SDimitry Andric
478206c3fb27SDimitry Andricdef SPRWriteResGroup522 : SchedWriteRes<[SPRPort00_01, SPRPort01_05]> {
478306c3fb27SDimitry Andric  let Latency = 4;
478406c3fb27SDimitry Andric  let NumMicroOps = 2;
478506c3fb27SDimitry Andric}
478606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup522], (instregex "^VPS(L|R)LWZ128rrk(z?)$",
478706c3fb27SDimitry Andric                                               "^VPSRAWZ128rrk(z?)$")>;
478806c3fb27SDimitry Andric
478906c3fb27SDimitry Andricdef SPRWriteResGroup523 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
47905f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
479106c3fb27SDimitry Andric  let Latency = 16;
479206c3fb27SDimitry Andric  let NumMicroOps = 4;
479306c3fb27SDimitry Andric}
479406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup523, ReadAfterVecYLd], (instregex "^VR(CP|SQRT)PHZm(bk|kz)$",
479506c3fb27SDimitry Andric                                                                "^VR(CP|SQRT)PHZm(k|bkz)$")>;
479606c3fb27SDimitry Andric
479706c3fb27SDimitry Andricdef SPRWriteResGroup524 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
47985f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
479906c3fb27SDimitry Andric  let Latency = 9;
480006c3fb27SDimitry Andric  let NumMicroOps = 3;
480106c3fb27SDimitry Andric}
480206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup524], (instregex "^VRCPPHZrk(z?)$")>;
480306c3fb27SDimitry Andric
480406c3fb27SDimitry Andricdef SPRWriteResGroup525 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
48055f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
480606c3fb27SDimitry Andric  let Latency = 20;
480706c3fb27SDimitry Andric  let NumMicroOps = 4;
480806c3fb27SDimitry Andric}
480906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup525, ReadAfterVecXLd], (instregex "^VREDUCEPHZ128rm(b?)i$")>;
481006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup525, ReadAfterVecXLd], (instrs VREDUCESHZrmi)>;
481106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup525, ReadAfterVecYLd], (instregex "^VREDUCEPHZ256rm(b?)i$")>;
481206c3fb27SDimitry Andric
481306c3fb27SDimitry Andricdef SPRWriteResGroup526 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
48145f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
481506c3fb27SDimitry Andric  let Latency = 22;
481606c3fb27SDimitry Andric  let NumMicroOps = 4;
481706c3fb27SDimitry Andric}
481806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup526, ReadAfterVecXLd], (instregex "^VREDUCEPHZ128rm(b?)ik(z?)$",
481906c3fb27SDimitry Andric                                                                "^VREDUCESHZrmik(z?)$")>;
482006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup526, ReadAfterVecYLd], (instregex "^VREDUCEPHZ256rm(b?)ik(z?)$")>;
482106c3fb27SDimitry Andric
482206c3fb27SDimitry Andricdef SPRWriteResGroup527 : SchedWriteRes<[SPRPort00_01]> {
48235f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
482406c3fb27SDimitry Andric  let Latency = 13;
482506c3fb27SDimitry Andric  let NumMicroOps = 3;
482606c3fb27SDimitry Andric}
482706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup527], (instregex "^VREDUCEPHZ(128|256)rri$",
482806c3fb27SDimitry Andric                                               "^VREDUCESHZrri(b?)$")>;
482906c3fb27SDimitry Andric
483006c3fb27SDimitry Andricdef SPRWriteResGroup528 : SchedWriteRes<[SPRPort00_01]> {
48315f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
483206c3fb27SDimitry Andric  let Latency = 16;
483306c3fb27SDimitry Andric  let NumMicroOps = 3;
483406c3fb27SDimitry Andric}
483506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup528], (instregex "^VREDUCEPHZ(128|256)rrik(z?)$",
483606c3fb27SDimitry Andric                                               "^VREDUCESHZrri(bk|kz)$",
483706c3fb27SDimitry Andric                                               "^VREDUCESHZrri(k|bkz)$")>;
483806c3fb27SDimitry Andric
483906c3fb27SDimitry Andricdef SPRWriteResGroup529 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
48405f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
484106c3fb27SDimitry Andric  let Latency = 20;
484206c3fb27SDimitry Andric  let NumMicroOps = 4;
484306c3fb27SDimitry Andric}
484406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup529, ReadAfterVecYLd], (instregex "^VREDUCEPHZrm(b?)i$")>;
484506c3fb27SDimitry Andric
484606c3fb27SDimitry Andricdef SPRWriteResGroup530 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
48475f757f3fSDimitry Andric  let ReleaseAtCycles = [3, 1];
484806c3fb27SDimitry Andric  let Latency = 22;
484906c3fb27SDimitry Andric  let NumMicroOps = 4;
485006c3fb27SDimitry Andric}
485106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup530, ReadAfterVecYLd], (instregex "^VREDUCEPHZrm(b?)ik(z?)$")>;
485206c3fb27SDimitry Andric
485306c3fb27SDimitry Andricdef SPRWriteResGroup531 : SchedWriteRes<[SPRPort00]> {
48545f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
485506c3fb27SDimitry Andric  let Latency = 13;
485606c3fb27SDimitry Andric  let NumMicroOps = 3;
485706c3fb27SDimitry Andric}
485806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup531], (instregex "^VREDUCEPHZrri(b?)$")>;
485906c3fb27SDimitry Andric
486006c3fb27SDimitry Andricdef SPRWriteResGroup532 : SchedWriteRes<[SPRPort00]> {
48615f757f3fSDimitry Andric  let ReleaseAtCycles = [3];
486206c3fb27SDimitry Andric  let Latency = 16;
486306c3fb27SDimitry Andric  let NumMicroOps = 3;
486406c3fb27SDimitry Andric}
486506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup532], (instregex "^VREDUCEPHZrri(bk|kz)$",
486606c3fb27SDimitry Andric                                               "^VREDUCEPHZrri(k|bkz)$")>;
486706c3fb27SDimitry Andric
486806c3fb27SDimitry Andricdef SPRWriteResGroup533 : SchedWriteRes<[SPRPort00]> {
48695f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
487006c3fb27SDimitry Andric  let Latency = 8;
487106c3fb27SDimitry Andric  let NumMicroOps = 2;
487206c3fb27SDimitry Andric}
487306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup533], (instregex "^VRNDSCALEP(D|S)Zrri((b|k|bk|kz)?)$",
487406c3fb27SDimitry Andric                                               "^VRNDSCALEP(D|S)Zrribkz$")>;
487506c3fb27SDimitry Andric
487606c3fb27SDimitry Andricdef SPRWriteResGroup534 : SchedWriteRes<[SPRPort00_01, SPRPort02_03_11]> {
48775f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
487806c3fb27SDimitry Andric  let Latency = 17;
487906c3fb27SDimitry Andric  let NumMicroOps = 3;
488006c3fb27SDimitry Andric}
488106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup534, ReadAfterVecXLd], (instregex "^VRNDSCALEPHZ128rm(b?)ik(z?)$",
488206c3fb27SDimitry Andric                                                                "^VRNDSCALESHZm_Intk(z?)$",
488306c3fb27SDimitry Andric                                                                "^VSCALEFPHZ128rm(bk|kz)$",
488406c3fb27SDimitry Andric                                                                "^VSCALEFPHZ128rm(k|bkz)$")>;
488506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup534, ReadAfterVecYLd], (instregex "^VRNDSCALEPHZ256rm(b?)ik(z?)$",
488606c3fb27SDimitry Andric                                                                "^VSCALEFPHZ256rm(bk|kz)$",
488706c3fb27SDimitry Andric                                                                "^VSCALEFPHZ256rm(k|bkz)$")>;
488806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup534, ReadAfterVecLd], (instregex "^VSCALEFSHZrmk(z?)$")>;
488906c3fb27SDimitry Andric
489006c3fb27SDimitry Andricdef SPRWriteResGroup535 : SchedWriteRes<[SPRPort00_01]> {
48915f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
489206c3fb27SDimitry Andric  let Latency = 11;
489306c3fb27SDimitry Andric  let NumMicroOps = 2;
489406c3fb27SDimitry Andric}
489506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup535], (instregex "^VRNDSCALEPHZ(128|256)rrik(z?)$",
489606c3fb27SDimitry Andric                                               "^VRNDSCALESHZr(b?)_Intk(z?)$",
489706c3fb27SDimitry Andric                                               "^VSCALEFPHZ(128|256)rrk(z?)$",
489806c3fb27SDimitry Andric                                               "^VSCALEFSHZrrb_Intk(z?)$",
489906c3fb27SDimitry Andric                                               "^VSCALEFSHZrrk(z?)$")>;
490006c3fb27SDimitry Andric
490106c3fb27SDimitry Andricdef SPRWriteResGroup536 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
49025f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
490306c3fb27SDimitry Andric  let Latency = 17;
490406c3fb27SDimitry Andric  let NumMicroOps = 3;
490506c3fb27SDimitry Andric}
490606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup536, ReadAfterVecYLd], (instregex "^VRNDSCALEPHZrm(b?)ik(z?)$",
490706c3fb27SDimitry Andric                                                                "^VSCALEFPHZrm(bk|kz)$",
490806c3fb27SDimitry Andric                                                                "^VSCALEFPHZrm(k|bkz)$")>;
490906c3fb27SDimitry Andric
491006c3fb27SDimitry Andricdef SPRWriteResGroup537 : SchedWriteRes<[SPRPort00]> {
49115f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
491206c3fb27SDimitry Andric  let Latency = 11;
491306c3fb27SDimitry Andric  let NumMicroOps = 2;
491406c3fb27SDimitry Andric}
491506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup537], (instregex "^VRNDSCALEPHZrri(bk|kz)$",
491606c3fb27SDimitry Andric                                               "^VRNDSCALEPHZrri(k|bkz)$",
491706c3fb27SDimitry Andric                                               "^VSCALEFPHZrr(bk|kz)$",
491806c3fb27SDimitry Andric                                               "^VSCALEFPHZrr(k|bkz)$")>;
491906c3fb27SDimitry Andric
492006c3fb27SDimitry Andricdef SPRWriteResGroup538 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
49215f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
492206c3fb27SDimitry Andric  let Latency = 6;
492306c3fb27SDimitry Andric  let NumMicroOps = 3;
492406c3fb27SDimitry Andric}
492506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup538], (instregex "^VRSQRT14P(D|S)Zr$")>;
492606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup538], (instrs VRSQRT14PSZrk,
492706c3fb27SDimitry Andric                                            VRSQRTPHZr)>;
492806c3fb27SDimitry Andric
492906c3fb27SDimitry Andricdef SPRWriteResGroup539 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
493006c3fb27SDimitry Andric  let Latency = 25;
493106c3fb27SDimitry Andric  let NumMicroOps = 2;
493206c3fb27SDimitry Andric}
493306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup539], (instrs VSQRTPDYm)>;
493406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup539, ReadAfterVecYLd], (instregex "^VSQRTPDZ256m(b?)$")>;
493506c3fb27SDimitry Andric
493606c3fb27SDimitry Andricdef SPRWriteResGroup540 : SchedWriteRes<[SPRPort00, SPRPort02_03_11]> {
493706c3fb27SDimitry Andric  let Latency = 20;
493806c3fb27SDimitry Andric  let NumMicroOps = 2;
493906c3fb27SDimitry Andric}
494006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup540, ReadAfterVecXLd], (instregex "^VSQRTPDZ128m(bk|kz)$",
494106c3fb27SDimitry Andric                                                                "^VSQRTPDZ128m(k|bkz)$")>;
494206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup540, ReadAfterVecLd], (instregex "^VSQRTSDZm_Intk(z?)$")>;
494306c3fb27SDimitry Andric
494406c3fb27SDimitry Andricdef SPRWriteResGroup541 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
49455f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
494606c3fb27SDimitry Andric  let Latency = 38;
494706c3fb27SDimitry Andric  let NumMicroOps = 4;
494806c3fb27SDimitry Andric}
494906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup541, ReadAfterVecYLd], (instrs VSQRTPDZm)>;
495006c3fb27SDimitry Andric
495106c3fb27SDimitry Andricdef SPRWriteResGroup542 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort02_03_11]> {
49525f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
495306c3fb27SDimitry Andric  let Latency = 39;
495406c3fb27SDimitry Andric  let NumMicroOps = 4;
495506c3fb27SDimitry Andric}
495606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup542, ReadAfterVecYLd], (instrs VSQRTPDZmb)>;
495706c3fb27SDimitry Andric
495806c3fb27SDimitry Andricdef SPRWriteResGroup543 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
49595f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
496006c3fb27SDimitry Andric  let Latency = 31;
496106c3fb27SDimitry Andric  let NumMicroOps = 3;
496206c3fb27SDimitry Andric}
496306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup543], (instrs VSQRTPDZr)>;
496406c3fb27SDimitry Andric
496506c3fb27SDimitry Andricdef SPRWriteResGroup544 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
49665f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
496706c3fb27SDimitry Andric  let Latency = 41;
496806c3fb27SDimitry Andric  let NumMicroOps = 4;
496906c3fb27SDimitry Andric}
497006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup544, ReadAfterVecXLd], (instregex "^VSQRTPHZ128m(bk|kz)$",
497106c3fb27SDimitry Andric                                                                "^VSQRTPHZ128m(k|bkz)$")>;
497206c3fb27SDimitry Andric
497306c3fb27SDimitry Andricdef SPRWriteResGroup545 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
49745f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
497506c3fb27SDimitry Andric  let Latency = 35;
497606c3fb27SDimitry Andric  let NumMicroOps = 3;
497706c3fb27SDimitry Andric}
497806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup545], (instregex "^VSQRTPHZ(128|256)rk$")>;
497906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup545], (instrs VSQRTPHZ256rkz)>;
498006c3fb27SDimitry Andric
498106c3fb27SDimitry Andricdef SPRWriteResGroup546 : SchedWriteRes<[SPRPort00, SPRPort00_01_05]> {
49825f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
498306c3fb27SDimitry Andric  let Latency = 12;
498406c3fb27SDimitry Andric  let NumMicroOps = 3;
498506c3fb27SDimitry Andric}
498606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup546], (instrs VSQRTPHZ128rkz)>;
498706c3fb27SDimitry Andric
498806c3fb27SDimitry Andricdef SPRWriteResGroup547 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
49895f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
499006c3fb27SDimitry Andric  let Latency = 40;
499106c3fb27SDimitry Andric  let NumMicroOps = 4;
499206c3fb27SDimitry Andric}
499306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup547, ReadAfterVecYLd], (instregex "^VSQRTPHZ256m(b?)$")>;
499406c3fb27SDimitry Andric
499506c3fb27SDimitry Andricdef SPRWriteResGroup548 : SchedWriteRes<[SPRPort00, SPRPort00_01_05, SPRPort02_03_11]> {
49965f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 1];
499706c3fb27SDimitry Andric  let Latency = 42;
499806c3fb27SDimitry Andric  let NumMicroOps = 4;
499906c3fb27SDimitry Andric}
500006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup548, ReadAfterVecYLd], (instregex "^VSQRTPHZ256m(bk|kz)$",
500106c3fb27SDimitry Andric                                                                "^VSQRTPHZ256m(k|bkz)$")>;
500206c3fb27SDimitry Andric
500306c3fb27SDimitry Andricdef SPRWriteResGroup549 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
50045f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 2, 1, 1, 1];
500506c3fb27SDimitry Andric  let Latency = 53;
500606c3fb27SDimitry Andric  let NumMicroOps = 9;
500706c3fb27SDimitry Andric}
500806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup549, ReadAfterVecYLd], (instregex "^VSQRTPHZm(b?)$")>;
500906c3fb27SDimitry Andric
501006c3fb27SDimitry Andricdef SPRWriteResGroup550 : SchedWriteRes<[SPRPort00, SPRPort00_05, SPRPort00_06, SPRPort02_03_11, SPRPort05]> {
50115f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 2, 1, 1, 1];
501206c3fb27SDimitry Andric  let Latency = 55;
501306c3fb27SDimitry Andric  let NumMicroOps = 9;
501406c3fb27SDimitry Andric}
501506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup550, ReadAfterVecYLd], (instregex "^VSQRTPHZm(bk|kz)$",
501606c3fb27SDimitry Andric                                                                "^VSQRTPHZm(k|bkz)$")>;
501706c3fb27SDimitry Andric
501806c3fb27SDimitry Andricdef SPRWriteResGroup551 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort05]> {
50195f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1];
502006c3fb27SDimitry Andric  let Latency = 45;
502106c3fb27SDimitry Andric  let NumMicroOps = 6;
502206c3fb27SDimitry Andric}
502306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup551], (instregex "^VSQRTPHZr(b?)$")>;
502406c3fb27SDimitry Andric
502506c3fb27SDimitry Andricdef SPRWriteResGroup552 : SchedWriteRes<[SPRPort00, SPRPort00_06, SPRPort05]> {
50265f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1, 1];
502706c3fb27SDimitry Andric  let Latency = 47;
502806c3fb27SDimitry Andric  let NumMicroOps = 6;
502906c3fb27SDimitry Andric}
503006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup552], (instregex "^VSQRTPHZr(bk|kz)$",
503106c3fb27SDimitry Andric                                               "^VSQRTPHZr(k|bkz)$")>;
503206c3fb27SDimitry Andric
503306c3fb27SDimitry Andricdef SPRWriteResGroup553 : SchedWriteRes<[SPRPort00, SPRPort00_05]> {
50345f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
503506c3fb27SDimitry Andric  let Latency = 19;
503606c3fb27SDimitry Andric  let NumMicroOps = 3;
503706c3fb27SDimitry Andric}
503806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup553], (instrs VSQRTPSZr)>;
503906c3fb27SDimitry Andric
504006c3fb27SDimitry Andricdef SPRWriteResGroup554 : SchedWriteRes<[SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort01_05_10]> {
50415f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 2, 3, 3, 1];
504206c3fb27SDimitry Andric  let Latency = 12;
504306c3fb27SDimitry Andric  let NumMicroOps = 10;
504406c3fb27SDimitry Andric}
504506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup554], (instrs VZEROALL)>;
504606c3fb27SDimitry Andric
504706c3fb27SDimitry Andricdef SPRWriteResGroup555 : SchedWriteRes<[SPRPort00_01_05_06]> {
50485f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
504906c3fb27SDimitry Andric  let Latency = 2;
505006c3fb27SDimitry Andric  let NumMicroOps = 2;
505106c3fb27SDimitry Andric}
505206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup555], (instrs WAIT)>;
505306c3fb27SDimitry Andric
505406c3fb27SDimitry Andricdef SPRWriteResGroup556 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort04_09, SPRPort05, SPRPort07_08]> {
50555f757f3fSDimitry Andric  let ReleaseAtCycles = [8, 6, 19, 63, 21, 15, 1, 10, 1];
505606c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
505706c3fb27SDimitry Andric  let NumMicroOps = 144;
505806c3fb27SDimitry Andric}
505906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup556], (instrs WRMSR)>;
506006c3fb27SDimitry Andric
506106c3fb27SDimitry Andricdef SPRWriteResGroup557 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06, SPRPort01, SPRPort05]> {
50625f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1, 4, 1];
506306c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
506406c3fb27SDimitry Andric  let NumMicroOps = 8;
506506c3fb27SDimitry Andric}
506606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup557], (instrs WRPKRUr)>;
506706c3fb27SDimitry Andric
506806c3fb27SDimitry Andricdef SPRWriteResGroup558 : SchedWriteRes<[SPRPort00_01_05_06_10]> {
50695f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
507006c3fb27SDimitry Andric  let Latency = 12;
507106c3fb27SDimitry Andric  let NumMicroOps = 2;
507206c3fb27SDimitry Andric}
507306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup558, WriteRMW], (instregex "^XADD(16|32|64)rm$")>;
507406c3fb27SDimitry Andric
507506c3fb27SDimitry Andricdef SPRWriteResGroup559 : SchedWriteRes<[SPRPort00_01_05_06_10]> {
50765f757f3fSDimitry Andric  let ReleaseAtCycles = [2];
507706c3fb27SDimitry Andric  let Latency = 13;
507806c3fb27SDimitry Andric  let NumMicroOps = 2;
507906c3fb27SDimitry Andric}
508006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup559, WriteRMW], (instrs XADD8rm)>;
508106c3fb27SDimitry Andric
508206c3fb27SDimitry Andricdef SPRWriteResGroup560 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
50835f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1];
508406c3fb27SDimitry Andric  let Latency = 39;
508506c3fb27SDimitry Andric  let NumMicroOps = 5;
508606c3fb27SDimitry Andric}
508706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup560, WriteRMW], (instregex "^XCHG(16|32)rm$")>;
508806c3fb27SDimitry Andric
508906c3fb27SDimitry Andricdef SPRWriteResGroup561 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
50905f757f3fSDimitry Andric  let ReleaseAtCycles = [5, 1];
509106c3fb27SDimitry Andric  let Latency = 39;
509206c3fb27SDimitry Andric  let NumMicroOps = 6;
509306c3fb27SDimitry Andric}
509406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup561, WriteRMW], (instrs XCHG64rm)>;
509506c3fb27SDimitry Andric
509606c3fb27SDimitry Andricdef SPRWriteResGroup562 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
50975f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 1];
509806c3fb27SDimitry Andric  let Latency = 40;
509906c3fb27SDimitry Andric  let NumMicroOps = 5;
510006c3fb27SDimitry Andric}
510106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup562, WriteRMW], (instrs XCHG8rm)>;
510206c3fb27SDimitry Andric
510306c3fb27SDimitry Andricdef SPRWriteResGroup563 : SchedWriteRes<[SPRPort00, SPRPort00_01_05_06, SPRPort00_05, SPRPort01, SPRPort05, SPRPort06]> {
51045f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 4, 2, 1, 2, 4];
510506c3fb27SDimitry Andric  let Latency = 17;
510606c3fb27SDimitry Andric  let NumMicroOps = 15;
510706c3fb27SDimitry Andric}
510806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup563], (instrs XCH_F)>;
510906c3fb27SDimitry Andric
511006c3fb27SDimitry Andricdef SPRWriteResGroup564 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01]> {
51115f757f3fSDimitry Andric  let ReleaseAtCycles = [7, 3, 8, 5];
511206c3fb27SDimitry Andric  let Latency = 4;
511306c3fb27SDimitry Andric  let NumMicroOps = 23;
511406c3fb27SDimitry Andric}
511506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup564], (instrs XGETBV)>;
511606c3fb27SDimitry Andric
511706c3fb27SDimitry Andricdef SPRWriteResGroup565 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort02_03_11]> {
51185f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
511906c3fb27SDimitry Andric  let Latency = 7;
512006c3fb27SDimitry Andric  let NumMicroOps = 3;
512106c3fb27SDimitry Andric}
512206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup565], (instrs XLAT)>;
512306c3fb27SDimitry Andric
512406c3fb27SDimitry Andricdef SPRWriteResGroup566 : SchedWriteRes<[SPRPort01, SPRPort02_03, SPRPort02_03_11, SPRPort06]> {
51255f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 21, 1, 8];
512606c3fb27SDimitry Andric  let Latency = 37;
512706c3fb27SDimitry Andric  let NumMicroOps = 31;
512806c3fb27SDimitry Andric}
512906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup566], (instregex "^XRSTOR((S|64)?)$")>;
513006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup566], (instrs XRSTORS64)>;
513106c3fb27SDimitry Andric
513206c3fb27SDimitry Andricdef SPRWriteResGroup567 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51335f757f3fSDimitry Andric  let ReleaseAtCycles = [14, 25, 44, 21, 21, 4, 1, 9, 1];
513406c3fb27SDimitry Andric  let Latency = 42;
513506c3fb27SDimitry Andric  let NumMicroOps = 140;
513606c3fb27SDimitry Andric}
513706c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup567], (instrs XSAVE)>;
513806c3fb27SDimitry Andric
513906c3fb27SDimitry Andricdef SPRWriteResGroup568 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51405f757f3fSDimitry Andric  let ReleaseAtCycles = [14, 25, 44, 21, 21, 4, 1, 9, 1];
514106c3fb27SDimitry Andric  let Latency = 41;
514206c3fb27SDimitry Andric  let NumMicroOps = 140;
514306c3fb27SDimitry Andric}
514406c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup568], (instrs XSAVE64)>;
514506c3fb27SDimitry Andric
514606c3fb27SDimitry Andricdef SPRWriteResGroup569 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51475f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 19, 36, 52, 23, 4, 2, 12, 2];
514806c3fb27SDimitry Andric  let Latency = 42;
514906c3fb27SDimitry Andric  let NumMicroOps = 151;
515006c3fb27SDimitry Andric}
515106c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup569], (instrs XSAVEC)>;
515206c3fb27SDimitry Andric
515306c3fb27SDimitry Andricdef SPRWriteResGroup570 : SchedWriteRes<[SPRPort00, SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51545f757f3fSDimitry Andric  let ReleaseAtCycles = [1, 19, 36, 53, 23, 4, 2, 12, 2];
515506c3fb27SDimitry Andric  let Latency = 42;
515606c3fb27SDimitry Andric  let NumMicroOps = 152;
515706c3fb27SDimitry Andric}
515806c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup570], (instrs XSAVEC64)>;
515906c3fb27SDimitry Andric
516006c3fb27SDimitry Andricdef SPRWriteResGroup571 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51615f757f3fSDimitry Andric  let ReleaseAtCycles = [25, 35, 52, 27, 4, 1, 10, 1];
516206c3fb27SDimitry Andric  let Latency = 42;
516306c3fb27SDimitry Andric  let NumMicroOps = 155;
516406c3fb27SDimitry Andric}
516506c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup571], (instrs XSAVEOPT)>;
516606c3fb27SDimitry Andric
516706c3fb27SDimitry Andricdef SPRWriteResGroup572 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51685f757f3fSDimitry Andric  let ReleaseAtCycles = [25, 35, 53, 27, 4, 1, 10, 1];
516906c3fb27SDimitry Andric  let Latency = 42;
517006c3fb27SDimitry Andric  let NumMicroOps = 156;
517106c3fb27SDimitry Andric}
517206c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup572], (instrs XSAVEOPT64)>;
517306c3fb27SDimitry Andric
517406c3fb27SDimitry Andricdef SPRWriteResGroup573 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51755f757f3fSDimitry Andric  let ReleaseAtCycles = [23, 32, 53, 29, 30, 4, 2, 9, 2];
517606c3fb27SDimitry Andric  let Latency = 42;
517706c3fb27SDimitry Andric  let NumMicroOps = 184;
517806c3fb27SDimitry Andric}
517906c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup573], (instrs XSAVES)>;
518006c3fb27SDimitry Andric
518106c3fb27SDimitry Andricdef SPRWriteResGroup574 : SchedWriteRes<[SPRPort00_01, SPRPort00_05, SPRPort00_06, SPRPort01, SPRPort01_05, SPRPort02_03_11, SPRPort04_09, SPRPort05, SPRPort07_08]> {
51825f757f3fSDimitry Andric  let ReleaseAtCycles = [23, 33, 53, 29, 32, 4, 2, 8, 2];
518306c3fb27SDimitry Andric  let Latency = 42;
518406c3fb27SDimitry Andric  let NumMicroOps = 186;
518506c3fb27SDimitry Andric}
518606c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup574], (instrs XSAVES64)>;
518706c3fb27SDimitry Andric
518806c3fb27SDimitry Andricdef SPRWriteResGroup575 : SchedWriteRes<[SPRPort00_01_05, SPRPort00_01_05_06_10, SPRPort00_05_06, SPRPort00_06, SPRPort01, SPRPort01_05_10, SPRPort05]> {
51895f757f3fSDimitry Andric  let ReleaseAtCycles = [4, 23, 2, 14, 8, 1, 2];
519006c3fb27SDimitry Andric  let Latency = 5;
519106c3fb27SDimitry Andric  let NumMicroOps = 54;
519206c3fb27SDimitry Andric}
519306c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup575], (instrs XSETBV)>;
519406c3fb27SDimitry Andric
519506c3fb27SDimitry Andricdef SPRWriteResGroup576 : SchedWriteRes<[SPRPort00_01_05_06_10, SPRPort00_06]> {
51965f757f3fSDimitry Andric  let ReleaseAtCycles = [2, 1];
519706c3fb27SDimitry Andric  let Latency = SapphireRapidsModel.MaxLatency;
519806c3fb27SDimitry Andric  let NumMicroOps = 3;
519906c3fb27SDimitry Andric}
520006c3fb27SDimitry Andricdef : InstRW<[SPRWriteResGroup576], (instrs XTEST)>;
520106c3fb27SDimitry Andric
520206c3fb27SDimitry Andric}
5203