1*0fca6ea1SDimitry Andric//==- RISCVSchedXiangShanNanHu.td - XS-NanHu Scheduling Defs -*- tablegen -*-=// 2*0fca6ea1SDimitry Andric// 3*0fca6ea1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0fca6ea1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0fca6ea1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0fca6ea1SDimitry Andric// 7*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 8*0fca6ea1SDimitry Andric 9*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 10*0fca6ea1SDimitry Andric 11*0fca6ea1SDimitry Andric// XiangShan is a high-performance open-source RISC-V processor developed by 12*0fca6ea1SDimitry Andric// the Institute of Computing Technology (ICT), Chinese Academy of Sciences. 13*0fca6ea1SDimitry Andric// Source: https://github.com/OpenXiangShan/XiangShan 14*0fca6ea1SDimitry Andric// Documentation: https://github.com/OpenXiangShan/XiangShan-doc 15*0fca6ea1SDimitry Andric 16*0fca6ea1SDimitry Andric// XiangShan-NanHu is the second generation of XiangShan processor series. 17*0fca6ea1SDimitry Andric// Overview: https://xiangshan-doc.readthedocs.io/zh-cn/latest/integration/overview/ 18*0fca6ea1SDimitry Andric 19*0fca6ea1SDimitry Andricdef XiangShanNanHuModel : SchedMachineModel { 20*0fca6ea1SDimitry Andric let MicroOpBufferSize = 256; 21*0fca6ea1SDimitry Andric let LoopMicroOpBufferSize = 48; // Instruction queue size 22*0fca6ea1SDimitry Andric let IssueWidth = 6; // 6-way decode and dispatch 23*0fca6ea1SDimitry Andric let LoadLatency = 4; 24*0fca6ea1SDimitry Andric let MispredictPenalty = 11; // Based on estimate of pipeline depth. 25*0fca6ea1SDimitry Andric let CompleteModel = 0; 26*0fca6ea1SDimitry Andric let UnsupportedFeatures = [HasStdExtZcmt, HasStdExtZkr, HasVInstructions, 27*0fca6ea1SDimitry Andric HasVInstructionsI64]; 28*0fca6ea1SDimitry Andric} 29*0fca6ea1SDimitry Andric 30*0fca6ea1SDimitry Andriclet SchedModel = XiangShanNanHuModel in { 31*0fca6ea1SDimitry Andric 32*0fca6ea1SDimitry Andric// The reservation stations are distributed and grouped as 32-entry or 16-entry smaller ones. 33*0fca6ea1SDimitry Andriclet BufferSize = 16 in { 34*0fca6ea1SDimitry Andric def XS2ALU : ProcResource<4>; 35*0fca6ea1SDimitry Andric def XS2MDU : ProcResource<2>; 36*0fca6ea1SDimitry Andric def XS2MISC : ProcResource<1>; 37*0fca6ea1SDimitry Andric 38*0fca6ea1SDimitry Andric def XS2FMAC : ProcResource<4>; 39*0fca6ea1SDimitry Andric def XS2FMISC : ProcResource<2>; 40*0fca6ea1SDimitry Andric 41*0fca6ea1SDimitry Andric // Load/Store queues are ignored. 42*0fca6ea1SDimitry Andric def XS2LD : ProcResource<2>; 43*0fca6ea1SDimitry Andric def XS2ST : ProcResource<2>; 44*0fca6ea1SDimitry Andric} 45*0fca6ea1SDimitry Andric 46*0fca6ea1SDimitry Andric// Branching 47*0fca6ea1SDimitry Andricdef : WriteRes<WriteJmp, [XS2MISC]>; 48*0fca6ea1SDimitry Andricdef : WriteRes<WriteJal, [XS2MISC]>; 49*0fca6ea1SDimitry Andricdef : WriteRes<WriteJalr, [XS2MISC]>; 50*0fca6ea1SDimitry Andric 51*0fca6ea1SDimitry Andric// Integer arithmetic and logic 52*0fca6ea1SDimitry Andriclet Latency = 1 in { 53*0fca6ea1SDimitry Andricdef : WriteRes<WriteIALU, [XS2ALU]>; 54*0fca6ea1SDimitry Andricdef : WriteRes<WriteIALU32, [XS2ALU]>; 55*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftImm, [XS2ALU]>; 56*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftImm32, [XS2ALU]>; 57*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftReg, [XS2ALU]>; 58*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftReg32, [XS2ALU]>; 59*0fca6ea1SDimitry Andric} 60*0fca6ea1SDimitry Andric 61*0fca6ea1SDimitry Andric// Integer multiplication 62*0fca6ea1SDimitry Andriclet Latency = 3 in { 63*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMul, [XS2MDU]>; 64*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMul32, [XS2MDU]>; 65*0fca6ea1SDimitry Andric} 66*0fca6ea1SDimitry Andric 67*0fca6ea1SDimitry Andric// Integer division/remainder 68*0fca6ea1SDimitry Andric// SRT16 algorithm 69*0fca6ea1SDimitry Andriclet Latency = 20, ReleaseAtCycles = [20] in { 70*0fca6ea1SDimitry Andricdef : WriteRes<WriteIDiv32, [XS2MDU]>; 71*0fca6ea1SDimitry Andricdef : WriteRes<WriteIDiv, [XS2MDU]>; 72*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem32, [XS2MDU]>; 73*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem, [XS2MDU]>; 74*0fca6ea1SDimitry Andric} 75*0fca6ea1SDimitry Andric 76*0fca6ea1SDimitry Andric// Zb* 77*0fca6ea1SDimitry Andriclet Latency = 1 in { 78*0fca6ea1SDimitry Andric// Zba 79*0fca6ea1SDimitry Andricdef : WriteRes<WriteSHXADD, [XS2ALU]>; 80*0fca6ea1SDimitry Andricdef : WriteRes<WriteSHXADD32, [XS2ALU]>; 81*0fca6ea1SDimitry Andric 82*0fca6ea1SDimitry Andric// Zbb 83*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateImm, [XS2ALU]>; 84*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateImm32, [XS2ALU]>; 85*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateReg, [XS2ALU]>; 86*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateReg32, [XS2ALU]>; 87*0fca6ea1SDimitry Andricdef : WriteRes<WriteORCB, [XS2ALU]>; 88*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMinMax, [XS2ALU]>; 89*0fca6ea1SDimitry Andricdef : WriteRes<WriteREV8, [XS2ALU]>; 90*0fca6ea1SDimitry Andric 91*0fca6ea1SDimitry Andric// Zbkb 92*0fca6ea1SDimitry Andricdef : WriteRes<WriteBREV8, [XS2ALU]>; 93*0fca6ea1SDimitry Andricdef : WriteRes<WritePACK, [XS2ALU]>; 94*0fca6ea1SDimitry Andricdef : WriteRes<WritePACK32, [XS2ALU]>; 95*0fca6ea1SDimitry Andricdef : WriteRes<WriteZIP, [XS2ALU]>; 96*0fca6ea1SDimitry Andric 97*0fca6ea1SDimitry Andric// Zbs 98*0fca6ea1SDimitry Andricdef : WriteRes<WriteSingleBit, [XS2ALU]>; 99*0fca6ea1SDimitry Andricdef : WriteRes<WriteSingleBitImm, [XS2ALU]>; 100*0fca6ea1SDimitry Andricdef : WriteRes<WriteBEXT, [XS2ALU]>; 101*0fca6ea1SDimitry Andricdef : WriteRes<WriteBEXTI, [XS2ALU]>; 102*0fca6ea1SDimitry Andric} 103*0fca6ea1SDimitry Andric 104*0fca6ea1SDimitry Andriclet Latency = 3 in { 105*0fca6ea1SDimitry Andric// Zbb 106*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLZ, [XS2MDU]>; 107*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLZ32, [XS2MDU]>; 108*0fca6ea1SDimitry Andricdef : WriteRes<WriteCTZ, [XS2MDU]>; 109*0fca6ea1SDimitry Andricdef : WriteRes<WriteCTZ32, [XS2MDU]>; 110*0fca6ea1SDimitry Andricdef : WriteRes<WriteCPOP, [XS2MDU]>; 111*0fca6ea1SDimitry Andricdef : WriteRes<WriteCPOP32, [XS2MDU]>; 112*0fca6ea1SDimitry Andric 113*0fca6ea1SDimitry Andric// Zbkc 114*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLMUL, [XS2MDU]>; 115*0fca6ea1SDimitry Andric 116*0fca6ea1SDimitry Andric// Zbkx 117*0fca6ea1SDimitry Andricdef : WriteRes<WriteXPERM, [XS2MDU]>; 118*0fca6ea1SDimitry Andric} 119*0fca6ea1SDimitry Andric 120*0fca6ea1SDimitry Andric// Memory 121*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTB, [XS2ST]>; 122*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTH, [XS2ST]>; 123*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTW, [XS2ST]>; 124*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTD, [XS2ST]>; 125*0fca6ea1SDimitry Andricdef : WriteRes<WriteFST32, [XS2ST]>; 126*0fca6ea1SDimitry Andricdef : WriteRes<WriteFST64, [XS2ST]>; 127*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicSTW, [XS2ST]>; 128*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicSTD, [XS2ST]>; 129*0fca6ea1SDimitry Andric 130*0fca6ea1SDimitry Andriclet Latency = 5 in { 131*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDB, [XS2LD]>; 132*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDH, [XS2LD]>; 133*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDW, [XS2LD]>; 134*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDD, [XS2LD]>; 135*0fca6ea1SDimitry Andric 136*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicW, [XS2LD]>; 137*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicD, [XS2LD]>; 138*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicLDW, [XS2LD]>; 139*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicLDD, [XS2LD]>; 140*0fca6ea1SDimitry Andric 141*0fca6ea1SDimitry Andricdef : WriteRes<WriteFLD32, [XS2LD]>; 142*0fca6ea1SDimitry Andricdef : WriteRes<WriteFLD64, [XS2LD]>; 143*0fca6ea1SDimitry Andric} 144*0fca6ea1SDimitry Andric 145*0fca6ea1SDimitry Andric// XiangShan-NanHu uses FuDian FPU instead of Berkeley HardFloat. 146*0fca6ea1SDimitry Andric// Documentation: https://github.com/OpenXiangShan/fudian 147*0fca6ea1SDimitry Andric 148*0fca6ea1SDimitry Andriclet Latency = 3 in { 149*0fca6ea1SDimitry Andricdef : WriteRes<WriteFAdd32, [XS2FMAC]>; 150*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSGNJ32, [XS2FMAC]>; 151*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMinMax32, [XS2FMAC]>; 152*0fca6ea1SDimitry Andricdef : WriteRes<WriteFAdd64, [XS2FMAC]>; 153*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSGNJ64, [XS2FMAC]>; 154*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMinMax64, [XS2FMAC]>; 155*0fca6ea1SDimitry Andric 156*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI32ToF32, [XS2FMAC]>; 157*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI32ToF64, [XS2FMAC]>; 158*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI64ToF32, [XS2FMAC]>; 159*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI64ToF64, [XS2FMAC]>; 160*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToI32, [XS2FMAC]>; 161*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToI64, [XS2FMAC]>; 162*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToI32, [XS2FMAC]>; 163*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToI64, [XS2FMAC]>; 164*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToF64, [XS2FMAC]>; 165*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToF32, [XS2FMAC]>; 166*0fca6ea1SDimitry Andric 167*0fca6ea1SDimitry Andricdef : WriteRes<WriteFClass32, [XS2FMAC]>; 168*0fca6ea1SDimitry Andricdef : WriteRes<WriteFClass64, [XS2FMAC]>; 169*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCmp32, [XS2FMAC]>; 170*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCmp64, [XS2FMAC]>; 171*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovF32ToI32, [XS2FMAC]>; 172*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovI32ToF32, [XS2FMAC]>; 173*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovF64ToI64, [XS2FMAC]>; 174*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovI64ToF64, [XS2FMAC]>; 175*0fca6ea1SDimitry Andric} 176*0fca6ea1SDimitry Andric 177*0fca6ea1SDimitry Andric// FP multiplication 178*0fca6ea1SDimitry Andriclet Latency = 3 in { 179*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMul32, [XS2FMAC]>; 180*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMul64, [XS2FMAC]>; 181*0fca6ea1SDimitry Andric} 182*0fca6ea1SDimitry Andric 183*0fca6ea1SDimitry Andriclet Latency = 5 in { 184*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMA32, [XS2FMAC]>; 185*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMA64, [XS2FMAC]>; 186*0fca6ea1SDimitry Andric} 187*0fca6ea1SDimitry Andric 188*0fca6ea1SDimitry Andric// FP division 189*0fca6ea1SDimitry Andricdef : WriteRes<WriteFDiv32, [XS2FMISC]> { 190*0fca6ea1SDimitry Andric let Latency = 11; 191*0fca6ea1SDimitry Andric} 192*0fca6ea1SDimitry Andricdef : WriteRes<WriteFDiv64, [XS2FMISC]> { 193*0fca6ea1SDimitry Andric let Latency = 18; 194*0fca6ea1SDimitry Andric} 195*0fca6ea1SDimitry Andric 196*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSqrt32, [XS2FMISC]> { 197*0fca6ea1SDimitry Andric let Latency = 17; 198*0fca6ea1SDimitry Andric} 199*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSqrt64, [XS2FMISC]> { 200*0fca6ea1SDimitry Andric let Latency = 31; 201*0fca6ea1SDimitry Andric} 202*0fca6ea1SDimitry Andric 203*0fca6ea1SDimitry Andric// Others 204*0fca6ea1SDimitry Andricdef : WriteRes<WriteCSR, [XS2MISC]>; 205*0fca6ea1SDimitry Andricdef : WriteRes<WriteNop, []>; 206*0fca6ea1SDimitry Andric 207*0fca6ea1SDimitry Andricdef : InstRW<[WriteIALU], (instrs COPY)>; 208*0fca6ea1SDimitry Andric 209*0fca6ea1SDimitry Andric// Bypass and advance 210*0fca6ea1SDimitry Andric 211*0fca6ea1SDimitry Andricclass XS2LoadToALUBypass<SchedRead read> 212*0fca6ea1SDimitry Andric : ReadAdvance<read, 1, [WriteLDB, WriteLDH, WriteLDW, WriteLDD, WriteAtomicW, WriteAtomicD, WriteAtomicLDW, WriteAtomicLDD]>; 213*0fca6ea1SDimitry Andric 214*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadJmp, 0>; 215*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadJalr, 0>; 216*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCSR, 0>; 217*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadStoreData, 0>; 218*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadMemBase, 0>; 219*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIALU>; 220*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIALU32>; 221*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftImm>; 222*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftImm32>; 223*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftReg>; 224*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftReg32>; 225*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIDiv, 0>; 226*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIDiv32, 0>; 227*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem, 0>; 228*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem32, 0>; 229*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMul, 0>; 230*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMul32, 0>; 231*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicWA, 0>; 232*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicWD, 0>; 233*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicDA, 0>; 234*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicDD, 0>; 235*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicLDW, 0>; 236*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicLDD, 0>; 237*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicSTW, 0>; 238*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicSTD, 0>; 239*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFStoreData, 0>; 240*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMemBase, 0>; 241*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFAdd32, 0>; 242*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFAdd64, 0>; 243*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMul32, 0>; 244*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMul64, 0>; 245*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA32, 0>; 246*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA32Addend, 2>; // Cascade FMA 247*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA64, 0>; 248*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA64Addend, 2>; // Cascade FMA 249*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFDiv32, 0>; 250*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFDiv64, 0>; 251*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSqrt32, 0>; 252*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSqrt64, 0>; 253*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCmp32, 0>; 254*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCmp64, 0>; 255*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSGNJ32, 0>; 256*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSGNJ64, 0>; 257*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMinMax32, 0>; 258*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMinMax64, 0>; 259*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI32, 0>; 260*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI64, 0>; 261*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI32, 0>; 262*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI64, 0>; 263*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF32, 0>; 264*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF64, 0>; 265*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF32, 0>; 266*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF64, 0>; 267*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF64, 0>; 268*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF32, 0>; 269*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovF32ToI32, 0>; 270*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovI32ToF32, 0>; 271*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovF64ToI64, 0>; 272*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovI64ToF64, 0>; 273*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFClass32, 0>; 274*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFClass64, 0>; 275*0fca6ea1SDimitry Andric 276*0fca6ea1SDimitry Andric// Zb* 277*0fca6ea1SDimitry Andric// Zba 278*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSHXADD>; 279*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSHXADD32>; 280*0fca6ea1SDimitry Andric// Zbb 281*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateImm>; 282*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateImm32>; 283*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateReg>; 284*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateReg32>; 285*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLZ, 0>; 286*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>; 287*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCTZ, 0>; 288*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>; 289*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCPOP, 0>; 290*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>; 291*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadORCB>; 292*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIMinMax>; 293*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadREV8>; 294*0fca6ea1SDimitry Andric// Zbkc 295*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLMUL, 0>; 296*0fca6ea1SDimitry Andric// Zbs 297*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSingleBit>; 298*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSingleBitImm>; 299*0fca6ea1SDimitry Andric// Zbkb 300*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadBREV8>; 301*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadPACK>; 302*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadPACK32>; 303*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadZIP>; 304*0fca6ea1SDimitry Andric// Zbkx 305*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadXPERM, 0>; 306*0fca6ea1SDimitry Andric 307*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 308*0fca6ea1SDimitry Andric// Unsupported extensions 309*0fca6ea1SDimitry Andricdefm : UnsupportedSchedV; 310*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZfa; 311*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZfh; 312*0fca6ea1SDimitry Andricdefm : UnsupportedSchedSFB; 313*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZabha; 314*0fca6ea1SDimitry Andricdefm : UnsupportedSchedXsfvcp; 315*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZvk; 316*0fca6ea1SDimitry Andric} 317