Reapply part of r237975, "Fix Clang -Wmissing-override warning", except for DIContext...
[oota-llvm.git] / include / llvm / Support / TargetParser.h
index a531afbe45e91e0671d0e7103883a4e752ff6dc5..f588105b2e907b28d26458d241d9e09892292686 100644 (file)
@@ -27,66 +27,91 @@ namespace llvm {
 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.
@@ -95,17 +120,24 @@ class ARMTargetParser {
   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