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