xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVProfiles.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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