LLVM: lib/TargetParser/ARMTargetParserCommon.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
16
17using namespace llvm;
18
21 .Case("v5", "v5t")
22 .Case("v5e", "v5te")
23 .Case("v6j", "v6")
24 .Case("v6hl", "v6k")
25 .Cases({"v6m", "v6sm", "v6s-m"}, "v6-m")
26 .Cases({"v6z", "v6zk"}, "v6kz")
27 .Cases({"v7", "v7a", "v7hl", "v7l"}, "v7-a")
28 .Case("v7r", "v7-r")
29 .Case("v7m", "v7-m")
30 .Case("v7em", "v7e-m")
31 .Cases({"v8", "v8a", "v8l", "aarch64", "arm64"}, "v8-a")
32 .Case("v8.1a", "v8.1-a")
33 .Case("v8.2a", "v8.2-a")
34 .Case("v8.3a", "v8.3-a")
35 .Case("v8.4a", "v8.4-a")
36 .Case("v8.5a", "v8.5-a")
37 .Case("v8.6a", "v8.6-a")
38 .Case("v8.7a", "v8.7-a")
39 .Case("v8.8a", "v8.8-a")
40 .Case("v8.9a", "v8.9-a")
41 .Case("v8r", "v8-r")
42 .Cases({"v9", "v9a"}, "v9-a")
43 .Case("v9.1a", "v9.1-a")
44 .Case("v9.2a", "v9.2-a")
45 .Case("v9.3a", "v9.3-a")
46 .Case("v9.4a", "v9.4-a")
47 .Case("v9.5a", "v9.5-a")
48 .Case("v9.6a", "v9.6-a")
49 .Case("v9.7a", "v9.7-a")
50 .Case("v8m.base", "v8-m.base")
51 .Case("v8m.main", "v8-m.main")
52 .Case("v8.1m.main", "v8.1-m.main")
54}
55
60
61
62 if (A.starts_with("arm64_32"))
63 offset = 8;
64 else if (A.starts_with("arm64e"))
65 offset = 6;
66 else if (A.starts_with("arm64"))
67 offset = 5;
68 else if (A.starts_with("aarch64_32"))
69 offset = 10;
70 else if (A.starts_with("arm"))
71 offset = 3;
72 else if (A.starts_with("thumb"))
73 offset = 5;
74 else if (A.starts_with("aarch64")) {
75 offset = 7;
76
77 if (A.contains("eb"))
79 if (A.substr(offset, 3) == "_be")
80 offset += 3;
81 }
82
83
85 offset += 2;
86 else
87
88 A.consume_back("eb");
89
92
93
94 if (A.empty())
95 return Arch;
96
97
99
100 if (A.size() >= 2 && (A[0] != 'v' || !std::isdigit(A[1])))
102
103 if (A.contains("eb"))
105 }
106
107
108 return A;
109}
110
119
124
128 else
130 }
131
134
136}
137
138
139
140
141
142
144 StringRef &Err, bool EnablePAuthLR) {
145 PBP = {"none", "a_key", false, false, false};
146 if (Spec == "none")
147 return true;
148
149 if (Spec == "standard") {
150 PBP.Scope = "non-leaf";
154 return true;
155 }
156
158 Spec.split(Opts, "+");
159 for (int I = 0, E = Opts.size(); I != E; ++I) {
161 if (Opt == "bti") {
163 continue;
164 }
165 if (Opt == "pac-ret") {
166 PBP.Scope = "non-leaf";
168 StringRef PACOpt = Opts[I + 1].trim();
169 if (PACOpt == "leaf")
170 PBP.Scope = "all";
171 else if (PACOpt == "b-key")
172 PBP.Key = "b_key";
173 else if (PACOpt == "pc")
175 else
176 break;
177 }
178 continue;
179 }
180 if (Opt == "gcs") {
182 continue;
183 }
184 if (Opt == "")
185 Err = "";
186 else
187 Err = Opt;
188 return false;
189 }
190
191 return true;
192}
This file defines the SmallVector class.
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
Lightweight error class with error context and mandatory checking.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
static constexpr size_t npos
bool starts_with(StringRef Prefix) const
Check if this string starts with the given Prefix.
bool ends_with(StringRef Suffix) const
Check if this string ends with the given Suffix.
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
StringSwitch & StartsWith(StringLiteral S, T Value)
StringSwitch & Cases(std::initializer_list< StringLiteral > CaseStrings, T Value)
LLVM_ABI StringRef getCanonicalArchName(StringRef Arch)
MArch is expected to be of the form (arm|thumb)?(eb)?(v.
Definition ARMTargetParserCommon.cpp:56
LLVM_ABI ISAKind parseArchISA(StringRef Arch)
Definition ARMTargetParserCommon.cpp:111
LLVM_ABI StringRef getArchSynonym(StringRef Arch)
Converts e.g. "armv8" -> "armv8-a".
Definition ARMTargetParserCommon.cpp:19
LLVM_ABI bool parseBranchProtection(StringRef Spec, ParsedBranchProtection &PBP, StringRef &Err, bool EnablePAuthLR=false)
Definition ARMTargetParserCommon.cpp:143
LLVM_ABI EndianKind parseArchEndian(StringRef Arch)
Definition ARMTargetParserCommon.cpp:120
This is an optimization pass for GlobalISel generic memory operations.
bool BranchTargetEnforcement
bool BranchProtectionPAuthLR