enum ArchType {
UnknownArch,
- arm, // ARM: arm, armv.*, xscale
+ arm, // ARM (little endian): arm, armv.*, xscale
+ armeb, // ARM (big endian): armeb
+ arm64, // ARM64 (little endian): arm64
+ arm64_be, // ARM64 (big endian): arm64_be
aarch64, // AArch64 (little endian): aarch64
aarch64_be, // AArch64 (big endian): aarch64_be
hexagon, // Hexagon: hexagon
sparcv9, // Sparcv9: Sparcv9
systemz, // SystemZ: s390x
tce, // TCE (http://tce.cs.tut.fi/): tce
- thumb, // Thumb: thumb, thumbv.*
+ thumb, // Thumb (little endian): thumb, thumbv.*
+ thumbeb, // Thumb (big endian): thumbeb
x86, // X86: i[3-9]86
x86_64, // X86-64: amd64, x86_64
xcore, // XCore: xcore
le32, // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten)
amdil, // amdil: amd IL
spir, // SPIR: standard portable IR for OpenCL 32-bit version
- spir64 // SPIR: standard portable IR for OpenCL 64-bit version
+ spir64, // SPIR: standard portable IR for OpenCL 64-bit version
+ kalimba // Kalimba: generic kalimba
+ };
+ enum SubArchType {
+ NoSubArch,
+
+ ARMSubArch_v8,
+ ARMSubArch_v7,
+ ARMSubArch_v7em,
+ ARMSubArch_v7m,
+ ARMSubArch_v7s,
+ ARMSubArch_v6,
+ ARMSubArch_v6m,
+ ARMSubArch_v6t2,
+ ARMSubArch_v5,
+ ARMSubArch_v5te,
+ ARMSubArch_v4t
};
enum VendorType {
UnknownVendor,
BGQ,
Freescale,
IBM,
- NVIDIA
+ ImaginationTechnologies,
+ NVIDIA,
+ CSR
};
enum OSType {
UnknownOS,
EABI,
EABIHF,
Android,
+
+ MSVC,
+ Itanium,
+ Cygnus,
};
enum ObjectFormatType {
UnknownObjectFormat,
/// The parsed arch type.
ArchType Arch;
+ /// The parsed subarchitecture type.
+ SubArchType SubArch;
+
/// The parsed vendor type.
VendorType Vendor;
/// getArch - Get the parsed architecture type of this triple.
ArchType getArch() const { return Arch; }
+ /// getSubArch - get the parsed subarchitecture type for this triple.
+ SubArchType getSubArch() const { return SubArch; }
+
/// getVendor - Get the parsed vendor type of this triple.
VendorType getVendor() const { return Vendor; }
return isMacOSX() || isiOS();
}
+ bool isOSFreeBSD() const {
+ return getOS() == Triple::FreeBSD;
+ }
+
+ bool isWindowsMSVCEnvironment() const {
+ return getOS() == Triple::Win32 &&
+ (getEnvironment() == Triple::UnknownEnvironment ||
+ getEnvironment() == Triple::MSVC);
+ }
+
+ bool isKnownWindowsMSVCEnvironment() const {
+ return getOS() == Triple::Win32 && getEnvironment() == Triple::MSVC;
+ }
+
+ bool isWindowsItaniumEnvironment() const {
+ return getOS() == Triple::Win32 && getEnvironment() == Triple::Itanium;
+ }
+
+ bool isWindowsCygwinEnvironment() const {
+ return getOS() == Triple::Cygwin ||
+ (getOS() == Triple::Win32 && getEnvironment() == Triple::Cygnus);
+ }
+
+ bool isWindowsGNUEnvironment() const {
+ return getOS() == Triple::MinGW32 ||
+ (getOS() == Triple::Win32 && getEnvironment() == Triple::GNU);
+ }
+
/// \brief Tests for either Cygwin or MinGW OS
bool isOSCygMing() const {
- return getOS() == Triple::Cygwin || getOS() == Triple::MinGW32;
+ return isWindowsCygwinEnvironment() || isWindowsGNUEnvironment();
}
/// \brief Is this a "Windows" OS targeting a "MSVCRT.dll" environment.
bool isOSMSVCRT() const {
- return getOS() == Triple::Win32 || getOS() == Triple::MinGW32;
+ return isWindowsMSVCEnvironment() || isWindowsGNUEnvironment();
}
/// \brief Tests whether the OS is Windows.
/// architecture if no such variant can be found.
llvm::Triple get64BitArchVariant() const;
+ /// Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting.
+ ///
+ /// \param Arch the architecture name (e.g., "armv7s"). If it is an empty
+ /// string then the triple's arch name is used.
+ const char* getARMCPUForArch(StringRef Arch = StringRef()) const;
+
/// @}
/// @name Static helpers for IDs.
/// @{