1*700637cbSDimitry Andric//==- RISCVSchedSiFiveP500.td - SiFiveP500 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 Andricdef SiFiveP500Model : SchedMachineModel { 12*700637cbSDimitry Andric let IssueWidth = 3; // 3 micro-ops are dispatched per cycle. 13*700637cbSDimitry Andric let MicroOpBufferSize = 96; // Max micro-ops that can be buffered. 14*700637cbSDimitry Andric let LoadLatency = 4; // Cycles for loads to access the cache. 15*700637cbSDimitry Andric let MispredictPenalty = 9; // Extra cycles for a mispredicted branch. 16*700637cbSDimitry Andric let CompleteModel = false; 17*700637cbSDimitry Andric} 18*700637cbSDimitry Andric 19*700637cbSDimitry Andric// The SiFiveP500 microarchitecure has 7 pipelines: 20*700637cbSDimitry Andric// Three pipelines for integer operations. 21*700637cbSDimitry Andric// Two pipelines for FPU operations. 22*700637cbSDimitry Andric// One pipeline for Load operations. 23*700637cbSDimitry Andric// One pipeline for Store operations. 24*700637cbSDimitry Andriclet SchedModel = SiFiveP500Model in { 25*700637cbSDimitry Andric 26*700637cbSDimitry Andricdef SiFiveP500IEXQ0 : ProcResource<1>; 27*700637cbSDimitry Andricdef SiFiveP500IEXQ1 : ProcResource<1>; 28*700637cbSDimitry Andricdef SiFiveP500IEXQ2 : ProcResource<1>; 29*700637cbSDimitry Andricdef SiFiveP500FEXQ0 : ProcResource<1>; 30*700637cbSDimitry Andricdef SiFiveP500FEXQ1 : ProcResource<1>; 31*700637cbSDimitry Andricdef SiFiveP500Load : ProcResource<1>; 32*700637cbSDimitry Andricdef SiFiveP500Store : ProcResource<1>; 33*700637cbSDimitry Andric 34*700637cbSDimitry Andricdef SiFiveP500IntArith : ProcResGroup<[SiFiveP500IEXQ0, SiFiveP500IEXQ1, SiFiveP500IEXQ2]>; 35*700637cbSDimitry Andricdefvar SiFiveP500Branch = SiFiveP500IEXQ0; 36*700637cbSDimitry Andricdefvar SiFiveP500SYS = SiFiveP500IEXQ1; 37*700637cbSDimitry Andricdefvar SiFiveP500CMOV = SiFiveP500IEXQ1; 38*700637cbSDimitry Andricdefvar SiFiveP500MulI2F = SiFiveP500IEXQ2; 39*700637cbSDimitry Andricdef SiFiveP500Div : ProcResource<1>; 40*700637cbSDimitry Andric 41*700637cbSDimitry Andricdef SiFiveP500FloatArith : ProcResGroup<[SiFiveP500FEXQ0, SiFiveP500FEXQ1]>; 42*700637cbSDimitry Andricdefvar SiFiveP500F2I = SiFiveP500FEXQ0; 43*700637cbSDimitry Andricdef SiFiveP500FloatDiv : ProcResource<1>; 44*700637cbSDimitry Andric 45*700637cbSDimitry Andriclet Latency = 1 in { 46*700637cbSDimitry Andric// Integer arithmetic and logic 47*700637cbSDimitry Andricdef : WriteRes<WriteIALU, [SiFiveP500IntArith]>; 48*700637cbSDimitry Andricdef : WriteRes<WriteIALU32, [SiFiveP500IntArith]>; 49*700637cbSDimitry Andricdef : WriteRes<WriteShiftImm, [SiFiveP500IntArith]>; 50*700637cbSDimitry Andricdef : WriteRes<WriteShiftImm32, [SiFiveP500IntArith]>; 51*700637cbSDimitry Andricdef : WriteRes<WriteShiftReg, [SiFiveP500IntArith]>; 52*700637cbSDimitry Andricdef : WriteRes<WriteShiftReg32, [SiFiveP500IntArith]>; 53*700637cbSDimitry Andric// Branching 54*700637cbSDimitry Andricdef : WriteRes<WriteJmp, [SiFiveP500Branch]>; 55*700637cbSDimitry Andricdef : WriteRes<WriteJal, [SiFiveP500Branch]>; 56*700637cbSDimitry Andricdef : WriteRes<WriteJalr, [SiFiveP500Branch]>; 57*700637cbSDimitry Andric} 58*700637cbSDimitry Andric 59*700637cbSDimitry Andric// CMOV 60*700637cbSDimitry Andricdef P500WriteCMOV : SchedWriteRes<[SiFiveP500Branch, SiFiveP500CMOV]> { 61*700637cbSDimitry Andric let Latency = 2; 62*700637cbSDimitry Andric let NumMicroOps = 2; 63*700637cbSDimitry Andric} 64*700637cbSDimitry Andricdef : InstRW<[P500WriteCMOV], (instrs PseudoCCMOVGPRNoX0)>; 65*700637cbSDimitry Andric 66*700637cbSDimitry Andriclet Latency = 3 in { 67*700637cbSDimitry Andric// Integer multiplication 68*700637cbSDimitry Andricdef : WriteRes<WriteIMul, [SiFiveP500MulI2F]>; 69*700637cbSDimitry Andricdef : WriteRes<WriteIMul32, [SiFiveP500MulI2F]>; 70*700637cbSDimitry Andric// cpop[w] look exactly like multiply. 71*700637cbSDimitry Andricdef : WriteRes<WriteCPOP, [SiFiveP500MulI2F]>; 72*700637cbSDimitry Andricdef : WriteRes<WriteCPOP32, [SiFiveP500MulI2F]>; 73*700637cbSDimitry Andric} 74*700637cbSDimitry Andric 75*700637cbSDimitry Andric// Integer division 76*700637cbSDimitry Andricdef : WriteRes<WriteIDiv, [SiFiveP500MulI2F, SiFiveP500Div]> { 77*700637cbSDimitry Andric let Latency = 35; 78*700637cbSDimitry Andric let ReleaseAtCycles = [1, 34]; 79*700637cbSDimitry Andric} 80*700637cbSDimitry Andricdef : WriteRes<WriteIDiv32, [SiFiveP500MulI2F, SiFiveP500Div]> { 81*700637cbSDimitry Andric let Latency = 20; 82*700637cbSDimitry Andric let ReleaseAtCycles = [1, 19]; 83*700637cbSDimitry Andric} 84*700637cbSDimitry Andric 85*700637cbSDimitry Andric// Integer remainder 86*700637cbSDimitry Andricdef : WriteRes<WriteIRem, [SiFiveP500MulI2F, SiFiveP500Div]> { 87*700637cbSDimitry Andric let Latency = 35; 88*700637cbSDimitry Andric let ReleaseAtCycles = [1, 34]; 89*700637cbSDimitry Andric} 90*700637cbSDimitry Andricdef : WriteRes<WriteIRem32, [SiFiveP500MulI2F, SiFiveP500Div]> { 91*700637cbSDimitry Andric let Latency = 20; 92*700637cbSDimitry Andric let ReleaseAtCycles = [1, 19]; 93*700637cbSDimitry Andric} 94*700637cbSDimitry Andric 95*700637cbSDimitry Andriclet Latency = 1 in { 96*700637cbSDimitry Andric// Bitmanip 97*700637cbSDimitry Andricdef : WriteRes<WriteRotateImm, [SiFiveP500IntArith]>; 98*700637cbSDimitry Andricdef : WriteRes<WriteRotateImm32, [SiFiveP500IntArith]>; 99*700637cbSDimitry Andricdef : WriteRes<WriteRotateReg, [SiFiveP500IntArith]>; 100*700637cbSDimitry Andricdef : WriteRes<WriteRotateReg32, [SiFiveP500IntArith]>; 101*700637cbSDimitry Andric 102*700637cbSDimitry Andricdef : WriteRes<WriteCLZ, [SiFiveP500IntArith]>; 103*700637cbSDimitry Andricdef : WriteRes<WriteCLZ32, [SiFiveP500IntArith]>; 104*700637cbSDimitry Andricdef : WriteRes<WriteCTZ, [SiFiveP500IntArith]>; 105*700637cbSDimitry Andricdef : WriteRes<WriteCTZ32, [SiFiveP500IntArith]>; 106*700637cbSDimitry Andric 107*700637cbSDimitry Andricdef : WriteRes<WriteORCB, [SiFiveP500IntArith]>; 108*700637cbSDimitry Andricdef : WriteRes<WriteIMinMax, [SiFiveP500IntArith]>; 109*700637cbSDimitry Andric 110*700637cbSDimitry Andricdef : WriteRes<WriteREV8, [SiFiveP500IntArith]>; 111*700637cbSDimitry Andric 112*700637cbSDimitry Andricdef : WriteRes<WriteSHXADD, [SiFiveP500IntArith]>; 113*700637cbSDimitry Andricdef : WriteRes<WriteSHXADD32, [SiFiveP500IntArith]>; 114*700637cbSDimitry Andric} 115*700637cbSDimitry Andric 116*700637cbSDimitry Andric// Memory 117*700637cbSDimitry Andriclet Latency = 1 in { 118*700637cbSDimitry Andricdef : WriteRes<WriteSTB, [SiFiveP500Store]>; 119*700637cbSDimitry Andricdef : WriteRes<WriteSTH, [SiFiveP500Store]>; 120*700637cbSDimitry Andricdef : WriteRes<WriteSTW, [SiFiveP500Store]>; 121*700637cbSDimitry Andricdef : WriteRes<WriteSTD, [SiFiveP500Store]>; 122*700637cbSDimitry Andricdef : WriteRes<WriteFST16, [SiFiveP500Store]>; 123*700637cbSDimitry Andricdef : WriteRes<WriteFST32, [SiFiveP500Store]>; 124*700637cbSDimitry Andricdef : WriteRes<WriteFST64, [SiFiveP500Store]>; 125*700637cbSDimitry Andric} 126*700637cbSDimitry Andriclet Latency = 4 in { 127*700637cbSDimitry Andricdef : WriteRes<WriteLDB, [SiFiveP500Load]>; 128*700637cbSDimitry Andricdef : WriteRes<WriteLDH, [SiFiveP500Load]>; 129*700637cbSDimitry Andric} 130*700637cbSDimitry Andriclet Latency = 4 in { 131*700637cbSDimitry Andricdef : WriteRes<WriteLDW, [SiFiveP500Load]>; 132*700637cbSDimitry Andricdef : WriteRes<WriteLDD, [SiFiveP500Load]>; 133*700637cbSDimitry Andric} 134*700637cbSDimitry Andric 135*700637cbSDimitry Andriclet Latency = 5 in { 136*700637cbSDimitry Andricdef : WriteRes<WriteFLD16, [SiFiveP500Load]>; 137*700637cbSDimitry Andricdef : WriteRes<WriteFLD32, [SiFiveP500Load]>; 138*700637cbSDimitry Andricdef : WriteRes<WriteFLD64, [SiFiveP500Load]>; 139*700637cbSDimitry Andric} 140*700637cbSDimitry Andric 141*700637cbSDimitry Andric// Atomic memory 142*700637cbSDimitry Andriclet Latency = 3 in { 143*700637cbSDimitry Andricdef : WriteRes<WriteAtomicSTW, [SiFiveP500Store]>; 144*700637cbSDimitry Andricdef : WriteRes<WriteAtomicSTD, [SiFiveP500Store]>; 145*700637cbSDimitry Andricdef : WriteRes<WriteAtomicW, [SiFiveP500Load]>; 146*700637cbSDimitry Andricdef : WriteRes<WriteAtomicD, [SiFiveP500Load]>; 147*700637cbSDimitry Andricdef : WriteRes<WriteAtomicLDW, [SiFiveP500Load]>; 148*700637cbSDimitry Andricdef : WriteRes<WriteAtomicLDD, [SiFiveP500Load]>; 149*700637cbSDimitry Andric} 150*700637cbSDimitry Andric 151*700637cbSDimitry Andric// Floating point 152*700637cbSDimitry Andriclet Latency = 4 in { 153*700637cbSDimitry Andricdef : WriteRes<WriteFAdd16, [SiFiveP500FloatArith]>; 154*700637cbSDimitry Andricdef : WriteRes<WriteFAdd32, [SiFiveP500FloatArith]>; 155*700637cbSDimitry Andricdef : WriteRes<WriteFAdd64, [SiFiveP500FloatArith]>; 156*700637cbSDimitry Andric 157*700637cbSDimitry Andricdef : WriteRes<WriteFMul16, [SiFiveP500FloatArith]>; 158*700637cbSDimitry Andricdef : WriteRes<WriteFMul32, [SiFiveP500FloatArith]>; 159*700637cbSDimitry Andricdef : WriteRes<WriteFMul64, [SiFiveP500FloatArith]>; 160*700637cbSDimitry Andric 161*700637cbSDimitry Andricdef : WriteRes<WriteFMA16, [SiFiveP500FloatArith]>; 162*700637cbSDimitry Andricdef : WriteRes<WriteFMA32, [SiFiveP500FloatArith]>; 163*700637cbSDimitry Andricdef : WriteRes<WriteFMA64, [SiFiveP500FloatArith]>; 164*700637cbSDimitry Andric} 165*700637cbSDimitry Andric 166*700637cbSDimitry Andriclet Latency = 2 in { 167*700637cbSDimitry Andricdef : WriteRes<WriteFSGNJ16, [SiFiveP500FloatArith]>; 168*700637cbSDimitry Andricdef : WriteRes<WriteFSGNJ32, [SiFiveP500FloatArith]>; 169*700637cbSDimitry Andricdef : WriteRes<WriteFSGNJ64, [SiFiveP500FloatArith]>; 170*700637cbSDimitry Andric 171*700637cbSDimitry Andricdef : WriteRes<WriteFMinMax16, [SiFiveP500FloatArith]>; 172*700637cbSDimitry Andricdef : WriteRes<WriteFMinMax32, [SiFiveP500FloatArith]>; 173*700637cbSDimitry Andricdef : WriteRes<WriteFMinMax64, [SiFiveP500FloatArith]>; 174*700637cbSDimitry Andric} 175*700637cbSDimitry Andric 176*700637cbSDimitry Andric// Half precision. 177*700637cbSDimitry Andricdef : WriteRes<WriteFDiv16, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 178*700637cbSDimitry Andric let Latency = 19; 179*700637cbSDimitry Andric let ReleaseAtCycles = [1, 18]; 180*700637cbSDimitry Andric} 181*700637cbSDimitry Andricdef : WriteRes<WriteFSqrt16, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 182*700637cbSDimitry Andric let Latency = 18; 183*700637cbSDimitry Andric let ReleaseAtCycles = [1, 17]; 184*700637cbSDimitry Andric} 185*700637cbSDimitry Andric 186*700637cbSDimitry Andric// Single precision. 187*700637cbSDimitry Andricdef : WriteRes<WriteFDiv32, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 188*700637cbSDimitry Andric let Latency = 19; 189*700637cbSDimitry Andric let ReleaseAtCycles = [1, 18]; 190*700637cbSDimitry Andric} 191*700637cbSDimitry Andricdef : WriteRes<WriteFSqrt32, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 192*700637cbSDimitry Andric let Latency = 18; 193*700637cbSDimitry Andric let ReleaseAtCycles = [1, 17]; 194*700637cbSDimitry Andric} 195*700637cbSDimitry Andric 196*700637cbSDimitry Andric// Double precision 197*700637cbSDimitry Andricdef : WriteRes<WriteFDiv64, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 198*700637cbSDimitry Andric let Latency = 33; 199*700637cbSDimitry Andric let ReleaseAtCycles = [1, 32]; 200*700637cbSDimitry Andric} 201*700637cbSDimitry Andricdef : WriteRes<WriteFSqrt64, [SiFiveP500FEXQ1, SiFiveP500FloatDiv]> { 202*700637cbSDimitry Andric let Latency = 33; 203*700637cbSDimitry Andric let ReleaseAtCycles = [1, 32]; 204*700637cbSDimitry Andric} 205*700637cbSDimitry Andric 206*700637cbSDimitry Andric// Conversions 207*700637cbSDimitry Andriclet Latency = 2 in { 208*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI32ToF16, [SiFiveP500MulI2F]>; 209*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI32ToF32, [SiFiveP500MulI2F]>; 210*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI32ToF64, [SiFiveP500MulI2F]>; 211*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI64ToF16, [SiFiveP500MulI2F]>; 212*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI64ToF32, [SiFiveP500MulI2F]>; 213*700637cbSDimitry Andricdef : WriteRes<WriteFCvtI64ToF64, [SiFiveP500MulI2F]>; 214*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF16ToI32, [SiFiveP500F2I]>; 215*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF16ToI64, [SiFiveP500F2I]>; 216*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF16ToF32, [SiFiveP500FloatArith]>; 217*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF16ToF64, [SiFiveP500FloatArith]>; 218*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF32ToI32, [SiFiveP500F2I]>; 219*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF32ToI64, [SiFiveP500F2I]>; 220*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF32ToF16, [SiFiveP500FloatArith]>; 221*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF32ToF64, [SiFiveP500FloatArith]>; 222*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF64ToI32, [SiFiveP500F2I]>; 223*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF64ToI64, [SiFiveP500F2I]>; 224*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF64ToF16, [SiFiveP500FloatArith]>; 225*700637cbSDimitry Andricdef : WriteRes<WriteFCvtF64ToF32, [SiFiveP500FloatArith]>; 226*700637cbSDimitry Andric 227*700637cbSDimitry Andricdef : WriteRes<WriteFClass16, [SiFiveP500F2I]>; 228*700637cbSDimitry Andricdef : WriteRes<WriteFClass32, [SiFiveP500F2I]>; 229*700637cbSDimitry Andricdef : WriteRes<WriteFClass64, [SiFiveP500F2I]>; 230*700637cbSDimitry Andricdef : WriteRes<WriteFCmp16, [SiFiveP500F2I]>; 231*700637cbSDimitry Andricdef : WriteRes<WriteFCmp32, [SiFiveP500F2I]>; 232*700637cbSDimitry Andricdef : WriteRes<WriteFCmp64, [SiFiveP500F2I]>; 233*700637cbSDimitry Andricdef : WriteRes<WriteFMovI16ToF16, [SiFiveP500MulI2F]>; 234*700637cbSDimitry Andricdef : WriteRes<WriteFMovF16ToI16, [SiFiveP500F2I]>; 235*700637cbSDimitry Andricdef : WriteRes<WriteFMovI32ToF32, [SiFiveP500MulI2F]>; 236*700637cbSDimitry Andricdef : WriteRes<WriteFMovF32ToI32, [SiFiveP500F2I]>; 237*700637cbSDimitry Andricdef : WriteRes<WriteFMovI64ToF64, [SiFiveP500MulI2F]>; 238*700637cbSDimitry Andricdef : WriteRes<WriteFMovF64ToI64, [SiFiveP500F2I]>; 239*700637cbSDimitry Andric} 240*700637cbSDimitry Andric 241*700637cbSDimitry Andric// Others 242*700637cbSDimitry Andricdef : WriteRes<WriteCSR, [SiFiveP500SYS]>; 243*700637cbSDimitry Andricdef : WriteRes<WriteNop, []>; 244*700637cbSDimitry Andric 245*700637cbSDimitry Andric// FIXME: This could be better modeled by looking at the regclasses of the operands. 246*700637cbSDimitry Andricdef : InstRW<[WriteIALU, ReadIALU], (instrs COPY)>; 247*700637cbSDimitry Andric 248*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 249*700637cbSDimitry Andric// Bypass and advance 250*700637cbSDimitry Andricdef : ReadAdvance<ReadJmp, 0>; 251*700637cbSDimitry Andricdef : ReadAdvance<ReadJalr, 0>; 252*700637cbSDimitry Andricdef : ReadAdvance<ReadCSR, 0>; 253*700637cbSDimitry Andricdef : ReadAdvance<ReadStoreData, 0>; 254*700637cbSDimitry Andricdef : ReadAdvance<ReadMemBase, 0>; 255*700637cbSDimitry Andricdef : ReadAdvance<ReadIALU, 0>; 256*700637cbSDimitry Andricdef : ReadAdvance<ReadIALU32, 0>; 257*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftImm, 0>; 258*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftImm32, 0>; 259*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftReg, 0>; 260*700637cbSDimitry Andricdef : ReadAdvance<ReadShiftReg32, 0>; 261*700637cbSDimitry Andricdef : ReadAdvance<ReadIDiv, 0>; 262*700637cbSDimitry Andricdef : ReadAdvance<ReadIDiv32, 0>; 263*700637cbSDimitry Andricdef : ReadAdvance<ReadIRem, 0>; 264*700637cbSDimitry Andricdef : ReadAdvance<ReadIRem32, 0>; 265*700637cbSDimitry Andricdef : ReadAdvance<ReadIMul, 0>; 266*700637cbSDimitry Andricdef : ReadAdvance<ReadIMul32, 0>; 267*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicWA, 0>; 268*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicWD, 0>; 269*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicDA, 0>; 270*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicDD, 0>; 271*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicLDW, 0>; 272*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicLDD, 0>; 273*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicSTW, 0>; 274*700637cbSDimitry Andricdef : ReadAdvance<ReadAtomicSTD, 0>; 275*700637cbSDimitry Andricdef : ReadAdvance<ReadFStoreData, 0>; 276*700637cbSDimitry Andricdef : ReadAdvance<ReadFMemBase, 0>; 277*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd16, 0>; 278*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd32, 0>; 279*700637cbSDimitry Andricdef : ReadAdvance<ReadFAdd64, 0>; 280*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul16, 0>; 281*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA16, 0>; 282*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA16Addend, 0>; 283*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul32, 0>; 284*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA32, 0>; 285*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA32Addend, 0>; 286*700637cbSDimitry Andricdef : ReadAdvance<ReadFMul64, 0>; 287*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA64, 0>; 288*700637cbSDimitry Andricdef : ReadAdvance<ReadFMA64Addend, 0>; 289*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv16, 0>; 290*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv32, 0>; 291*700637cbSDimitry Andricdef : ReadAdvance<ReadFDiv64, 0>; 292*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt16, 0>; 293*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt32, 0>; 294*700637cbSDimitry Andricdef : ReadAdvance<ReadFSqrt64, 0>; 295*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp16, 0>; 296*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp32, 0>; 297*700637cbSDimitry Andricdef : ReadAdvance<ReadFCmp64, 0>; 298*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ16, 0>; 299*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ32, 0>; 300*700637cbSDimitry Andricdef : ReadAdvance<ReadFSGNJ64, 0>; 301*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax16, 0>; 302*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax32, 0>; 303*700637cbSDimitry Andricdef : ReadAdvance<ReadFMinMax64, 0>; 304*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI32, 0>; 305*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI64, 0>; 306*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI32, 0>; 307*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI64, 0>; 308*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI32, 0>; 309*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI64, 0>; 310*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF16, 0>; 311*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF32, 0>; 312*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF64, 0>; 313*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF16, 0>; 314*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF32, 0>; 315*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF64, 0>; 316*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF64, 0>; 317*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF32, 0>; 318*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF32, 0>; 319*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF16, 0>; 320*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF64, 0>; 321*700637cbSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF16, 0>; 322*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF16ToI16, 0>; 323*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI16ToF16, 0>; 324*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF32ToI32, 0>; 325*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI32ToF32, 0>; 326*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovF64ToI64, 0>; 327*700637cbSDimitry Andricdef : ReadAdvance<ReadFMovI64ToF64, 0>; 328*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass16, 0>; 329*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass32, 0>; 330*700637cbSDimitry Andricdef : ReadAdvance<ReadFClass64, 0>; 331*700637cbSDimitry Andric 332*700637cbSDimitry Andric// Bitmanip 333*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateImm, 0>; 334*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateImm32, 0>; 335*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateReg, 0>; 336*700637cbSDimitry Andricdef : ReadAdvance<ReadRotateReg32, 0>; 337*700637cbSDimitry Andricdef : ReadAdvance<ReadCLZ, 0>; 338*700637cbSDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>; 339*700637cbSDimitry Andricdef : ReadAdvance<ReadCTZ, 0>; 340*700637cbSDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>; 341*700637cbSDimitry Andricdef : ReadAdvance<ReadCPOP, 0>; 342*700637cbSDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>; 343*700637cbSDimitry Andricdef : ReadAdvance<ReadORCB, 0>; 344*700637cbSDimitry Andricdef : ReadAdvance<ReadIMinMax, 0>; 345*700637cbSDimitry Andricdef : ReadAdvance<ReadREV8, 0>; 346*700637cbSDimitry Andricdef : ReadAdvance<ReadSHXADD, 0>; 347*700637cbSDimitry Andricdef : ReadAdvance<ReadSHXADD32, 0>; 348*700637cbSDimitry Andric 349*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 350*700637cbSDimitry Andric// Unsupported extensions 351*700637cbSDimitry Andricdefm : UnsupportedSchedQ; 352*700637cbSDimitry Andricdefm : UnsupportedSchedV; 353*700637cbSDimitry Andricdefm : UnsupportedSchedZabha; 354*700637cbSDimitry Andricdefm : UnsupportedSchedZbc; 355*700637cbSDimitry Andricdefm : UnsupportedSchedZbs; 356*700637cbSDimitry Andricdefm : UnsupportedSchedZbkb; 357*700637cbSDimitry Andricdefm : UnsupportedSchedZbkx; 358*700637cbSDimitry Andricdefm : UnsupportedSchedSFB; 359*700637cbSDimitry Andricdefm : UnsupportedSchedZfa; 360*700637cbSDimitry Andricdefm : UnsupportedSchedZvk; 361*700637cbSDimitry Andricdefm : UnsupportedSchedXsf; 362*700637cbSDimitry Andric} 363