]> granicus.if.org Git - clang/commitdiff
Swizzle the target triple based on -mthumb, and update clang-cc to recognize
authorDaniel Dunbar <daniel@zuster.org>
Fri, 11 Sep 2009 01:14:50 +0000 (01:14 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 11 Sep 2009 01:14:50 +0000 (01:14 +0000)
thumb-foo-bar as an ARM target.

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

include/clang/Driver/Options.def
lib/Basic/Targets.cpp
lib/CodeGen/TargetABIInfo.cpp
lib/Driver/Tools.cpp

index 4961cc97f08697b47ce3bf922ce182f71a568419..c72bf36b7e569fd25caec21baefee3ec9a40e171 100644 (file)
@@ -536,6 +536,7 @@ OPTION("-mno-sse4a", mno_sse4a, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0
 OPTION("-mno-sse4", mno_sse4, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
 OPTION("-mno-sse", mno_sse, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
 OPTION("-mno-ssse3", mno_ssse3, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
+OPTION("-mno-thumb", mno_thumb, Flag, m_Group, INVALID, "", 0, 0, 0)
 OPTION("-mno-warn-nonportable-cfstrings", mno_warn_nonportable_cfstrings, Flag, m_Group, INVALID, "", 0, 0, 0)
 OPTION("-mpascal-strings", mpascal_strings, Flag, m_Group, INVALID, "", 0, 0, 0)
 OPTION("-mred-zone", mred_zone, Flag, m_Group, INVALID, "", 0, 0, 0)
@@ -546,6 +547,7 @@ OPTION("-msse4a", msse4a, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
 OPTION("-msse4", msse4, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
 OPTION("-msse", msse, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
 OPTION("-mssse3", mssse3, Flag, m_x86_Features_Group, INVALID, "", 0, 0, 0)
+OPTION("-mthumb", mthumb, Flag, m_Group, INVALID, "", 0, 0, 0)
 OPTION("-mtune=", mtune_EQ, Joined, m_Group, INVALID, "", 0, 0, 0)
 OPTION("-multi_module", multi__module, Flag, INVALID, INVALID, "", 0, 0, 0)
 OPTION("-multiply_defined_unused", multiply__defined__unused, Separate, INVALID, INVALID, "", 0, 0, 0)
index 4e63db6eaf385061499a502be729c863f82479e8..2cb625323dcfc9db9874e3830726046491466610 100644 (file)
@@ -1558,6 +1558,7 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) {
     return NULL;
 
   case llvm::Triple::arm:
+  case llvm::Triple::thumb:
     switch (os) {
     case llvm::Triple::Darwin:
       return new DarwinARMTargetInfo(T);
index daeec0a31c6207bce3ff2d20533d4a5b153e7eb2..67e25978a8b870b4da8042005ab6bf935208b39b 100644 (file)
@@ -1551,6 +1551,7 @@ const ABIInfo &CodeGenTypes::getABIInfo() const {
     return *(TheABIInfo = new X86_64ABIInfo());
 
   case llvm::Triple::arm:
+  case llvm::Triple::thumb:
     // FIXME: Support for OABI?
     return *(TheABIInfo = new ARMABIInfo());
 
index 05a73b97687fe32b213a13837cf29d4ae30bc8de..9a037c6a929f2929a125595c5a7308fbfaf512ae 100644 (file)
@@ -297,11 +297,20 @@ static std::string getLLVMTriple(const ToolChain &TC, const ArgList &Args) {
 
   case llvm::Triple::arm:
   case llvm::Triple::thumb: {
+    // FIXME: Factor into subclasses.
     llvm::Triple Triple = TC.getTriple();
-    // FIXME: Thumb!
+
+    // Thumb2 is the default for V7 on Darwin.
+    //
+    // FIXME: Thumb should just be another -target-feaure, not in the triple.
+    llvm::StringRef Suffix = getLLVMArchSuffixForARM(getARMTargetCPU(Args));
+    bool ThumbDefault =
+      (Suffix == "v7" && TC.getTriple().getOS() == llvm::Triple::Darwin);
     std::string ArchName = "arm";
-    ArchName += getLLVMArchSuffixForARM (getARMTargetCPU(Args));
-    Triple.setArchName(ArchName);
+    if (Args.hasFlag(options::OPT_mthumb, options::OPT_mno_thumb, ThumbDefault))
+      ArchName = "thumb";
+    Triple.setArchName(ArchName + Suffix.str());
+
     return Triple.getTriple();
   }
   }