xref: /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
10b57cec5SDimitry Andric//===-- RISCV.td - Describe the RISCV Target Machine -------*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andricinclude "llvm/Target/Target.td"
100b57cec5SDimitry Andric
110b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric// RISC-V subtarget features and instruction predicates.
130b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
140b57cec5SDimitry Andric
150b57cec5SDimitry Andricdef FeatureStdExtM
160b57cec5SDimitry Andric    : SubtargetFeature<"m", "HasStdExtM", "true",
170b57cec5SDimitry Andric                       "'M' (Integer Multiplication and Division)">;
180b57cec5SDimitry Andricdef HasStdExtM : Predicate<"Subtarget->hasStdExtM()">,
195ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtM),
20480093f4SDimitry Andric                           "'M' (Integer Multiplication and Division)">;
210b57cec5SDimitry Andric
220b57cec5SDimitry Andricdef FeatureStdExtA
230b57cec5SDimitry Andric    : SubtargetFeature<"a", "HasStdExtA", "true",
240b57cec5SDimitry Andric                       "'A' (Atomic Instructions)">;
250b57cec5SDimitry Andricdef HasStdExtA : Predicate<"Subtarget->hasStdExtA()">,
265ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtA),
27480093f4SDimitry Andric                           "'A' (Atomic Instructions)">;
280b57cec5SDimitry Andric
290b57cec5SDimitry Andricdef FeatureStdExtF
300b57cec5SDimitry Andric    : SubtargetFeature<"f", "HasStdExtF", "true",
310b57cec5SDimitry Andric                       "'F' (Single-Precision Floating-Point)">;
320b57cec5SDimitry Andricdef HasStdExtF : Predicate<"Subtarget->hasStdExtF()">,
335ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtF),
34480093f4SDimitry Andric                           "'F' (Single-Precision Floating-Point)">;
350b57cec5SDimitry Andric
360b57cec5SDimitry Andricdef FeatureStdExtD
370b57cec5SDimitry Andric    : SubtargetFeature<"d", "HasStdExtD", "true",
380b57cec5SDimitry Andric                       "'D' (Double-Precision Floating-Point)",
390b57cec5SDimitry Andric                       [FeatureStdExtF]>;
400b57cec5SDimitry Andricdef HasStdExtD : Predicate<"Subtarget->hasStdExtD()">,
415ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtD),
42480093f4SDimitry Andric                           "'D' (Double-Precision Floating-Point)">;
430b57cec5SDimitry Andric
44*349cc55cSDimitry Andricdef FeatureStdExtZfhmin
45*349cc55cSDimitry Andric    : SubtargetFeature<"experimental-zfhmin", "HasStdExtZfhmin", "true",
46*349cc55cSDimitry Andric                       "'Zfhmin' (Half-Precision Floating-Point Minimal)",
47*349cc55cSDimitry Andric                       [FeatureStdExtF]>;
48*349cc55cSDimitry Andricdef HasStdExtZfhmin : Predicate<"Subtarget->hasStdExtZfhmin()">,
49*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZfhmin),
50*349cc55cSDimitry Andric                             "'Zfhmin' (Half-Precision Floating-Point Minimal)">;
51*349cc55cSDimitry Andric
52*349cc55cSDimitry Andricdef FeatureStdExtZfh
53e8d8bef9SDimitry Andric    : SubtargetFeature<"experimental-zfh", "HasStdExtZfh", "true",
54e8d8bef9SDimitry Andric                       "'Zfh' (Half-Precision Floating-Point)",
55*349cc55cSDimitry Andric                       [FeatureStdExtZfhmin, FeatureStdExtF]>;
56e8d8bef9SDimitry Andricdef HasStdExtZfh : Predicate<"Subtarget->hasStdExtZfh()">,
57*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZfh),
58e8d8bef9SDimitry Andric                             "'Zfh' (Half-Precision Floating-Point)">;
59e8d8bef9SDimitry Andric
600b57cec5SDimitry Andricdef FeatureStdExtC
610b57cec5SDimitry Andric    : SubtargetFeature<"c", "HasStdExtC", "true",
620b57cec5SDimitry Andric                       "'C' (Compressed Instructions)">;
630b57cec5SDimitry Andricdef HasStdExtC : Predicate<"Subtarget->hasStdExtC()">,
645ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtC),
65480093f4SDimitry Andric                           "'C' (Compressed Instructions)">;
660b57cec5SDimitry Andric
67*349cc55cSDimitry Andricdef FeatureStdExtZba
68e8d8bef9SDimitry Andric    : SubtargetFeature<"experimental-zba", "HasStdExtZba", "true",
69e8d8bef9SDimitry Andric                       "'Zba' (Address calculation 'B' Instructions)">;
70e8d8bef9SDimitry Andricdef HasStdExtZba : Predicate<"Subtarget->hasStdExtZba()">,
71*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZba),
72e8d8bef9SDimitry Andric                             "'Zba' (Address calculation 'B' Instructions)">;
73e8d8bef9SDimitry Andricdef NotHasStdExtZba : Predicate<"!Subtarget->hasStdExtZba()">;
74e8d8bef9SDimitry Andric
75*349cc55cSDimitry Andricdef FeatureStdExtZbb
765ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbb", "HasStdExtZbb", "true",
775ffd83dbSDimitry Andric                       "'Zbb' (Base 'B' Instructions)">;
785ffd83dbSDimitry Andricdef HasStdExtZbb : Predicate<"Subtarget->hasStdExtZbb()">,
79*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbb),
805ffd83dbSDimitry Andric                             "'Zbb' (Base 'B' Instructions)">;
815ffd83dbSDimitry Andric
82*349cc55cSDimitry Andricdef FeatureStdExtZbc
835ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbc", "HasStdExtZbc", "true",
845ffd83dbSDimitry Andric                       "'Zbc' (Carry-Less 'B' Instructions)">;
855ffd83dbSDimitry Andricdef HasStdExtZbc : Predicate<"Subtarget->hasStdExtZbc()">,
86*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbc),
875ffd83dbSDimitry Andric                             "'Zbc' (Carry-Less 'B' Instructions)">;
885ffd83dbSDimitry Andric
89*349cc55cSDimitry Andricdef FeatureStdExtZbe
905ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbe", "HasStdExtZbe", "true",
915ffd83dbSDimitry Andric                       "'Zbe' (Extract-Deposit 'B' Instructions)">;
925ffd83dbSDimitry Andricdef HasStdExtZbe : Predicate<"Subtarget->hasStdExtZbe()">,
93*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbe),
945ffd83dbSDimitry Andric                             "'Zbe' (Extract-Deposit 'B' Instructions)">;
955ffd83dbSDimitry Andric
96*349cc55cSDimitry Andricdef FeatureStdExtZbf
975ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbf", "HasStdExtZbf", "true",
985ffd83dbSDimitry Andric                       "'Zbf' (Bit-Field 'B' Instructions)">;
995ffd83dbSDimitry Andricdef HasStdExtZbf : Predicate<"Subtarget->hasStdExtZbf()">,
100*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbf),
1015ffd83dbSDimitry Andric                             "'Zbf' (Bit-Field 'B' Instructions)">;
1025ffd83dbSDimitry Andric
103*349cc55cSDimitry Andricdef FeatureStdExtZbm
1045ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbm", "HasStdExtZbm", "true",
1055ffd83dbSDimitry Andric                       "'Zbm' (Matrix 'B' Instructions)">;
1065ffd83dbSDimitry Andricdef HasStdExtZbm : Predicate<"Subtarget->hasStdExtZbm()">,
107*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbm),
1085ffd83dbSDimitry Andric                             "'Zbm' (Matrix 'B' Instructions)">;
1095ffd83dbSDimitry Andric
110*349cc55cSDimitry Andricdef FeatureStdExtZbp
1115ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbp", "HasStdExtZbp", "true",
1125ffd83dbSDimitry Andric                       "'Zbp' (Permutation 'B' Instructions)">;
1135ffd83dbSDimitry Andricdef HasStdExtZbp : Predicate<"Subtarget->hasStdExtZbp()">,
114*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbp),
1155ffd83dbSDimitry Andric                             "'Zbp' (Permutation 'B' Instructions)">;
1165ffd83dbSDimitry Andric
117*349cc55cSDimitry Andricdef FeatureStdExtZbr
1185ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbr", "HasStdExtZbr", "true",
1195ffd83dbSDimitry Andric                       "'Zbr' (Polynomial Reduction 'B' Instructions)">;
1205ffd83dbSDimitry Andricdef HasStdExtZbr : Predicate<"Subtarget->hasStdExtZbr()">,
121*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbr),
1225ffd83dbSDimitry Andric                             "'Zbr' (Polynomial Reduction 'B' Instructions)">;
1235ffd83dbSDimitry Andric
124*349cc55cSDimitry Andricdef FeatureStdExtZbs
1255ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbs", "HasStdExtZbs", "true",
1265ffd83dbSDimitry Andric                       "'Zbs' (Single-Bit 'B' Instructions)">;
1275ffd83dbSDimitry Andricdef HasStdExtZbs : Predicate<"Subtarget->hasStdExtZbs()">,
128*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbs),
1295ffd83dbSDimitry Andric                             "'Zbs' (Single-Bit 'B' Instructions)">;
1305ffd83dbSDimitry Andric
131*349cc55cSDimitry Andricdef FeatureStdExtZbt
1325ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-zbt", "HasStdExtZbt", "true",
1335ffd83dbSDimitry Andric                       "'Zbt' (Ternary 'B' Instructions)">;
1345ffd83dbSDimitry Andricdef HasStdExtZbt : Predicate<"Subtarget->hasStdExtZbt()">,
135*349cc55cSDimitry Andric                             AssemblerPredicate<(all_of FeatureStdExtZbt),
1365ffd83dbSDimitry Andric                             "'Zbt' (Ternary 'B' Instructions)">;
1375ffd83dbSDimitry Andric
1385ffd83dbSDimitry Andric// Some instructions belong to both the basic and the permutation
1395ffd83dbSDimitry Andric// subextensions. They should be enabled if either has been specified.
1405ffd83dbSDimitry Andricdef HasStdExtZbbOrZbp
1415ffd83dbSDimitry Andric    : Predicate<"Subtarget->hasStdExtZbb() || Subtarget->hasStdExtZbp()">,
142*349cc55cSDimitry Andric                AssemblerPredicate<(any_of FeatureStdExtZbb, FeatureStdExtZbp),
143e8d8bef9SDimitry Andric                                   "'Zbb' (Base 'B' Instructions) or "
144e8d8bef9SDimitry Andric                                   "'Zbp' (Permutation 'B' Instructions)">;
1455ffd83dbSDimitry Andric
1465ffd83dbSDimitry Andricdef FeatureNoRVCHints
1475ffd83dbSDimitry Andric    : SubtargetFeature<"no-rvc-hints", "EnableRVCHintInstrs", "false",
1485ffd83dbSDimitry Andric                       "Disable RVC Hint Instructions.">;
1498bcb0991SDimitry Andricdef HasRVCHints : Predicate<"Subtarget->enableRVCHintInstrs()">,
1505ffd83dbSDimitry Andric                  AssemblerPredicate<(all_of(not FeatureNoRVCHints)),
151480093f4SDimitry Andric                                      "RVC Hint Instructions">;
1520b57cec5SDimitry Andric
1535ffd83dbSDimitry Andricdef FeatureStdExtV
1545ffd83dbSDimitry Andric    : SubtargetFeature<"experimental-v", "HasStdExtV", "true",
155e8d8bef9SDimitry Andric                       "'V' (Vector Instructions)">;
1565ffd83dbSDimitry Andricdef HasStdExtV : Predicate<"Subtarget->hasStdExtV()">,
1575ffd83dbSDimitry Andric                           AssemblerPredicate<(all_of FeatureStdExtV),
1585ffd83dbSDimitry Andric                           "'V' (Vector Instructions)">;
1595ffd83dbSDimitry Andric
160*349cc55cSDimitry Andricdef HasVInstructions    : Predicate<"Subtarget->hasVInstructions()">;
161*349cc55cSDimitry Andricdef HasVInstructionsAnyF : Predicate<"Subtarget->hasVInstructionsAnyF()">;
162*349cc55cSDimitry Andric
163e8d8bef9SDimitry Andricdef FeatureStdExtZvlsseg
164e8d8bef9SDimitry Andric    : SubtargetFeature<"experimental-zvlsseg", "HasStdExtZvlsseg", "true",
165e8d8bef9SDimitry Andric                       "'Zvlsseg' (Vector segment load/store instructions)",
166e8d8bef9SDimitry Andric                       [FeatureStdExtV]>;
167e8d8bef9SDimitry Andricdef HasStdExtZvlsseg : Predicate<"Subtarget->hasStdExtZvlsseg()">,
168e8d8bef9SDimitry Andric                                 AssemblerPredicate<(all_of FeatureStdExtZvlsseg),
169e8d8bef9SDimitry Andric                                 "'Zvlsseg' (Vector segment load/store instructions)">;
170fe6060f1SDimitry Andric
171*349cc55cSDimitry Andricdef FeatureStdExtZvamo
172e8d8bef9SDimitry Andric    : SubtargetFeature<"experimental-zvamo", "HasStdExtZvamo", "true",
173e8d8bef9SDimitry Andric                       "'Zvamo' (Vector AMO Operations)",
174e8d8bef9SDimitry Andric                       [FeatureStdExtV]>;
175e8d8bef9SDimitry Andricdef HasStdExtZvamo : Predicate<"Subtarget->hasStdExtZvamo()">,
176*349cc55cSDimitry Andric                               AssemblerPredicate<(all_of FeatureStdExtZvamo),
177e8d8bef9SDimitry Andric                               "'Zvamo' (Vector AMO Operations)">;
178e8d8bef9SDimitry Andric
1790b57cec5SDimitry Andricdef Feature64Bit
1800b57cec5SDimitry Andric    : SubtargetFeature<"64bit", "HasRV64", "true", "Implements RV64">;
1810b57cec5SDimitry Andricdef IsRV64 : Predicate<"Subtarget->is64Bit()">,
1825ffd83dbSDimitry Andric                       AssemblerPredicate<(all_of Feature64Bit),
183480093f4SDimitry Andric                       "RV64I Base Instruction Set">;
1840b57cec5SDimitry Andricdef IsRV32 : Predicate<"!Subtarget->is64Bit()">,
1855ffd83dbSDimitry Andric                       AssemblerPredicate<(all_of (not Feature64Bit)),
186480093f4SDimitry Andric                       "RV32I Base Instruction Set">;
1870b57cec5SDimitry Andric
188e8d8bef9SDimitry Andricdefvar RV32 = DefaultMode;
1890b57cec5SDimitry Andricdef RV64           : HwMode<"+64bit">;
1900b57cec5SDimitry Andric
1910b57cec5SDimitry Andricdef FeatureRV32E
1920b57cec5SDimitry Andric    : SubtargetFeature<"e", "IsRV32E", "true",
1930b57cec5SDimitry Andric                       "Implements RV32E (provides 16 rather than 32 GPRs)">;
1940b57cec5SDimitry Andricdef IsRV32E : Predicate<"Subtarget->isRV32E()">,
1955ffd83dbSDimitry Andric                        AssemblerPredicate<(all_of FeatureRV32E)>;
1960b57cec5SDimitry Andric
1970b57cec5SDimitry Andricdef FeatureRelax
1980b57cec5SDimitry Andric    : SubtargetFeature<"relax", "EnableLinkerRelax", "true",
1990b57cec5SDimitry Andric                       "Enable Linker relaxation.">;
2000b57cec5SDimitry Andric
201480093f4SDimitry Andricforeach i = {1-31} in
202480093f4SDimitry Andric    def FeatureReserveX#i :
203480093f4SDimitry Andric        SubtargetFeature<"reserve-x"#i, "UserReservedRegister[RISCV::X"#i#"]",
204480093f4SDimitry Andric                         "true", "Reserve X"#i>;
205480093f4SDimitry Andric
2065ffd83dbSDimitry Andricdef FeatureSaveRestore : SubtargetFeature<"save-restore", "EnableSaveRestore",
2075ffd83dbSDimitry Andric                                          "true", "Enable save/restore.">;
2085ffd83dbSDimitry Andric
2090b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2100b57cec5SDimitry Andric// Named operands for CSR instructions.
2110b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2120b57cec5SDimitry Andric
2130b57cec5SDimitry Andricinclude "RISCVSystemOperands.td"
2140b57cec5SDimitry Andric
2150b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2160b57cec5SDimitry Andric// Registers, calling conventions, instruction descriptions.
2170b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2180b57cec5SDimitry Andric
21913138422SDimitry Andricinclude "RISCVSchedule.td"
2200b57cec5SDimitry Andricinclude "RISCVRegisterInfo.td"
2210b57cec5SDimitry Andricinclude "RISCVCallingConv.td"
2220b57cec5SDimitry Andricinclude "RISCVInstrInfo.td"
2238bcb0991SDimitry Andricinclude "RISCVRegisterBanks.td"
224e8d8bef9SDimitry Andricinclude "RISCVSchedRocket.td"
225e8d8bef9SDimitry Andricinclude "RISCVSchedSiFive7.td"
2260b57cec5SDimitry Andric
2270b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2280b57cec5SDimitry Andric// RISC-V processors supported.
2290b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2300b57cec5SDimitry Andric
2315ffd83dbSDimitry Andricdef : ProcessorModel<"generic-rv32", NoSchedModel, []>;
2325ffd83dbSDimitry Andricdef : ProcessorModel<"generic-rv64", NoSchedModel, [Feature64Bit]>;
2330b57cec5SDimitry Andric
234e8d8bef9SDimitry Andricdef : ProcessorModel<"rocket-rv32", RocketModel, []>;
235e8d8bef9SDimitry Andricdef : ProcessorModel<"rocket-rv64", RocketModel, [Feature64Bit]>;
23613138422SDimitry Andric
237e8d8bef9SDimitry Andricdef : ProcessorModel<"sifive-7-rv32", SiFive7Model, []>;
238e8d8bef9SDimitry Andricdef : ProcessorModel<"sifive-7-rv64", SiFive7Model, [Feature64Bit]>;
23913138422SDimitry Andric
240*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-e20", RocketModel, [FeatureStdExtM,
241*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
242*349cc55cSDimitry Andric
243*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-e21", RocketModel, [FeatureStdExtM,
244*349cc55cSDimitry Andric                                                 FeatureStdExtA,
245*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
246*349cc55cSDimitry Andric
247*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-e24", RocketModel, [FeatureStdExtM,
248*349cc55cSDimitry Andric                                                 FeatureStdExtA,
249*349cc55cSDimitry Andric                                                 FeatureStdExtF,
250*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
251*349cc55cSDimitry Andric
252e8d8bef9SDimitry Andricdef : ProcessorModel<"sifive-e31", RocketModel, [FeatureStdExtM,
253590d96feSDimitry Andric                                                 FeatureStdExtA,
254590d96feSDimitry Andric                                                 FeatureStdExtC]>;
255590d96feSDimitry Andric
256*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-e34", RocketModel, [FeatureStdExtM,
257*349cc55cSDimitry Andric                                                 FeatureStdExtA,
258*349cc55cSDimitry Andric                                                 FeatureStdExtF,
259*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
260*349cc55cSDimitry Andric
261*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-e76", SiFive7Model, [FeatureStdExtM,
262*349cc55cSDimitry Andric                                                  FeatureStdExtA,
263*349cc55cSDimitry Andric                                                  FeatureStdExtF,
264*349cc55cSDimitry Andric                                                  FeatureStdExtC]>;
265*349cc55cSDimitry Andric
266*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-s21", RocketModel, [Feature64Bit,
267*349cc55cSDimitry Andric                                                 FeatureStdExtM,
268*349cc55cSDimitry Andric                                                 FeatureStdExtA,
269*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
270*349cc55cSDimitry Andric
271*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-s51", RocketModel, [Feature64Bit,
272*349cc55cSDimitry Andric                                                 FeatureStdExtM,
273*349cc55cSDimitry Andric                                                 FeatureStdExtA,
274*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
275*349cc55cSDimitry Andric
276*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-s54", RocketModel, [Feature64Bit,
277*349cc55cSDimitry Andric                                                 FeatureStdExtM,
278*349cc55cSDimitry Andric                                                 FeatureStdExtA,
279*349cc55cSDimitry Andric                                                 FeatureStdExtF,
280*349cc55cSDimitry Andric                                                 FeatureStdExtD,
281*349cc55cSDimitry Andric                                                 FeatureStdExtC]>;
282*349cc55cSDimitry Andric
283*349cc55cSDimitry Andricdef : ProcessorModel<"sifive-s76", SiFive7Model, [Feature64Bit,
284*349cc55cSDimitry Andric                                                  FeatureStdExtM,
285*349cc55cSDimitry Andric                                                  FeatureStdExtA,
286*349cc55cSDimitry Andric                                                  FeatureStdExtF,
287*349cc55cSDimitry Andric                                                  FeatureStdExtD,
288*349cc55cSDimitry Andric                                                  FeatureStdExtC]>;
289*349cc55cSDimitry Andric
290e8d8bef9SDimitry Andricdef : ProcessorModel<"sifive-u54", RocketModel, [Feature64Bit,
291e8d8bef9SDimitry Andric                                                 FeatureStdExtM,
292e8d8bef9SDimitry Andric                                                 FeatureStdExtA,
293e8d8bef9SDimitry Andric                                                 FeatureStdExtF,
294e8d8bef9SDimitry Andric                                                 FeatureStdExtD,
295e8d8bef9SDimitry Andric                                                 FeatureStdExtC]>;
296e8d8bef9SDimitry Andric
297e8d8bef9SDimitry Andricdef : ProcessorModel<"sifive-u74", SiFive7Model, [Feature64Bit,
298590d96feSDimitry Andric                                                  FeatureStdExtM,
299590d96feSDimitry Andric                                                  FeatureStdExtA,
300590d96feSDimitry Andric                                                  FeatureStdExtF,
301590d96feSDimitry Andric                                                  FeatureStdExtD,
302590d96feSDimitry Andric                                                  FeatureStdExtC]>;
30313138422SDimitry Andric
3040b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
3050b57cec5SDimitry Andric// Define the RISC-V target.
3060b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
3070b57cec5SDimitry Andric
3080b57cec5SDimitry Andricdef RISCVInstrInfo : InstrInfo {
3090b57cec5SDimitry Andric  let guessInstructionProperties = 0;
3100b57cec5SDimitry Andric}
3110b57cec5SDimitry Andric
3120b57cec5SDimitry Andricdef RISCVAsmParser : AsmParser {
3130b57cec5SDimitry Andric  let ShouldEmitMatchRegisterAltName = 1;
3140b57cec5SDimitry Andric  let AllowDuplicateRegisterNames = 1;
3150b57cec5SDimitry Andric}
3160b57cec5SDimitry Andric
3170b57cec5SDimitry Andricdef RISCVAsmWriter : AsmWriter {
3180b57cec5SDimitry Andric  int PassSubtarget = 1;
3190b57cec5SDimitry Andric}
3200b57cec5SDimitry Andric
3210b57cec5SDimitry Andricdef RISCV : Target {
3220b57cec5SDimitry Andric  let InstructionSet = RISCVInstrInfo;
3230b57cec5SDimitry Andric  let AssemblyParsers = [RISCVAsmParser];
3240b57cec5SDimitry Andric  let AssemblyWriters = [RISCVAsmWriter];
3250b57cec5SDimitry Andric  let AllowRegisterRenaming = 1;
3260b57cec5SDimitry Andric}
327