1*700637cbSDimitry Andric//=- RISCVSchedSpacemitX60.td - Spacemit X60 Scheduling Defs -*- tablegen -*-=// 2*700637cbSDimitry Andric// 3*700637cbSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*700637cbSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*700637cbSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*700637cbSDimitry Andric// 7*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 8*700637cbSDimitry Andric 9*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 10*700637cbSDimitry Andric// 11*700637cbSDimitry Andric// Scheduler model for the SpacemiT-X60 processor based on documentation of the 12*700637cbSDimitry Andric// C908 and experiments on real hardware (bpi-f3). 13*700637cbSDimitry Andric// 14*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 15*700637cbSDimitry Andric 16*700637cbSDimitry Andricdef SpacemitX60Model : SchedMachineModel { 17*700637cbSDimitry Andric let IssueWidth = 2; // dual-issue 18*700637cbSDimitry Andric let MicroOpBufferSize = 0; // in-order 19*700637cbSDimitry Andric let LoadLatency = 3; // worse case: >= 3 20*700637cbSDimitry Andric let MispredictPenalty = 9; // nine-stage 21*700637cbSDimitry Andric 22*700637cbSDimitry Andric let CompleteModel = 0; 23*700637cbSDimitry Andric 24*700637cbSDimitry Andric let UnsupportedFeatures = [HasStdExtZknd, HasStdExtZkne, HasStdExtZknh, 25*700637cbSDimitry Andric HasStdExtZksed, HasStdExtZksh, HasStdExtZkr]; 26*700637cbSDimitry Andric} 27*700637cbSDimitry Andric 28*700637cbSDimitry Andriclet SchedModel = SpacemitX60Model in { 29*700637cbSDimitry Andric 30*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 31*700637cbSDimitry Andric// Define processor resources for Spacemit-X60 32*700637cbSDimitry Andric 33*700637cbSDimitry Andric// Information gathered from the C908 user manual: 34*700637cbSDimitry Andriclet BufferSize = 0 in { 35*700637cbSDimitry Andric // The LSU supports dual issue for scalar store/load instructions 36*700637cbSDimitry Andric def SMX60_LS : ProcResource<2>; 37*700637cbSDimitry Andric 38*700637cbSDimitry Andric // An IEU can decode and issue two instructions at the same time 39*700637cbSDimitry Andric def SMX60_IEUA : ProcResource<1>; 40*700637cbSDimitry Andric def SMX60_IEUB : ProcResource<1>; 41*700637cbSDimitry Andric def SMX60_IEU : ProcResGroup<[SMX60_IEUA, SMX60_IEUB]>; 42*700637cbSDimitry Andric 43*700637cbSDimitry Andric // Although the X60 does appear to support multiple issue for at least some 44*700637cbSDimitry Andric // floating point instructions, this model assumes single issue as 45*700637cbSDimitry Andric // increasing it reduces the gains we saw in performance 46*700637cbSDimitry Andric def SMX60_FP : ProcResource<1>; 47*700637cbSDimitry Andric} 48*700637cbSDimitry Andric 49*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 50*700637cbSDimitry Andric 51*700637cbSDimitry Andric// Branching 52*700637cbSDimitry Andricdef : WriteRes<WriteJmp, [SMX60_IEUA]>; 53*700637cbSDimitry Andricdef : WriteRes<WriteJal, [SMX60_IEUA]>; 54*700637cbSDimitry Andricdef : WriteRes<WriteJalr, [SMX60_IEUA]>; 55*700637cbSDimitry Andric 56*700637cbSDimitry Andric// Integer arithmetic and logic 57*700637cbSDimitry Andric// Latency of ALU instructions is 1, but add.uw is 2 58*700637cbSDimitry Andricdef : WriteRes<WriteIALU32, [SMX60_IEU]>; 59*700637cbSDimitry Andricdef : WriteRes<WriteIALU, [SMX60_IEU]>; 60*700637cbSDimitry Andricdef : WriteRes<WriteShiftImm32, [SMX60_IEU]>; 61*700637cbSDimitry Andricdef : WriteRes<WriteShiftImm, [SMX60_IEU]>; 62*700637cbSDimitry Andricdef : WriteRes<WriteShiftReg32, [SMX60_IEU]>; 63*700637cbSDimitry Andricdef : WriteRes<WriteShiftReg, [SMX60_IEU]>; 64*700637cbSDimitry Andric 65*700637cbSDimitry Andric// Integer multiplication 66*700637cbSDimitry Andricdef : WriteRes<WriteIMul32, [SMX60_IEU]> { let Latency = 3; } 67*700637cbSDimitry Andric 68*700637cbSDimitry Andric// The latency of mul is 5, while in mulh, mulhsu, mulhu is 6 69*700637cbSDimitry Andric// Worst case latency is used 70*700637cbSDimitry Andricdef : WriteRes<WriteIMul, [SMX60_IEU]> { let Latency = 6; } 71*700637cbSDimitry Andric 72*700637cbSDimitry Andric// Integer division/remainder 73*700637cbSDimitry Andric// TODO: Latency set based on C908 datasheet and hasn't been 74*700637cbSDimitry Andric// confirmed experimentally. 75*700637cbSDimitry Andriclet Latency = 12, ReleaseAtCycles = [12] in { 76*700637cbSDimitry Andric def : WriteRes<WriteIDiv32, [SMX60_IEUA]>; 77*700637cbSDimitry Andric def : WriteRes<WriteIRem32, [SMX60_IEUA]>; 78*700637cbSDimitry Andric} 79*700637cbSDimitry Andriclet Latency = 20, ReleaseAtCycles = [20] in { 80*700637cbSDimitry Andric def : WriteRes<WriteIDiv, [SMX60_IEUA]>; 81*700637cbSDimitry Andric def : WriteRes<WriteIRem, [SMX60_IEUA]>; 82*700637cbSDimitry Andric} 83*700637cbSDimitry Andric 84*700637cbSDimitry Andric// Bitmanip 85*700637cbSDimitry Andricdef : WriteRes<WriteRotateImm, [SMX60_IEU]>; 86*700637cbSDimitry Andricdef : WriteRes<WriteRotateImm32, [SMX60_IEU]>; 87*700637cbSDimitry Andricdef : WriteRes<WriteRotateReg, [SMX60_IEU]>; 88*700637cbSDimitry Andricdef : WriteRes<WriteRotateReg32, [SMX60_IEU]>; 89*700637cbSDimitry Andric 90*700637cbSDimitry Andricdef : WriteRes<WriteCLZ, [SMX60_IEU]>; 91*700637cbSDimitry Andricdef : WriteRes<WriteCLZ32, [SMX60_IEU]>; 92*700637cbSDimitry Andricdef : WriteRes<WriteCTZ, [SMX60_IEU]>; 93*700637cbSDimitry Andricdef : WriteRes<WriteCTZ32, [SMX60_IEU]>; 94*700637cbSDimitry Andric 95*700637cbSDimitry Andriclet Latency = 2 in { 96*700637cbSDimitry Andric def : WriteRes<WriteCPOP, [SMX60_IEU]>; 97*700637cbSDimitry Andric def : WriteRes<WriteCPOP32, [SMX60_IEU]>; 98*700637cbSDimitry Andric} 99*700637cbSDimitry Andric 100*700637cbSDimitry Andricdef : WriteRes<WriteORCB, [SMX60_IEU]>; 101*700637cbSDimitry Andricdef : WriteRes<WriteIMinMax, [SMX60_IEU]>; 102*700637cbSDimitry Andricdef : WriteRes<WriteREV8, [SMX60_IEU]>; 103*700637cbSDimitry Andric 104*700637cbSDimitry Andriclet Latency = 2 in { 105*700637cbSDimitry Andric def : WriteRes<WriteSHXADD, [SMX60_IEU]>; 106*700637cbSDimitry Andric def : WriteRes<WriteSHXADD32, [SMX60_IEU]>; 107*700637cbSDimitry Andric def : WriteRes<WriteCLMUL, [SMX60_IEU]>; 108*700637cbSDimitry Andric} 109*700637cbSDimitry Andric 110*700637cbSDimitry Andric// Single-bit instructions 111*700637cbSDimitry Andricdef : WriteRes<WriteSingleBit, [SMX60_IEU]>; 112*700637cbSDimitry Andricdef : WriteRes<WriteSingleBitImm, [SMX60_IEU]>; 113*700637cbSDimitry Andricdef : WriteRes<WriteBEXT, [SMX60_IEU]>; 114*700637cbSDimitry Andricdef : WriteRes<WriteBEXTI, [SMX60_IEU]>; 115*700637cbSDimitry Andric 116*700637cbSDimitry Andric// Memory/Atomic memory 117*700637cbSDimitry Andriclet Latency = 4 in { 118*700637cbSDimitry Andric def : WriteRes<WriteSTB, [SMX60_LS]>; 119*700637cbSDimitry Andric def : WriteRes<WriteSTH, [SMX60_LS]>; 120*700637cbSDimitry Andric def : WriteRes<WriteSTW, [SMX60_LS]>; 121*700637cbSDimitry Andric def : WriteRes<WriteSTD, [SMX60_LS]>; 122*700637cbSDimitry Andric def : WriteRes<WriteFST16, [SMX60_LS]>; 123*700637cbSDimitry Andric def : WriteRes<WriteFST32, [SMX60_LS]>; 124*700637cbSDimitry Andric def : WriteRes<WriteFST64, [SMX60_LS]>; 125*700637cbSDimitry Andric 126*700637cbSDimitry Andric def : WriteRes<WriteLDB, [SMX60_LS]>; 127*700637cbSDimitry Andric def : WriteRes<WriteLDH, [SMX60_LS]>; 128*700637cbSDimitry Andric def : WriteRes<WriteLDW, [SMX60_LS]>; 129*700637cbSDimitry Andric def : WriteRes<WriteLDD, [SMX60_LS]>; 130*700637cbSDimitry Andric def : WriteRes<WriteFLD16, [SMX60_LS]>; 131*700637cbSDimitry Andric def : WriteRes<WriteFLD32, [SMX60_LS]>; 132*700637cbSDimitry Andric def : WriteRes<WriteFLD64, [SMX60_LS]>; 133*700637cbSDimitry Andric} 134*700637cbSDimitry Andric 135*700637cbSDimitry Andric// Atomics 136*700637cbSDimitry Andriclet Latency = 8 in { 137*700637cbSDimitry Andric def : WriteRes<WriteAtomicSTW, [SMX60_LS]>; 138*700637cbSDimitry Andric def : WriteRes<WriteAtomicSTD, [SMX60_LS]>; 139*700637cbSDimitry Andric def : WriteRes<WriteAtomicLDW, [SMX60_LS]>; 140*700637cbSDimitry Andric def : WriteRes<WriteAtomicLDD, [SMX60_LS]>; 141*700637cbSDimitry Andric} 142*700637cbSDimitry Andric 143*700637cbSDimitry Andriclet Latency = 12 in { 144*700637cbSDimitry Andric def : WriteRes<WriteAtomicW, [SMX60_LS]>; 145*700637cbSDimitry Andric def : WriteRes<WriteAtomicD, [SMX60_LS]>; 146*700637cbSDimitry Andric} 147*700637cbSDimitry Andric 148*700637cbSDimitry Andric// Floating point units Half precision 149*700637cbSDimitry Andriclet Latency = 4 in { 150*700637cbSDimitry Andric def : WriteRes<WriteFAdd16, [SMX60_FP]>; 151*700637cbSDimitry Andric def : WriteRes<WriteFMul16, [SMX60_FP]>; 152*700637cbSDimitry Andric def : WriteRes<WriteFSGNJ16, [SMX60_FP]>; 153*700637cbSDimitry Andric def : WriteRes<WriteFMinMax16, [SMX60_FP]>; 154*700637cbSDimitry Andric} 155*700637cbSDimitry Andricdef : WriteRes<WriteFMA16, [SMX60_FP]> { let Latency = 5; } 156*700637cbSDimitry Andric 157*700637cbSDimitry Andriclet Latency = 12, ReleaseAtCycles = [12] in { 158*700637cbSDimitry Andric def : WriteRes<WriteFDiv16, [SMX60_FP]>; 159*700637cbSDimitry Andric def : WriteRes<WriteFSqrt16, [SMX60_FP]>; 160*700637cbSDimitry Andric} 161*700637cbSDimitry Andric 162*700637cbSDimitry Andric// Single precision 163*700637cbSDimitry Andriclet Latency = 4 in { 164*700637cbSDimitry Andric def : WriteRes<WriteFAdd32, [SMX60_FP]>; 165*700637cbSDimitry Andric def : WriteRes<WriteFMul32, [SMX60_FP]>; 166*700637cbSDimitry Andric def : WriteRes<WriteFSGNJ32, [SMX60_FP]>; 167*700637cbSDimitry Andric def : WriteRes<WriteFMinMax32, [SMX60_FP]>; 168*700637cbSDimitry Andric} 169*700637cbSDimitry Andricdef : WriteRes<WriteFMA32, [SMX60_FP]> { let Latency = 5; } 170*700637cbSDimitry Andric 171*700637cbSDimitry Andriclet Latency = 15, ReleaseAtCycles = [15] in { 172*700637cbSDimitry Andric def : WriteRes<WriteFDiv32, [SMX60_FP]>; 173*700637cbSDimitry Andric def : WriteRes<WriteFSqrt32, [SMX60_FP]>; 174*700637cbSDimitry Andric} 175*700637cbSDimitry Andric 176*700637cbSDimitry Andric// Double precision 177*700637cbSDimitry Andriclet Latency = 5 in { 178*700637cbSDimitry Andric def : WriteRes<WriteFAdd64, [SMX60_FP]>; 179*700637cbSDimitry Andric def : WriteRes<WriteFMul64, [SMX60_FP]>; 180*700637cbSDimitry Andric def : WriteRes<WriteFSGNJ64, [SMX60_FP]>; 181*700637cbSDimitry Andric} 182*700637cbSDimitry Andricdef : WriteRes<WriteFMinMax64, [SMX60_FP]> { let Latency = 4; } 183*700637cbSDimitry Andricdef : WriteRes<WriteFMA64, [SMX60_FP]> { let Latency = 6; } 184*700637cbSDimitry Andric 185*700637cbSDimitry Andriclet Latency = 22, ReleaseAtCycles = [22] in { 186*700637cbSDimitry Andric def : WriteRes<WriteFDiv64, [SMX60_FP]>; 187*700637cbSDimitry Andric def : WriteRes<WriteFSqrt64, [SMX60_FP]>; 188*700637cbSDimitry Andric} 189*700637cbSDimitry Andric 190*700637cbSDimitry Andric// Conversions 191*700637cbSDimitry Andriclet Latency = 6 in { 192*700637cbSDimitry Andric def : WriteRes<WriteFCvtF16ToI32, [SMX60_IEU]>; 193*700637cbSDimitry Andric def : WriteRes<WriteFCvtF32ToI32, [SMX60_IEU]>; 194*700637cbSDimitry Andric def : WriteRes<WriteFCvtF32ToI64, [SMX60_IEU]>; 195*700637cbSDimitry Andric def : WriteRes<WriteFCvtF64ToI64, [SMX60_IEU]>; 196*700637cbSDimitry Andric def : WriteRes<WriteFCvtF64ToI32, [SMX60_IEU]>; 197*700637cbSDimitry Andric def : WriteRes<WriteFCvtF16ToI64, [SMX60_IEU]>; 198*700637cbSDimitry Andric} 199*700637cbSDimitry Andric 200*700637cbSDimitry Andriclet Latency = 4 in { 201*700637cbSDimitry Andric def : WriteRes<WriteFCvtI32ToF16, [SMX60_IEU]>; 202*700637cbSDimitry Andric def : WriteRes<WriteFCvtI32ToF32, [SMX60_IEU]>; 203*700637cbSDimitry Andric def : WriteRes<WriteFCvtI32ToF64, [SMX60_IEU]>; 204*700637cbSDimitry Andric def : WriteRes<WriteFCvtI64ToF16, [SMX60_IEU]>; 205*700637cbSDimitry Andric def : WriteRes<WriteFCvtI64ToF32, [SMX60_IEU]>; 206*700637cbSDimitry Andric def : WriteRes<WriteFCvtI64ToF64, [SMX60_IEU]>; 207*700637cbSDimitry Andric def : WriteRes<WriteFCvtF16ToF32, [SMX60_FP]>; 208*700637cbSDimitry Andric def : WriteRes<WriteFCvtF16ToF64, [SMX60_FP]>; 209*700637cbSDimitry Andric def : WriteRes<WriteFCvtF32ToF16, [SMX60_FP]>; 210*700637cbSDimitry Andric def : WriteRes<WriteFCvtF32ToF64, [SMX60_FP]>; 211*700637cbSDimitry Andric def : WriteRes<WriteFCvtF64ToF16, [SMX60_FP]>; 212*700637cbSDimitry Andric def : WriteRes<WriteFCvtF64ToF32, [SMX60_FP]>; 213*700637cbSDimitry Andric} 214*700637cbSDimitry Andric 215*700637cbSDimitry Andriclet Latency = 6 in { 216*700637cbSDimitry Andric def : WriteRes<WriteFClass16, [SMX60_FP]>; 217*700637cbSDimitry Andric def : WriteRes<WriteFClass32, [SMX60_FP]>; 218*700637cbSDimitry Andric def : WriteRes<WriteFClass64, [SMX60_FP]>; 219*700637cbSDimitry Andric 220*700637cbSDimitry Andric def : WriteRes<WriteFCmp16, [SMX60_FP]>; 221*700637cbSDimitry Andric def : WriteRes<WriteFCmp32, [SMX60_FP]>; 222*700637cbSDimitry Andric def : WriteRes<WriteFCmp64, [SMX60_FP]>; 223*700637cbSDimitry Andric 224*700637cbSDimitry Andric def : WriteRes<WriteFMovF32ToI32, [SMX60_IEU]>; 225*700637cbSDimitry Andric def : WriteRes<WriteFMovF16ToI16, [SMX60_IEU]>; 226*700637cbSDimitry Andric} 227*700637cbSDimitry Andric 228*700637cbSDimitry Andriclet Latency = 4 in { 229*700637cbSDimitry Andric def : WriteRes<WriteFMovI16ToF16, [SMX60_IEU]>; 230*700637cbSDimitry Andric def : WriteRes<WriteFMovF64ToI64, [SMX60_IEU]>; 231*700637cbSDimitry Andric def : WriteRes<WriteFMovI64ToF64, [SMX60_IEU]>; 232*700637cbSDimitry Andric def : WriteRes<WriteFMovI32ToF32, [SMX60_IEU]>; 233*700637cbSDimitry Andric} 234*700637cbSDimitry Andric 235*700637cbSDimitry Andric// Others 236*700637cbSDimitry Andricdef : WriteRes<WriteCSR, [SMX60_IEU]>; 237*700637cbSDimitry Andricdef : WriteRes<WriteNop, [SMX60_IEU]>; 238*700637cbSDimitry Andric 239*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 240*700637cbSDimitry Andric// Bypass and advance 241*700637cbSDimitry Andricdef : ReadAdvance<ReadJmp, 0>; 242*700637cbSDimitry Andricdef : ReadAdvance<ReadJalr, 0>; 243*700637cbSDimitry Andricdef : ReadAdvance<ReadCSR, 0>; 244*700637cbSDimitry Andricdef : ReadAdvance<ReadStoreData, 0>; 245*700637cbSDimitry Andricdef : ReadAdvance<ReadMemBase, 0>; 246*700637cbSDimitry Andricdef : ReadAdvance<ReadIALU, 0>; 247*700637cbSDimitry Andricdef : ReadAdvance<ReadIALU32, 0>; 248*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftImm, 0>; 249*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftImm32, 0>; 250*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftReg, 0>; 251*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftReg32, 0>; 252*700637cbSDimitry Andricdef : ReadAdvance<ReadIDiv, 0>; 253*700637cbSDimitry Andricdef : ReadAdvance<ReadIDiv32, 0>; 254*700637cbSDimitry Andricdef : ReadAdvance<ReadIRem, 0>; 255*700637cbSDimitry Andricdef : ReadAdvance<ReadIRem32, 0>; 256*700637cbSDimitry Andricdef : ReadAdvance<ReadIMul, 0>; 257*700637cbSDimitry Andricdef : ReadAdvance<ReadIMul32, 0>; 258*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicWA, 0>; 259*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicWD, 0>; 260*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicDA, 0>; 261*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicDD, 0>; 262*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicLDW, 0>; 263*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicLDD, 0>; 264*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicSTW, 0>; 265*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicSTD, 0>; 266*700637cbSDimitry Andricdef : ReadAdvance<ReadFStoreData, 0>; 267*700637cbSDimitry Andricdef : ReadAdvance<ReadFMemBase, 0>; 268*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd16, 0>; 269*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd32, 0>; 270*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd64, 0>; 271*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul16, 0>; 272*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA16, 0>; 273*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA16Addend, 0>; 274*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul32, 0>; 275*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul64, 0>; 276*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA32, 0>; 277*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA32Addend, 0>; 278*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA64, 0>; 279*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA64Addend, 0>; 280*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv16, 0>; 281*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv32, 0>; 282*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv64, 0>; 283*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt16, 0>; 284*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt32, 0>; 285*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt64, 0>; 286*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp16, 0>; 287*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp32, 0>; 288*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp64, 0>; 289*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ16, 0>; 290*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ32, 0>; 291*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ64, 0>; 292*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax16, 0>; 293*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax32, 0>; 294*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax64, 0>; 295*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI32, 0>; 296*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI64, 0>; 297*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI32, 0>; 298*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI64, 0>; 299*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI32, 0>; 300*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI64, 0>; 301*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF16, 0>; 302*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF32, 0>; 303*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF64, 0>; 304*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF16, 0>; 305*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF32, 0>; 306*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF64, 0>; 307*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF64, 0>; 308*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF32, 0>; 309*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF32, 0>; 310*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF16, 0>; 311*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF64, 0>; 312*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF16, 0>; 313*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF16ToI16, 0>; 314*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI16ToF16, 0>; 315*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF32ToI32, 0>; 316*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI32ToF32, 0>; 317*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF64ToI64, 0>; 318*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI64ToF64, 0>; 319*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass16, 0>; 320*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass32, 0>; 321*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass64, 0>; 322*700637cbSDimitry Andric 323*700637cbSDimitry Andric// Bitmanip 324*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateImm, 0>; 325*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateImm32, 0>; 326*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateReg, 0>; 327*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateReg32, 0>; 328*700637cbSDimitry Andricdef : ReadAdvance<ReadCLZ, 0>; 329*700637cbSDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>; 330*700637cbSDimitry Andricdef : ReadAdvance<ReadCTZ, 0>; 331*700637cbSDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>; 332*700637cbSDimitry Andricdef : ReadAdvance<ReadCPOP, 0>; 333*700637cbSDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>; 334*700637cbSDimitry Andricdef : ReadAdvance<ReadORCB, 0>; 335*700637cbSDimitry Andricdef : ReadAdvance<ReadIMinMax, 0>; 336*700637cbSDimitry Andricdef : ReadAdvance<ReadREV8, 0>; 337*700637cbSDimitry Andricdef : ReadAdvance<ReadSHXADD, 0>; 338*700637cbSDimitry Andricdef : ReadAdvance<ReadSHXADD32, 0>; 339*700637cbSDimitry Andricdef : ReadAdvance<ReadCLMUL, 0>; 340*700637cbSDimitry Andric// Single-bit instructions 341*700637cbSDimitry Andricdef : ReadAdvance<ReadSingleBit, 0>; 342*700637cbSDimitry Andricdef : ReadAdvance<ReadSingleBitImm, 0>; 343*700637cbSDimitry Andric 344*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 345*700637cbSDimitry Andric// Unsupported extensions 346*700637cbSDimitry Andricdefm : UnsupportedSchedQ; 347*700637cbSDimitry Andricdefm : UnsupportedSchedV; 348*700637cbSDimitry Andricdefm : UnsupportedSchedZabha; 349*700637cbSDimitry Andricdefm : UnsupportedSchedZbkb; 350*700637cbSDimitry Andricdefm : UnsupportedSchedZbkx; 351*700637cbSDimitry Andricdefm : UnsupportedSchedZfa; 352*700637cbSDimitry Andricdefm : UnsupportedSchedZvk; 353*700637cbSDimitry Andricdefm : UnsupportedSchedSFB; 354*700637cbSDimitry Andricdefm : UnsupportedSchedXsf; 355*700637cbSDimitry Andric} 356