1*0fca6ea1SDimitry Andric//===------ RISCVProfiles.td - RISC-V Profiles -------------*- 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 Andricclass RISCVProfile<string name, list<SubtargetFeature> features> 10*0fca6ea1SDimitry Andric : SubtargetFeature<name, "Is" # NAME, "true", 11*0fca6ea1SDimitry Andric "RISC-V " # name # " profile", features> { 12*0fca6ea1SDimitry Andric // Indicates if the profile is not yet ratified, so should be treated as 13*0fca6ea1SDimitry Andric // experimental. 14*0fca6ea1SDimitry Andric bit Experimental = false; 15*0fca6ea1SDimitry Andric} 16*0fca6ea1SDimitry Andricclass RISCVExperimentalProfile<string name, list<SubtargetFeature> features> 17*0fca6ea1SDimitry Andric : RISCVProfile<"experimental-"#name, features> { 18*0fca6ea1SDimitry Andric let Experimental = true; 19*0fca6ea1SDimitry Andric} 20*0fca6ea1SDimitry Andric 21*0fca6ea1SDimitry Andricdefvar RVI20U32Features = [Feature32Bit, FeatureStdExtI]; 22*0fca6ea1SDimitry Andricdefvar RVI20U64Features = [Feature64Bit, FeatureStdExtI]; 23*0fca6ea1SDimitry Andric 24*0fca6ea1SDimitry Andricdefvar RVA20U64Features = [Feature64Bit, 25*0fca6ea1SDimitry Andric FeatureStdExtI, 26*0fca6ea1SDimitry Andric FeatureStdExtM, 27*0fca6ea1SDimitry Andric FeatureStdExtA, 28*0fca6ea1SDimitry Andric FeatureStdExtF, 29*0fca6ea1SDimitry Andric FeatureStdExtD, 30*0fca6ea1SDimitry Andric FeatureStdExtC, 31*0fca6ea1SDimitry Andric FeatureStdExtZicntr, 32*0fca6ea1SDimitry Andric FeatureStdExtZiccif, 33*0fca6ea1SDimitry Andric FeatureStdExtZiccrse, 34*0fca6ea1SDimitry Andric FeatureStdExtZiccamoa, 35*0fca6ea1SDimitry Andric FeatureStdExtZa128rs, 36*0fca6ea1SDimitry Andric FeatureStdExtZicclsm]; 37*0fca6ea1SDimitry Andric 38*0fca6ea1SDimitry Andricdefvar RVA20S64Features = !listconcat(RVA20U64Features, 39*0fca6ea1SDimitry Andric [FeatureStdExtZifencei, 40*0fca6ea1SDimitry Andric FeatureStdExtSvbare, 41*0fca6ea1SDimitry Andric FeatureStdExtSvade, 42*0fca6ea1SDimitry Andric FeatureStdExtSsccptr, 43*0fca6ea1SDimitry Andric FeatureStdExtSstvecd, 44*0fca6ea1SDimitry Andric FeatureStdExtSstvala]); 45*0fca6ea1SDimitry Andric 46*0fca6ea1SDimitry Andricdefvar RVA22U64Features = [Feature64Bit, 47*0fca6ea1SDimitry Andric FeatureStdExtI, 48*0fca6ea1SDimitry Andric FeatureStdExtM, 49*0fca6ea1SDimitry Andric FeatureStdExtA, 50*0fca6ea1SDimitry Andric FeatureStdExtF, 51*0fca6ea1SDimitry Andric FeatureStdExtD, 52*0fca6ea1SDimitry Andric FeatureStdExtC, 53*0fca6ea1SDimitry Andric FeatureStdExtZicntr, 54*0fca6ea1SDimitry Andric FeatureStdExtZiccif, 55*0fca6ea1SDimitry Andric FeatureStdExtZiccrse, 56*0fca6ea1SDimitry Andric FeatureStdExtZiccamoa, 57*0fca6ea1SDimitry Andric FeatureStdExtZicclsm, 58*0fca6ea1SDimitry Andric FeatureStdExtZa64rs, 59*0fca6ea1SDimitry Andric FeatureStdExtZihpm, 60*0fca6ea1SDimitry Andric FeatureStdExtZihintpause, 61*0fca6ea1SDimitry Andric FeatureStdExtZba, 62*0fca6ea1SDimitry Andric FeatureStdExtZbb, 63*0fca6ea1SDimitry Andric FeatureStdExtZbs, 64*0fca6ea1SDimitry Andric FeatureStdExtZic64b, 65*0fca6ea1SDimitry Andric FeatureStdExtZicbom, 66*0fca6ea1SDimitry Andric FeatureStdExtZicbop, 67*0fca6ea1SDimitry Andric FeatureStdExtZicboz, 68*0fca6ea1SDimitry Andric FeatureStdExtZfhmin, 69*0fca6ea1SDimitry Andric FeatureStdExtZkt]; 70*0fca6ea1SDimitry Andric 71*0fca6ea1SDimitry Andricdefvar RVA22S64Features = !listconcat(RVA22U64Features, 72*0fca6ea1SDimitry Andric [FeatureStdExtZifencei, 73*0fca6ea1SDimitry Andric FeatureStdExtSvbare, 74*0fca6ea1SDimitry Andric FeatureStdExtSvade, 75*0fca6ea1SDimitry Andric FeatureStdExtSsccptr, 76*0fca6ea1SDimitry Andric FeatureStdExtSstvecd, 77*0fca6ea1SDimitry Andric FeatureStdExtSstvala, 78*0fca6ea1SDimitry Andric FeatureStdExtSscounterenw, 79*0fca6ea1SDimitry Andric FeatureStdExtSvpbmt, 80*0fca6ea1SDimitry Andric FeatureStdExtSvinval]); 81*0fca6ea1SDimitry Andric 82*0fca6ea1SDimitry Andricdefvar RVA23U64Features = [Feature64Bit, 83*0fca6ea1SDimitry Andric FeatureStdExtI, 84*0fca6ea1SDimitry Andric FeatureStdExtM, 85*0fca6ea1SDimitry Andric FeatureStdExtA, 86*0fca6ea1SDimitry Andric FeatureStdExtF, 87*0fca6ea1SDimitry Andric FeatureStdExtD, 88*0fca6ea1SDimitry Andric FeatureStdExtC, 89*0fca6ea1SDimitry Andric FeatureStdExtZicntr, 90*0fca6ea1SDimitry Andric FeatureStdExtZihpm, 91*0fca6ea1SDimitry Andric FeatureStdExtZiccif, 92*0fca6ea1SDimitry Andric FeatureStdExtZiccrse, 93*0fca6ea1SDimitry Andric FeatureStdExtZiccamoa, 94*0fca6ea1SDimitry Andric FeatureStdExtZicclsm, 95*0fca6ea1SDimitry Andric FeatureStdExtZa64rs, 96*0fca6ea1SDimitry Andric FeatureStdExtZihintpause, 97*0fca6ea1SDimitry Andric FeatureStdExtZba, 98*0fca6ea1SDimitry Andric FeatureStdExtZbb, 99*0fca6ea1SDimitry Andric FeatureStdExtZbs, 100*0fca6ea1SDimitry Andric FeatureStdExtZic64b, 101*0fca6ea1SDimitry Andric FeatureStdExtZicbom, 102*0fca6ea1SDimitry Andric FeatureStdExtZicbop, 103*0fca6ea1SDimitry Andric FeatureStdExtZicboz, 104*0fca6ea1SDimitry Andric FeatureStdExtZfhmin, 105*0fca6ea1SDimitry Andric FeatureStdExtZkt, 106*0fca6ea1SDimitry Andric FeatureStdExtV, 107*0fca6ea1SDimitry Andric FeatureStdExtZvfhmin, 108*0fca6ea1SDimitry Andric FeatureStdExtZvbb, 109*0fca6ea1SDimitry Andric FeatureStdExtZvkt, 110*0fca6ea1SDimitry Andric FeatureStdExtZihintntl, 111*0fca6ea1SDimitry Andric FeatureStdExtZicond, 112*0fca6ea1SDimitry Andric FeatureStdExtZimop, 113*0fca6ea1SDimitry Andric FeatureStdExtZcmop, 114*0fca6ea1SDimitry Andric FeatureStdExtZcb, 115*0fca6ea1SDimitry Andric FeatureStdExtZfa, 116*0fca6ea1SDimitry Andric FeatureStdExtZawrs]; 117*0fca6ea1SDimitry Andric 118*0fca6ea1SDimitry Andricdefvar RVA23S64Features = !listconcat(RVA23U64Features, 119*0fca6ea1SDimitry Andric [FeatureStdExtZifencei, 120*0fca6ea1SDimitry Andric FeatureStdExtSvbare, 121*0fca6ea1SDimitry Andric FeatureStdExtSvade, 122*0fca6ea1SDimitry Andric FeatureStdExtSsccptr, 123*0fca6ea1SDimitry Andric FeatureStdExtSstvecd, 124*0fca6ea1SDimitry Andric FeatureStdExtSstvala, 125*0fca6ea1SDimitry Andric FeatureStdExtSscounterenw, 126*0fca6ea1SDimitry Andric FeatureStdExtSvpbmt, 127*0fca6ea1SDimitry Andric FeatureStdExtSvinval, 128*0fca6ea1SDimitry Andric FeatureStdExtSvnapot, 129*0fca6ea1SDimitry Andric FeatureStdExtSstc, 130*0fca6ea1SDimitry Andric FeatureStdExtSscofpmf, 131*0fca6ea1SDimitry Andric FeatureStdExtSsnpm, 132*0fca6ea1SDimitry Andric FeatureStdExtSsu64xl, 133*0fca6ea1SDimitry Andric FeatureStdExtH, 134*0fca6ea1SDimitry Andric FeatureStdExtSsstateen, 135*0fca6ea1SDimitry Andric FeatureStdExtShcounterenw, 136*0fca6ea1SDimitry Andric FeatureStdExtShvstvala, 137*0fca6ea1SDimitry Andric FeatureStdExtShtvala, 138*0fca6ea1SDimitry Andric FeatureStdExtShvstvecd, 139*0fca6ea1SDimitry Andric FeatureStdExtShvsatpa, 140*0fca6ea1SDimitry Andric FeatureStdExtShgatpa]); 141*0fca6ea1SDimitry Andric 142*0fca6ea1SDimitry Andricdefvar RVB23U64Features = [Feature64Bit, 143*0fca6ea1SDimitry Andric FeatureStdExtI, 144*0fca6ea1SDimitry Andric FeatureStdExtM, 145*0fca6ea1SDimitry Andric FeatureStdExtA, 146*0fca6ea1SDimitry Andric FeatureStdExtF, 147*0fca6ea1SDimitry Andric FeatureStdExtD, 148*0fca6ea1SDimitry Andric FeatureStdExtC, 149*0fca6ea1SDimitry Andric FeatureStdExtZicntr, 150*0fca6ea1SDimitry Andric FeatureStdExtZihpm, 151*0fca6ea1SDimitry Andric FeatureStdExtZiccif, 152*0fca6ea1SDimitry Andric FeatureStdExtZiccrse, 153*0fca6ea1SDimitry Andric FeatureStdExtZiccamoa, 154*0fca6ea1SDimitry Andric FeatureStdExtZicclsm, 155*0fca6ea1SDimitry Andric FeatureStdExtZa64rs, 156*0fca6ea1SDimitry Andric FeatureStdExtZihintpause, 157*0fca6ea1SDimitry Andric FeatureStdExtZba, 158*0fca6ea1SDimitry Andric FeatureStdExtZbb, 159*0fca6ea1SDimitry Andric FeatureStdExtZbs, 160*0fca6ea1SDimitry Andric FeatureStdExtZic64b, 161*0fca6ea1SDimitry Andric FeatureStdExtZicbom, 162*0fca6ea1SDimitry Andric FeatureStdExtZicbop, 163*0fca6ea1SDimitry Andric FeatureStdExtZicboz, 164*0fca6ea1SDimitry Andric FeatureStdExtZkt, 165*0fca6ea1SDimitry Andric FeatureStdExtZihintntl, 166*0fca6ea1SDimitry Andric FeatureStdExtZicond, 167*0fca6ea1SDimitry Andric FeatureStdExtZimop, 168*0fca6ea1SDimitry Andric FeatureStdExtZcmop, 169*0fca6ea1SDimitry Andric FeatureStdExtZcb, 170*0fca6ea1SDimitry Andric FeatureStdExtZfa, 171*0fca6ea1SDimitry Andric FeatureStdExtZawrs]; 172*0fca6ea1SDimitry Andric 173*0fca6ea1SDimitry Andricdefvar RVB23S64Features = !listconcat(RVB23U64Features, 174*0fca6ea1SDimitry Andric [FeatureStdExtZifencei, 175*0fca6ea1SDimitry Andric FeatureStdExtSvnapot, 176*0fca6ea1SDimitry Andric FeatureStdExtSvbare, 177*0fca6ea1SDimitry Andric FeatureStdExtSvade, 178*0fca6ea1SDimitry Andric FeatureStdExtSsccptr, 179*0fca6ea1SDimitry Andric FeatureStdExtSstvecd, 180*0fca6ea1SDimitry Andric FeatureStdExtSstvala, 181*0fca6ea1SDimitry Andric FeatureStdExtSscounterenw, 182*0fca6ea1SDimitry Andric FeatureStdExtSvpbmt, 183*0fca6ea1SDimitry Andric FeatureStdExtSvinval, 184*0fca6ea1SDimitry Andric FeatureStdExtSstc, 185*0fca6ea1SDimitry Andric FeatureStdExtSscofpmf, 186*0fca6ea1SDimitry Andric FeatureStdExtSsu64xl]); 187*0fca6ea1SDimitry Andric 188*0fca6ea1SDimitry Andricdefvar RVM23U32Features = [Feature32Bit, 189*0fca6ea1SDimitry Andric FeatureStdExtI, 190*0fca6ea1SDimitry Andric FeatureStdExtM, 191*0fca6ea1SDimitry Andric FeatureStdExtZba, 192*0fca6ea1SDimitry Andric FeatureStdExtZbb, 193*0fca6ea1SDimitry Andric FeatureStdExtZbs, 194*0fca6ea1SDimitry Andric FeatureStdExtZicond, 195*0fca6ea1SDimitry Andric FeatureStdExtZihintpause, 196*0fca6ea1SDimitry Andric FeatureStdExtZihintntl, 197*0fca6ea1SDimitry Andric FeatureStdExtZce, 198*0fca6ea1SDimitry Andric FeatureStdExtZicbop, 199*0fca6ea1SDimitry Andric FeatureStdExtZimop, 200*0fca6ea1SDimitry Andric FeatureStdExtZcmop]; 201*0fca6ea1SDimitry Andric 202*0fca6ea1SDimitry Andricdef RVI20U32 : RISCVProfile<"rvi20u32", RVI20U32Features>; 203*0fca6ea1SDimitry Andricdef RVI20U64 : RISCVProfile<"rvi20u64", RVI20U64Features>; 204*0fca6ea1SDimitry Andricdef RVA20U64 : RISCVProfile<"rva20u64", RVA20U64Features>; 205*0fca6ea1SDimitry Andricdef RVA20S64 : RISCVProfile<"rva20s64", RVA20S64Features>; 206*0fca6ea1SDimitry Andricdef RVA22U64 : RISCVProfile<"rva22u64", RVA22U64Features>; 207*0fca6ea1SDimitry Andricdef RVA22S64 : RISCVProfile<"rva22s64", RVA22S64Features>; 208*0fca6ea1SDimitry Andricdef RVA23U64 : RISCVExperimentalProfile<"rva23u64", RVA23U64Features>; 209*0fca6ea1SDimitry Andricdef RVA23S64 : RISCVExperimentalProfile<"rva23s64", RVA23S64Features>; 210*0fca6ea1SDimitry Andricdef RVB23U64 : RISCVExperimentalProfile<"rvb23u64", RVB23U64Features>; 211*0fca6ea1SDimitry Andricdef RVB23S64 : RISCVExperimentalProfile<"rvb23s64", RVB23S64Features>; 212*0fca6ea1SDimitry Andricdef RVM23U32 : RISCVExperimentalProfile<"rvm23u32", RVM23U32Features>; 213