[X86] Add support for elfiamcu triple
authorMichael Kuperstein <michael.m.kuperstein@intel.com>
Sun, 25 Oct 2015 08:07:37 +0000 (08:07 +0000)
committerMichael Kuperstein <michael.m.kuperstein@intel.com>
Sun, 25 Oct 2015 08:07:37 +0000 (08:07 +0000)
This adds support for the i?86-*-elfiamcu triple, which indicates the IAMCU psABI is used.

Differential Revision: http://reviews.llvm.org/D13977

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251222 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Triple.h
lib/Support/Triple.cpp
lib/Target/X86/X86Subtarget.h
unittests/ADT/TripleTest.cpp

index e523e3b0309852eaf07cf2a79eda182d5685bd57..bb0e05c0deb726a6c5f78f046947fb1c34ebd6b4 100644 (file)
@@ -174,7 +174,8 @@ public:
     Cygnus,
     AMDOpenCL,
     CoreCLR,
-    LastEnvironmentType = CoreCLR
+    ELFIAMCU,
+    LastEnvironmentType = ELFIAMCU
   };
   enum ObjectFormatType {
     UnknownObjectFormat,
@@ -431,6 +432,10 @@ public:
     return getOS() == Triple::Bitrig;
   }
 
+  bool isEnvironmentIAMCU() const {
+    return getEnvironment() == Triple::ELFIAMCU;
+  }
+
   bool isWindowsMSVCEnvironment() const {
     return getOS() == Triple::Win32 &&
            (getEnvironment() == Triple::UnknownEnvironment ||
index 8e2cbaddef424dbabda5e953311c2692ff35ecbb..f3b3de7af3ff09f34c7667fff0b556876708b5d1 100644 (file)
@@ -202,6 +202,7 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
   case Cygnus: return "cygnus";
   case AMDOpenCL: return "amdopencl";
   case CoreCLR: return "coreclr";
+  case ELFIAMCU: return "elfiamcu";
   }
 
   llvm_unreachable("Invalid EnvironmentType!");
@@ -453,6 +454,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
     .StartsWith("cygnus", Triple::Cygnus)
     .StartsWith("amdopencl", Triple::AMDOpenCL)
     .StartsWith("coreclr", Triple::CoreCLR)
+    .StartsWith("elfiamcu", Triple::ELFIAMCU)
     .Default(Triple::UnknownEnvironment);
 }
 
index bca31c00398404075b34c0ad6d7bf44242d4baf4..c1842e1a5fd55e1a77ea97984d55214fe45b6368 100644 (file)
@@ -418,6 +418,7 @@ public:
   bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); }
   bool isTargetNaCl32() const { return isTargetNaCl() && !is64Bit(); }
   bool isTargetNaCl64() const { return isTargetNaCl() && is64Bit(); }
+  bool isTargetMCU() const { return TargetTriple.isEnvironmentIAMCU(); }
 
   bool isTargetWindowsMSVC() const {
     return TargetTriple.isWindowsMSVCEnvironment();
index 71072932beded28a6d080535061c5769eca604d8..015eb853e5b1459cfc77c17f2ab22cba56335f8c 100644 (file)
@@ -81,6 +81,12 @@ TEST(TripleTest, ParsedIDs) {
   EXPECT_EQ(Triple::Darwin, T.getOS());
   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
 
+  T = Triple("i386-pc-linux-elfiamcu");
+  EXPECT_EQ(Triple::x86, T.getArch());
+  EXPECT_EQ(Triple::PC, T.getVendor());
+  EXPECT_EQ(Triple::Linux, T.getOS());
+  EXPECT_EQ(Triple::ELFIAMCU, T.getEnvironment());
+
   T = Triple("x86_64-pc-linux-gnu");
   EXPECT_EQ(Triple::x86_64, T.getArch());
   EXPECT_EQ(Triple::PC, T.getVendor());