Changeset View
Changeset View
Standalone View
Standalone View
lib/Support/Triple.cpp
Show First 20 Lines • Show All 194 Lines • ▼ Show 20 Lines | const char *Triple::getOSTypeName(OSType Kind) { | ||||
} | } | ||||
llvm_unreachable("Invalid OSType"); | llvm_unreachable("Invalid OSType"); | ||||
} | } | ||||
const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) { | const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) { | ||||
switch (Kind) { | switch (Kind) { | ||||
case UnknownEnvironment: return "unknown"; | case UnknownEnvironment: return "unknown"; | ||||
case ABI32: return "abi32"; | |||||
case ABIN32: return "abin32"; | |||||
case ABI64: return "abi64"; | |||||
case GNU: return "gnu"; | case GNU: return "gnu"; | ||||
case GNUABI32: return "gnuabi32"; | |||||
case GNUABIN32: return "gnuabin32"; | |||||
case GNUABI64: return "gnuabi64"; | case GNUABI64: return "gnuabi64"; | ||||
case GNUEABIHF: return "gnueabihf"; | case GNUEABIHF: return "gnueabihf"; | ||||
case GNUEABI: return "gnueabi"; | case GNUEABI: return "gnueabi"; | ||||
case GNUX32: return "gnux32"; | case GNUX32: return "gnux32"; | ||||
case CODE16: return "code16"; | case CODE16: return "code16"; | ||||
case EABI: return "eabi"; | case EABI: return "eabi"; | ||||
case EABIHF: return "eabihf"; | case EABIHF: return "eabihf"; | ||||
case Android: return "android"; | case Android: return "android"; | ||||
case AndroidABI32: return "androidabi32"; | |||||
case AndroidABI64: return "androidabi64"; | |||||
case Musl: return "musl"; | case Musl: return "musl"; | ||||
case MuslEABI: return "musleabi"; | case MuslEABI: return "musleabi"; | ||||
case MuslEABIHF: return "musleabihf"; | case MuslEABIHF: return "musleabihf"; | ||||
case MSVC: return "msvc"; | case MSVC: return "msvc"; | ||||
case Itanium: return "itanium"; | case Itanium: return "itanium"; | ||||
case Cygnus: return "cygnus"; | case Cygnus: return "cygnus"; | ||||
case AMDOpenCL: return "amdopencl"; | case AMDOpenCL: return "amdopencl"; | ||||
case CoreCLR: return "coreclr"; | case CoreCLR: return "coreclr"; | ||||
▲ Show 20 Lines • Show All 242 Lines • ▼ Show 20 Lines | return StringSwitch<Triple::OSType>(OSName) | ||||
.StartsWith("tvos", Triple::TvOS) | .StartsWith("tvos", Triple::TvOS) | ||||
.StartsWith("watchos", Triple::WatchOS) | .StartsWith("watchos", Triple::WatchOS) | ||||
.StartsWith("mesa3d", Triple::Mesa3D) | .StartsWith("mesa3d", Triple::Mesa3D) | ||||
.Default(Triple::UnknownOS); | .Default(Triple::UnknownOS); | ||||
} | } | ||||
static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) { | static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) { | ||||
return StringSwitch<Triple::EnvironmentType>(EnvironmentName) | return StringSwitch<Triple::EnvironmentType>(EnvironmentName) | ||||
.StartsWith("abi32", Triple::ABI32) | |||||
.StartsWith("abin32", Triple::ABIN32) | |||||
.StartsWith("abi64", Triple::ABI64) | |||||
.StartsWith("eabihf", Triple::EABIHF) | .StartsWith("eabihf", Triple::EABIHF) | ||||
.StartsWith("eabi", Triple::EABI) | .StartsWith("eabi", Triple::EABI) | ||||
.StartsWith("gnuabi32", Triple::GNUABI32) | |||||
.StartsWith("gnuabin32", Triple::GNUABIN32) | |||||
.StartsWith("gnuabi64", Triple::GNUABI64) | .StartsWith("gnuabi64", Triple::GNUABI64) | ||||
.StartsWith("gnueabihf", Triple::GNUEABIHF) | .StartsWith("gnueabihf", Triple::GNUEABIHF) | ||||
.StartsWith("gnueabi", Triple::GNUEABI) | .StartsWith("gnueabi", Triple::GNUEABI) | ||||
.StartsWith("gnux32", Triple::GNUX32) | .StartsWith("gnux32", Triple::GNUX32) | ||||
.StartsWith("code16", Triple::CODE16) | .StartsWith("code16", Triple::CODE16) | ||||
.StartsWith("gnu", Triple::GNU) | .StartsWith("gnu", Triple::GNU) | ||||
.StartsWith("androidabi32", Triple::AndroidABI32) | |||||
.StartsWith("androidabi64", Triple::AndroidABI64) | |||||
.StartsWith("android", Triple::Android) | .StartsWith("android", Triple::Android) | ||||
.StartsWith("musleabihf", Triple::MuslEABIHF) | .StartsWith("musleabihf", Triple::MuslEABIHF) | ||||
.StartsWith("musleabi", Triple::MuslEABI) | .StartsWith("musleabi", Triple::MuslEABI) | ||||
.StartsWith("musl", Triple::Musl) | .StartsWith("musl", Triple::Musl) | ||||
.StartsWith("msvc", Triple::MSVC) | .StartsWith("msvc", Triple::MSVC) | ||||
.StartsWith("itanium", Triple::Itanium) | .StartsWith("itanium", Triple::Itanium) | ||||
.StartsWith("cygnus", Triple::Cygnus) | .StartsWith("cygnus", Triple::Cygnus) | ||||
.StartsWith("amdopencl", Triple::AMDOpenCL) | .StartsWith("amdopencl", Triple::AMDOpenCL) | ||||
▲ Show 20 Lines • Show All 935 Lines • ▼ Show 20 Lines | bool Triple::isLittleEndian() const { | ||||
case Triple::renderscript32: | case Triple::renderscript32: | ||||
case Triple::renderscript64: | case Triple::renderscript64: | ||||
return true; | return true; | ||||
default: | default: | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
std::pair<llvm::Triple, StringRef> Triple::getABIVariant(StringRef ABI) const { | |||||
Triple T(*this); | |||||
switch (getArch()) { | |||||
default: | |||||
if (ABI == "") | |||||
return std::make_pair(T, ABI); | |||||
T.setArch(Triple::UnknownArch); | |||||
return std::make_pair(T, ABI); | |||||
case Triple::arm: | |||||
case Triple::armeb: | |||||
case Triple::aarch64: | |||||
case Triple::aarch64_be: | |||||
case Triple::thumb: | |||||
case Triple::thumbeb: | |||||
if (ABI == "" || ABI == "aapcs16" || ABI == "darwinpcs" || | |||||
ABI.startswith("apcs") || ABI.startswith("aapcs")) | |||||
return std::make_pair(T, ABI); | |||||
T.setArch(Triple::UnknownArch); | |||||
return std::make_pair(T, ABI); | |||||
case Triple::ppc64: | |||||
case Triple::ppc64le: | |||||
if (ABI == "" || ABI.startswith("elfv1") || ABI.startswith("elfv2")) | |||||
return std::make_pair(T, ABI); | |||||
T.setArch(Triple::UnknownArch); | |||||
return std::make_pair(T, ABI); | |||||
case Triple::mips: | |||||
case Triple::mipsel: | |||||
case Triple::mips64: | |||||
case Triple::mips64el: { | |||||
EnvironmentType NewEnv; | |||||
if (ABI == "") | |||||
ABI = (getArch() == Triple::mips || getArch() == Triple::mipsel) ? "o32" : "n64"; | |||||
switch (T.getEnvironment()) { | |||||
default: | |||||
T.setArch(Triple::UnknownArch); | |||||
return std::make_pair(T, ABI); | |||||
case Triple::Android: | |||||
case Triple::AndroidABI64: | |||||
NewEnv = StringSwitch<EnvironmentType>(ABI) | |||||
.Case("o32", Triple::AndroidABI32) | |||||
.Case("n64", Triple::AndroidABI64) | |||||
.Default(Triple::UnknownEnvironment); | |||||
break; | |||||
case Triple::UnknownEnvironment: | |||||
case Triple::ABI32: | |||||
case Triple::ABIN32: | |||||
case Triple::ABI64: | |||||
NewEnv = StringSwitch<EnvironmentType>(ABI) | |||||
.Case("o32", Triple::ABI32) | |||||
.Case("n32", Triple::ABIN32) | |||||
.Case("n64", Triple::ABI64) | |||||
.Default(Triple::UnknownEnvironment); | |||||
break; | |||||
case Triple::GNU: | |||||
case Triple::GNUABI32: | |||||
case Triple::GNUABIN32: | |||||
case Triple::GNUABI64: | |||||
NewEnv = StringSwitch<EnvironmentType>(ABI) | |||||
.Case("o32", Triple::GNUABI32) | |||||
.Case("n32", Triple::GNUABIN32) | |||||
.Case("n64", Triple::GNUABI64) | |||||
.Default(Triple::UnknownEnvironment); | |||||
break; | |||||
} | |||||
if (NewEnv == Triple::UnknownEnvironment) { | |||||
T.setArch(Triple::UnknownArch); | |||||
return std::make_pair(T, ABI); | |||||
} | |||||
// We have to keep the Arch and Environment in sync at the moment due to | |||||
// a false correlation between mips/mipsel and O32 and mips64/mips64el and | |||||
// N64 that is required by the MIPS backend. | |||||
if (ABI == "o32") | |||||
T = T.get32BitArchVariant(); | |||||
else if (ABI == "n32" || ABI == "n64") | |||||
T = T.get64BitArchVariant(); | |||||
if (NewEnv != T.getEnvironment()) | |||||
T.setEnvironment(NewEnv); | |||||
return std::make_pair(T, ""); | |||||
} | |||||
} | |||||
} | |||||
StringRef Triple::getARMCPUForArch(StringRef MArch) const { | StringRef Triple::getARMCPUForArch(StringRef MArch) const { | ||||
if (MArch.empty()) | if (MArch.empty()) | ||||
MArch = getArchName(); | MArch = getArchName(); | ||||
MArch = ARM::getCanonicalArchName(MArch); | MArch = ARM::getCanonicalArchName(MArch); | ||||
// Some defaults are forced. | // Some defaults are forced. | ||||
switch (getOS()) { | switch (getOS()) { | ||||
case llvm::Triple::FreeBSD: | case llvm::Triple::FreeBSD: | ||||
▲ Show 20 Lines • Show All 53 Lines • Show Last 20 Lines |