diff options
author | Abdoulaye Walsimou Gaye <awg@embtoolkit.org> | 2013-05-05 17:15:24 +0200 |
---|---|---|
committer | Abdoulaye Walsimou Gaye <awg@embtoolkit.org> | 2013-05-10 15:59:16 +0200 |
commit | 4d2e811eeee9e8ccb8a1cdbbb139270be934e168 (patch) | |
tree | da214b9afd31c7da43f6d93fa5f81a34dafd2439 | |
parent | b17a2a0f7ff5e9ed165ab84123c647faa5ea6c1f (diff) | |
download | clang-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.cpp | 19 |
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)) |