diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-09-11 01:14:50 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-11 01:14:50 +0000 |
| commit | 33a004e9eb63929791923b1f96720171f769af87 (patch) | |
| tree | e1e7b40b5e726e4c1d6742556dec6b42d64c099e | |
| parent | 74a3231de4085983dbf89e38e07f2f5912b361c9 (diff) | |
| download | bcm5719-llvm-33a004e9eb63929791923b1f96720171f769af87.tar.gz bcm5719-llvm-33a004e9eb63929791923b1f96720171f769af87.zip | |
Swizzle the target triple based on -mthumb, and update clang-cc to recognize
thumb-foo-bar as an ARM target.
llvm-svn: 81497
| -rw-r--r-- | clang/include/clang/Driver/Options.def | 2 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/CodeGen/TargetABIInfo.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 15 |
4 files changed, 16 insertions, 3 deletions
diff --git a/clang/include/clang/Driver/Options.def b/clang/include/clang/Driver/Options.def index 4961cc97f08..c72bf36b7e5 100644 --- a/clang/include/clang/Driver/Options.def +++ b/clang/include/clang/Driver/Options.def @@ -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) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 4e63db6eaf3..2cb625323dc 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -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); diff --git a/clang/lib/CodeGen/TargetABIInfo.cpp b/clang/lib/CodeGen/TargetABIInfo.cpp index daeec0a31c6..67e25978a8b 100644 --- a/clang/lib/CodeGen/TargetABIInfo.cpp +++ b/clang/lib/CodeGen/TargetABIInfo.cpp @@ -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()); diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 05a73b97687..9a037c6a929 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -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(); } } |

