@@ -222,6 +222,50 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
222
222
.Default (UnknownArch);
223
223
}
224
224
225
+ static Triple::ArchType parseARMArch (StringRef ArchName) {
226
+ size_t offset = StringRef::npos;
227
+ Triple::ArchType arch = Triple::UnknownArch;
228
+ bool isThumb = ArchName.startswith (" thumb" );
229
+
230
+ if (ArchName.equals (" arm" ))
231
+ return Triple::arm;
232
+ if (ArchName.equals (" armeb" ))
233
+ return Triple::armeb;
234
+ if (ArchName.equals (" thumb" ))
235
+ return Triple::thumb;
236
+ if (ArchName.equals (" thumbeb" ))
237
+ return Triple::thumbeb;
238
+ if (ArchName.equals (" arm64" ) || ArchName.equals (" aarch64" ))
239
+ return Triple::aarch64;
240
+ if (ArchName.equals (" aarch64_be" ))
241
+ return Triple::aarch64_be;
242
+
243
+ if (ArchName.startswith (" armv" )) {
244
+ offset = 3 ;
245
+ arch = Triple::arm;
246
+ } else if (ArchName.startswith (" armebv" )) {
247
+ offset = 5 ;
248
+ arch = Triple::armeb;
249
+ } else if (ArchName.startswith (" thumbv" )) {
250
+ offset = 5 ;
251
+ arch = Triple::thumb;
252
+ } else if (ArchName.startswith (" thumbebv" )) {
253
+ offset = 7 ;
254
+ arch = Triple::thumbeb;
255
+ }
256
+ return StringSwitch<Triple::ArchType>(ArchName.substr (offset))
257
+ .Cases (" v2" , " v2a" , isThumb ? Triple::UnknownArch : arch)
258
+ .Cases (" v3" , " v3m" , isThumb ? Triple::UnknownArch : arch)
259
+ .Cases (" v4" , " v4t" , arch)
260
+ .Cases (" v5" , " v5e" , " v5t" , " v5te" , " v5tej" , arch)
261
+ .Cases (" v6" , " v6j" , " v6k" , " v6m" , arch)
262
+ .Cases (" v6t2" , " v6z" , " v6zk" , arch)
263
+ .Cases (" v7" , " v7a" , " v7em" , " v7l" , arch)
264
+ .Cases (" v7m" , " v7r" , " v7s" , arch)
265
+ .Cases (" v8" , " v8a" , arch)
266
+ .Default (Triple::UnknownArch);
267
+ }
268
+
225
269
static Triple::ArchType parseArch (StringRef ArchName) {
226
270
return StringSwitch<Triple::ArchType>(ArchName)
227
271
.Cases (" i386" , " i486" , " i586" , " i686" , Triple::x86)
@@ -231,19 +275,10 @@ static Triple::ArchType parseArch(StringRef ArchName) {
231
275
.Case (" powerpc" , Triple::ppc)
232
276
.Cases (" powerpc64" , " ppu" , Triple::ppc64)
233
277
.Case (" powerpc64le" , Triple::ppc64le)
234
- .Case (" aarch64" , Triple::aarch64)
235
- .Case (" aarch64_be" , Triple::aarch64_be)
236
- .Case (" arm64" , Triple::aarch64)
237
- .Cases (" arm" , " xscale" , Triple::arm)
238
- // FIXME: It would be good to replace these with explicit names for all the
239
- // various suffixes supported.
240
- .StartsWith (" armv" , Triple::arm)
241
- .Case (" armeb" , Triple::armeb)
242
- .StartsWith (" armebv" , Triple::armeb)
243
- .Case (" thumb" , Triple::thumb)
244
- .StartsWith (" thumbv" , Triple::thumb)
245
- .Case (" thumbeb" , Triple::thumbeb)
246
- .StartsWith (" thumbebv" , Triple::thumbeb)
278
+ .Case (" xscale" , Triple::arm)
279
+ .StartsWith (" arm" , parseARMArch (ArchName))
280
+ .StartsWith (" thumb" , parseARMArch (ArchName))
281
+ .StartsWith (" aarch64" , parseARMArch (ArchName))
247
282
.Case (" msp430" , Triple::msp430)
248
283
.Cases (" mips" , " mipseb" , " mipsallegrex" , Triple::mips)
249
284
.Cases (" mipsel" , " mipsallegrexel" , Triple::mipsel)
0 commit comments