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