namespace ARM {
// FPU names.
enum FPUKind {
- INVALID_FPU = 0,
- VFP,
- VFPV2,
- VFPV3,
- VFPV3_D16,
- VFPV4,
- VFPV4_D16,
- FPV5_D16,
- FP_ARMV8,
- NEON,
- NEON_VFPV4,
- NEON_FP_ARMV8,
- CRYPTO_NEON_FP_ARMV8,
- SOFTVFP,
- LAST_FPU
+ FK_INVALID = 0,
+ FK_VFP,
+ FK_VFPV2,
+ FK_VFPV3,
+ FK_VFPV3_D16,
+ FK_VFPV4,
+ FK_VFPV4_D16,
+ FK_FPV5_D16,
+ FK_FP_ARMV8,
+ FK_NEON,
+ FK_NEON_VFPV4,
+ FK_NEON_FP_ARMV8,
+ FK_CRYPTO_NEON_FP_ARMV8,
+ FK_SOFTVFP,
+ FK_LAST
};
// Arch names.
enum ArchKind {
- INVALID_ARCH = 0,
- ARMV2,
- ARMV2A,
- ARMV3,
- ARMV3M,
- ARMV4,
- ARMV4T,
- ARMV5,
- ARMV5T,
- ARMV5TE,
- ARMV6,
- ARMV6J,
- ARMV6K,
- ARMV6T2,
- ARMV6Z,
- ARMV6ZK,
- ARMV6M,
- ARMV7,
- ARMV7A,
- ARMV7R,
- ARMV7M,
- ARMV8A,
- ARMV8_1A,
- IWMMXT,
- IWMMXT2,
- LAST_ARCH
+ AK_INVALID = 0,
+ AK_ARMV2,
+ AK_ARMV2A,
+ AK_ARMV3,
+ AK_ARMV3M,
+ AK_ARMV4,
+ AK_ARMV4T,
+ AK_ARMV5,
+ AK_ARMV5T,
+ AK_ARMV5TE,
+ AK_ARMV6,
+ AK_ARMV6J,
+ AK_ARMV6K,
+ AK_ARMV6T2,
+ AK_ARMV6Z,
+ AK_ARMV6ZK,
+ AK_ARMV6M,
+ AK_ARMV7,
+ AK_ARMV7A,
+ AK_ARMV7R,
+ AK_ARMV7M,
+ AK_ARMV8A,
+ AK_ARMV8_1A,
+ // Non-standard Arch names.
+ AK_IWMMXT,
+ AK_IWMMXT2,
+ AK_XSCALE,
+ AK_ARMV5E,
+ AK_ARMV5TEJ,
+ AK_ARMV6SM,
+ AK_ARMV6HL,
+ AK_ARMV7L,
+ AK_ARMV7HL,
+ AK_ARMV7S,
+ AK_ARMV7EM,
+ AK_LAST
};
// Arch extension modifiers for CPUs.
enum ArchExtKind {
- INVALID_ARCHEXT = 0,
- CRC,
- CRYPTO,
- FP,
- HWDIV,
- MP,
- SEC,
- VIRT,
- LAST_ARCHEXT
+ AEK_INVALID = 0,
+ AEK_CRC,
+ AEK_CRYPTO,
+ AEK_FP,
+ AEK_HWDIV,
+ AEK_MP,
+ AEK_SEC,
+ AEK_VIRT,
+ AEK_LAST
};
+ // ISA kinds.
+ enum ISAKind {
+ IK_INVALID = 0,
+ IK_ARM,
+ IK_THUMB,
+ IK_AARCH64
+ };
+
+ // Endianness
+ // FIXME: BE8 vs. BE32?
+ enum EndianKind {
+ EK_INVALID = 0,
+ EK_LITTLE,
+ EK_BIG
+ };
} // namespace ARM
// Target Parsers, one per architecture.
static StringRef getArchSynonym(StringRef Arch);
public:
+ static StringRef getCanonicalArchName(StringRef Arch);
+
// Information by ID
- static const char * getFPUName(unsigned ID);
- static const char * getArchName(unsigned ID);
- static unsigned getArchDefaultCPUArch(unsigned ID);
- static const char * getArchDefaultCPUName(unsigned ID);
- static const char * getArchExtName(unsigned ID);
+ static const char * getFPUName(unsigned FPUKind);
+ static const char * getArchName(unsigned ArchKind);
+ static unsigned getArchDefaultCPUArch(unsigned ArchKind);
+ static const char * getArchDefaultCPUName(unsigned ArchKind);
+ static const char * getArchExtName(unsigned ArchExtKind);
+ static const char * getDefaultCPU(StringRef Arch);
// Parser
static unsigned parseFPU(StringRef FPU);
static unsigned parseArch(StringRef Arch);
static unsigned parseArchExt(StringRef ArchExt);
+ static unsigned parseCPUArch(StringRef CPU);
+ static unsigned parseArchISA(StringRef Arch);
+ static unsigned parseArchEndian(StringRef Arch);
+
};
} // namespace llvm