summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdoulaye Walsimou Gaye <awg@embtoolkit.org>2013-05-05 17:15:24 +0200
committerAbdoulaye Walsimou Gaye <awg@embtoolkit.org>2013-05-10 15:59:16 +0200
commit4d2e811eeee9e8ccb8a1cdbbb139270be934e168 (patch)
treeda214b9afd31c7da43f6d93fa5f81a34dafd2439
parentb17a2a0f7ff5e9ed165ab84123c647faa5ea6c1f (diff)
downloadclang-4d2e811eeee9e8ccb8a1cdbbb139270be934e168.tar.gz
clang-4d2e811eeee9e8ccb8a1cdbbb139270be934e168.tar.bz2
clang-4d2e811eeee9e8ccb8a1cdbbb139270be934e168.tar.xz
[Embtk] ARM: hard float: take into account default configured FPU if no -mfpu specified
In case of hard floating point, without -mfpu passed, take into account default configured FPU if any. And if there is no default FPU at all, use vfp by default. Signed-off-by: Abdoulaye Walsimou Gaye <awg@embtoolkit.org> (cherry picked from commit 7f485e4492ff6fb9ab93a3e2ea8ce98c6a4b05ca)
-rw-r--r--lib/Driver/Tools.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index aa863ebd26..2a8c32fd5a 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -560,7 +560,13 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) {
// frontend target.
static void addFPUArgs(const Driver &D, const Arg *A, const ArgList &Args,
ArgStringList &CmdArgs) {
- StringRef FPU = A->getValue();
+ StringRef FPU;
+
+ if (A) {
+ FPU = A->getValue();
+ } else if (llvm::sys::hasDefaultTargetFpu()) {
+ FPU = llvm::sys::getDefaultTargetFpu();
+ }
// Set the target features based on the FPU.
if (FPU == "fpa" || FPU == "fpe2" || FPU == "fpe3" || FPU == "maverick") {
@@ -591,8 +597,15 @@ static void addFPUArgs(const Driver &D, const Arg *A, const ArgList &Args,
} else if (FPU == "neon") {
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("+neon");
- } else
+ } else if (!FPU.empty()) {
D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
+ } else {
+ // Hard floating point while no fpu selected, defaulting to vfp
+ CmdArgs.push_back("-target-feature");
+ CmdArgs.push_back("+vfp2");
+ CmdArgs.push_back("-target-feature");
+ CmdArgs.push_back("-neon");
+ }
}
// Handle -mfpmath=.
@@ -786,6 +799,8 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
// Honor -mfpu=.
if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))
addFPUArgs(D, A, Args, CmdArgs);
+ else if (FloatABI == "hard" || FloatABI == "softfp")
+ addFPUArgs(D, NULL, Args, CmdArgs);
// Honor -mfpmath=.
if (const Arg *A = Args.getLastArg(options::OPT_mfpmath_EQ))