diff options
author | Renato Golin <renato.golin@linaro.org> | 2014-07-18 12:00:48 +0000 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2014-07-18 12:00:48 +0000 |
commit | c17a07b36abb3412b76a78b44b0ce93f14f677db (patch) | |
tree | aa35611066c6e7f71d6b8cfd2462bf12d1524868 /llvm/lib/Support | |
parent | 968697d16173d86a28849cea95ed1d513b5fec9d (diff) | |
download | bcm5719-llvm-c17a07b36abb3412b76a78b44b0ce93f14f677db.tar.gz bcm5719-llvm-c17a07b36abb3412b76a78b44b0ce93f14f677db.zip |
Refactor ARM subarchitecture parsing
Re-commit of a patch to rework the triple parsing on ARM to a more sane
model.
Patch by Gabor Ballabas.
llvm-svn: 213367
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r-- | llvm/lib/Support/Triple.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index 2b8b39782cc..25ddb7689d4 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -357,6 +357,28 @@ static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) { .Default(Triple::UnknownObjectFormat); } +static Triple::SubArchType parseSubArch(StringRef SubArchName) { + return StringSwitch<Triple::SubArchType>(SubArchName) + .EndsWith("v8", Triple::ARMSubArch_v8) + .EndsWith("v8a", Triple::ARMSubArch_v8) + .EndsWith("v7", Triple::ARMSubArch_v7) + .EndsWith("v7a", Triple::ARMSubArch_v7) + .EndsWith("v7em", Triple::ARMSubArch_v7em) + .EndsWith("v7l", Triple::ARMSubArch_v7) + .EndsWith("v7m", Triple::ARMSubArch_v7m) + .EndsWith("v7r", Triple::ARMSubArch_v7) + .EndsWith("v7s", Triple::ARMSubArch_v7s) + .EndsWith("v6", Triple::ARMSubArch_v6) + .EndsWith("v6m", Triple::ARMSubArch_v6m) + .EndsWith("v6t2", Triple::ARMSubArch_v6t2) + .EndsWith("v5", Triple::ARMSubArch_v5) + .EndsWith("v5e", Triple::ARMSubArch_v5) + .EndsWith("v5t", Triple::ARMSubArch_v5) + .EndsWith("v5te", Triple::ARMSubArch_v5te) + .EndsWith("v4t", Triple::ARMSubArch_v4t) + .Default(Triple::NoSubArch); +} + static const char *getObjectFormatTypeName(Triple::ObjectFormatType Kind) { switch (Kind) { case Triple::UnknownObjectFormat: return ""; @@ -382,6 +404,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { Triple::Triple(const Twine &Str) : Data(Str.str()), Arch(parseArch(getArchName())), + SubArch(parseSubArch(getArchName())), Vendor(parseVendor(getVendorName())), OS(parseOS(getOSName())), Environment(parseEnvironment(getEnvironmentName())), @@ -399,6 +422,7 @@ Triple::Triple(const Twine &Str) Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr) : Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr).str()), Arch(parseArch(ArchStr.str())), + SubArch(parseSubArch(ArchStr.str())), Vendor(parseVendor(VendorStr.str())), OS(parseOS(OSStr.str())), Environment(), ObjectFormat(Triple::UnknownObjectFormat) { @@ -415,6 +439,7 @@ Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr, : Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr + Twine('-') + EnvironmentStr).str()), Arch(parseArch(ArchStr.str())), + SubArch(parseSubArch(ArchStr.str())), Vendor(parseVendor(VendorStr.str())), OS(parseOS(OSStr.str())), Environment(parseEnvironment(EnvironmentStr.str())), |