summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorSimon Atanasyan <satanasyan@mips.com>2013-01-10 12:36:19 +0000
committerSimon Atanasyan <satanasyan@mips.com>2013-01-10 12:36:19 +0000
commit81c423cc97d8ecdaa00b659e973a9afcf1306a7b (patch)
treeda7d52cb1bb963eac6df2a4152a3e2b3959e3452 /clang/lib/Driver/Tools.cpp
parent4f6e4ae44a6ecaae12081dc611a5ab8093ee3f1a (diff)
downloadbcm5719-llvm-81c423cc97d8ecdaa00b659e973a9afcf1306a7b.tar.gz
bcm5719-llvm-81c423cc97d8ecdaa00b659e973a9afcf1306a7b.zip
[Mips] Pass a combination of +soft-float and -mips16-hard-float flags to
the backend if hard float ABI is selected under -mips16 mode. llvm-svn: 172062
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 53acad14a46..1856364c8f0 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -958,7 +958,9 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
StringRef FloatABI = getMipsFloatABI(D, Args);
- if (FloatABI == "soft") {
+ bool IsMips16 = Args.getLastArg(options::OPT_mips16) != NULL;
+
+ if (FloatABI == "soft" || (FloatABI == "hard" && IsMips16)) {
// Floating point operations and argument passing are soft.
CmdArgs.push_back("-msoft-float");
CmdArgs.push_back("-mfloat-abi");
@@ -969,6 +971,11 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
// Now it is the only method.
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("+soft-float");
+
+ if (FloatABI == "hard" && IsMips16) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-mips16-hard-float");
+ }
}
else if (FloatABI == "single") {
// Restrict the use of hardware floating-point
OpenPOWER on IntegriCloud