summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-12-19 04:15:38 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-12-19 04:15:38 +0000
commit893d475ba8e76d45d8b690b38e9c32e0800c1cbc (patch)
tree2eac39d98a08ea510f0690fd6d467c09d2f4c889 /clang/lib/Driver/Tools.cpp
parentc745a620a28b589013051687ee94dc27fcda5e1a (diff)
downloadbcm5719-llvm-893d475ba8e76d45d8b690b38e9c32e0800c1cbc.tar.gz
bcm5719-llvm-893d475ba8e76d45d8b690b38e9c32e0800c1cbc.zip
ARM: Use front-end specific target features "soft-float" and "soft-float-abi" to communicate FP mode to target; __SOFTFP__ is set correctly now.
llvm-svn: 91755
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index b1846b34c2b..3dcdbbcecaa 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -230,7 +230,7 @@ static const char *getARMTargetCPU(const ArgList &Args) {
if (MArch == "armv5e" || MArch == "armv5te")
return "arm1026ejs";
if (MArch == "armv5tej")
- return "arm926ejs";
+ return "arm926ej-s";
if (MArch == "armv6" || MArch == "armv6k")
return "arm1136jf-s";
if (MArch == "armv6j")
@@ -432,6 +432,24 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
CmdArgs.push_back("-mfloat-abi");
CmdArgs.push_back("hard");
}
+
+ // Set appropriate target features for floating point mode.
+ //
+ // FIXME: Note, this is a hack, the LLVM backend doesn't actually use these
+ // yet (it uses the -mfloat-abi and -msoft-float options above), and it is
+ // stripped out by the ARM target.
+
+ // Use software floating point operations?
+ if (FloatABI == "soft") {
+ CmdArgs.push_back("-target-feature");
+ CmdArgs.push_back("+soft-float");
+ }
+
+ // Use software floating point argument passing?
+ if (FloatABI != "hard") {
+ CmdArgs.push_back("-target-feature");
+ CmdArgs.push_back("+soft-float-abi");
+ }
}
void Clang::AddX86TargetArgs(const ArgList &Args,
OpenPOWER on IntegriCloud