diff options
author | Jush Lu <jush.msn@gmail.com> | 2011-03-09 19:39:16 +0800 |
---|---|---|
committer | Jush Lu <jush.msn@gmail.com> | 2011-03-09 19:39:16 +0800 |
commit | b5530586d68bd25831a6796b5d3199cb0769a35c (patch) | |
tree | fac4a03b53b6a64b0c00f433e4d8b3c9f2bc67cd /lib/Support/Triple.cpp | |
parent | b4e17c5bf4361bbdeced39aa071150d7fa9c3c10 (diff) | |
parent | d01f50f42ce60207ed6d27fb1778e456d83be06c (diff) | |
download | external_llvm-b5530586d68bd25831a6796b5d3199cb0769a35c.zip external_llvm-b5530586d68bd25831a6796b5d3199cb0769a35c.tar.gz external_llvm-b5530586d68bd25831a6796b5d3199cb0769a35c.tar.bz2 |
Merge upstream r127116
Diffstat (limited to 'lib/Support/Triple.cpp')
-rw-r--r-- | lib/Support/Triple.cpp | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 24f83e2..36edf6e 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -22,7 +22,7 @@ const char *Triple::getArchTypeName(ArchType Kind) { switch (Kind) { case InvalidArch: return "<invalid>"; case UnknownArch: return "unknown"; - + case alpha: return "alpha"; case arm: return "arm"; case bfin: return "bfin"; @@ -30,7 +30,6 @@ const char *Triple::getArchTypeName(ArchType Kind) { case mips: return "mips"; case mipsel: return "mipsel"; case msp430: return "msp430"; - case pic16: return "pic16"; case ppc64: return "powerpc64"; case ppc: return "powerpc"; case sparc: return "sparc"; @@ -102,7 +101,6 @@ const char *Triple::getOSTypeName(OSType Kind) { case Linux: return "linux"; case Lv2: return "lv2"; case MinGW32: return "mingw32"; - case MinGW64: return "mingw64"; case NetBSD: return "netbsd"; case OpenBSD: return "openbsd"; case Psp: return "psp"; @@ -118,6 +116,10 @@ const char *Triple::getOSTypeName(OSType Kind) { const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) { switch (Kind) { case UnknownEnvironment: return "unknown"; + case GNU: return "gnu"; + case GNUEABI: return "gnueabi"; + case EABI: return "eabi"; + case MachO: return "macho"; } return "<invalid>"; @@ -138,8 +140,6 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { return mipsel; if (Name == "msp430") return msp430; - if (Name == "pic16") - return pic16; if (Name == "ppc64") return ppc64; if (Name == "ppc") @@ -228,7 +228,8 @@ const char *Triple::getArchNameForAssembler() { return "arm"; if (Str == "armv4t" || Str == "thumbv4t") return "armv4t"; - if (Str == "armv5" || Str == "armv5e" || Str == "thumbv5" || Str == "thumbv5e") + if (Str == "armv5" || Str == "armv5e" || Str == "thumbv5" + || Str == "thumbv5e") return "armv5"; if (Str == "armv6" || Str == "thumbv6") return "armv6"; @@ -242,16 +243,14 @@ const char *Triple::getArchNameForAssembler() { // Triple::ArchType Triple::ParseArch(StringRef ArchName) { - if (ArchName.size() == 4 && ArchName[0] == 'i' && - ArchName[2] == '8' && ArchName[3] == '6' && + if (ArchName.size() == 4 && ArchName[0] == 'i' && + ArchName[2] == '8' && ArchName[3] == '6' && ArchName[1] - '3' < 6) // i[3-9]86 return x86; else if (ArchName == "amd64" || ArchName == "x86_64") return x86_64; else if (ArchName == "bfin") return bfin; - else if (ArchName == "pic16") - return pic16; else if (ArchName == "powerpc") return ppc; else if ((ArchName == "powerpc64") || (ArchName == "ppu")) @@ -318,8 +317,6 @@ Triple::OSType Triple::ParseOS(StringRef OSName) { return Lv2; else if (OSName.startswith("mingw32")) return MinGW32; - else if (OSName.startswith("mingw64")) - return MinGW64; else if (OSName.startswith("netbsd")) return NetBSD; else if (OSName.startswith("openbsd")) @@ -339,7 +336,16 @@ Triple::OSType Triple::ParseOS(StringRef OSName) { } Triple::EnvironmentType Triple::ParseEnvironment(StringRef EnvironmentName) { - return UnknownEnvironment; + if (EnvironmentName.startswith("eabi")) + return EABI; + else if (EnvironmentName.startswith("gnueabi")) + return GNUEABI; + else if (EnvironmentName.startswith("gnu")) + return GNU; + else if (EnvironmentName.startswith("macho")) + return MachO; + else + return UnknownEnvironment; } void Triple::Parse() const { @@ -451,15 +457,16 @@ std::string Triple::normalize(StringRef Str) { do { // Insert one empty component at Idx. StringRef CurrentComponent(""); // The empty component. - for (unsigned i = Idx; i < Components.size(); ++i) { - // Skip over any fixed components. - while (i < array_lengthof(Found) && Found[i]) ++i; + for (unsigned i = Idx; i < Components.size();) { // Place the component at the new position, getting the component // that was at this position - it will be moved right. std::swap(CurrentComponent, Components[i]); // If it was placed on top of an empty component then we are done. if (CurrentComponent.empty()) break; + // Advance to the next component, skipping any fixed components. + while (++i < array_lengthof(Found) && Found[i]) + ; } // The last component was pushed off the end - append it. if (!CurrentComponent.empty()) @@ -517,17 +524,17 @@ StringRef Triple::getOSAndEnvironmentName() const { static unsigned EatNumber(StringRef &Str) { assert(!Str.empty() && Str[0] >= '0' && Str[0] <= '9' && "Not a number"); unsigned Result = Str[0]-'0'; - + // Eat the digit. Str = Str.substr(1); - + // Handle "darwin11". if (Result == 1 && !Str.empty() && Str[0] >= '0' && Str[0] <= '9') { Result = Result*10 + (Str[0] - '0'); // Eat the digit. Str = Str.substr(1); } - + return Result; } @@ -540,10 +547,10 @@ void Triple::getDarwinNumber(unsigned &Maj, unsigned &Min, assert(getOS() == Darwin && "Not a darwin target triple!"); StringRef OSName = getOSName(); assert(OSName.startswith("darwin") && "Unknown darwin target triple!"); - + // Strip off "darwin". OSName = OSName.substr(6); - + Maj = Min = Revision = 0; if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9') @@ -552,27 +559,27 @@ void Triple::getDarwinNumber(unsigned &Maj, unsigned &Min, // The major version is the first digit. Maj = EatNumber(OSName); if (OSName.empty()) return; - + // Handle minor version: 10.4.9 -> darwin8.9. if (OSName[0] != '.') return; - + // Eat the '.'. OSName = OSName.substr(1); if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9') return; - + Min = EatNumber(OSName); if (OSName.empty()) return; // Handle revision darwin8.9.1 if (OSName[0] != '.') return; - + // Eat the '.'. OSName = OSName.substr(1); - + if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9') return; |