15 #include "llvm/ADT/StringSwitch.h" 17 using namespace clang;
23 "x0",
"x1",
"x2",
"x3",
"x4",
"x5",
"x6",
"x7",
24 "x8",
"x9",
"x10",
"x11",
"x12",
"x13",
"x14",
"x15",
25 "x16",
"x17",
"x18",
"x19",
"x20",
"x21",
"x22",
"x23",
26 "x24",
"x25",
"x26",
"x27",
"x28",
"x29",
"x30",
"x31",
29 "f0",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
30 "f8",
"f9",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15",
31 "f16",
"f17",
"f18",
"f19",
"f20",
"f21",
"f22",
"f23",
32 "f24",
"f25",
"f26",
"f27",
"f28",
"f29",
"f30",
"f31"};
33 return llvm::makeArrayRef(GCCRegNames);
38 {{
"zero"},
"x0"}, {{
"ra"},
"x1"}, {{
"sp"},
"x2"}, {{
"gp"},
"x3"},
39 {{
"tp"},
"x4"}, {{
"t0"},
"x5"}, {{
"t1"},
"x6"}, {{
"t2"},
"x7"},
40 {{
"s0"},
"x8"}, {{
"s1"},
"x9"}, {{
"a0"},
"x10"}, {{
"a1"},
"x11"},
41 {{
"a2"},
"x12"}, {{
"a3"},
"x13"}, {{
"a4"},
"x14"}, {{
"a5"},
"x15"},
42 {{
"a6"},
"x16"}, {{
"a7"},
"x17"}, {{
"s2"},
"x18"}, {{
"s3"},
"x19"},
43 {{
"s4"},
"x20"}, {{
"s5"},
"x21"}, {{
"s6"},
"x22"}, {{
"s7"},
"x23"},
44 {{
"s8"},
"x24"}, {{
"s9"},
"x25"}, {{
"s10"},
"x26"}, {{
"s11"},
"x27"},
45 {{
"t3"},
"x28"}, {{
"t4"},
"x29"}, {{
"t5"},
"x30"}, {{
"t6"},
"x31"},
46 {{
"ft0"},
"f0"}, {{
"ft1"},
"f1"}, {{
"ft2"},
"f2"}, {{
"ft3"},
"f3"},
47 {{
"ft4"},
"f4"}, {{
"ft5"},
"f5"}, {{
"ft6"},
"f6"}, {{
"ft7"},
"f7"},
48 {{
"fs0"},
"f8"}, {{
"fs1"},
"f9"}, {{
"fa0"},
"f10"}, {{
"fa1"},
"f11"},
49 {{
"fa2"},
"f12"}, {{
"fa3"},
"f13"}, {{
"fa4"},
"f14"}, {{
"fa5"},
"f15"},
50 {{
"fa6"},
"f16"}, {{
"fa7"},
"f17"}, {{
"fs2"},
"f18"}, {{
"fs3"},
"f19"},
51 {{
"fs4"},
"f20"}, {{
"fs5"},
"f21"}, {{
"fs6"},
"f22"}, {{
"fs7"},
"f23"},
52 {{
"fs8"},
"f24"}, {{
"fs9"},
"f25"}, {{
"fs10"},
"f26"}, {{
"fs11"},
"f27"},
53 {{
"ft8"},
"f28"}, {{
"ft9"},
"f29"}, {{
"ft10"},
"f30"}, {{
"ft11"},
"f31"}};
54 return llvm::makeArrayRef(GCCRegAliases);
89 bool Is64Bit =
getTriple().getArch() == llvm::Triple::riscv64;
90 Builder.
defineMacro(
"__riscv_xlen", Is64Bit ?
"64" :
"32");
92 if (CodeModel ==
"default")
95 if (CodeModel ==
"small")
97 else if (CodeModel ==
"medium")
100 StringRef ABIName =
getABI();
101 if (ABIName ==
"ilp32f" || ABIName ==
"lp64f")
103 else if (ABIName ==
"ilp32d" || ABIName ==
"lp64d")
108 if (ABIName ==
"ilp32e")
132 bool Is64Bit =
getTriple().getArch() == llvm::Triple::riscv64;
133 return llvm::StringSwitch<bool>(Feature)
135 .Case(
"riscv32", !Is64Bit)
136 .Case(
"riscv64", Is64Bit)
148 for (
const auto &Feature : Features) {
151 else if (Feature ==
"+a")
153 else if (Feature ==
"+f")
155 else if (Feature ==
"+d")
157 else if (Feature ==
"+c")
TargetOptions & getTargetOpts() const
Retrieve the target options.
Defines the clang::MacroBuilder utility class.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
void setRequiresImmediate(int Min, int Max)
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &Info) const override
Concrete class used by the front-end to report problems and issues.
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
Perform initialization based on the user configured set of features.
static const char *const GCCRegNames[]
StringRef getABI() const override
Get the ABI currently in use.
ArrayRef< const char * > getGCCRegNames() const override
bool hasFeature(StringRef Feature) const override
Return true if has this feature, need to sync with handleTargetFeatures.
Dataflow Directional Tag Classes.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods --------------------——===//
void defineMacro(const Twine &Name, const Twine &Value="1")
Append a #define line for macro of the form "\#define Name Value\n".
ArrayRef< TargetInfo::GCCRegAlias > getGCCRegAliases() const override