r191736 - [ARM] Add -mfpu=none option to the driver.

Nico Weber thakis at chromium.org
Sat Jul 26 13:13:05 PDT 2014


Hi Amara,

what's this for? "none" isn't documented on
https://sourceware.org/binutils/docs/as/ARM-Options.html – are these docs
just out of date? Does gcc understand that flag? clang's integrated
assembler doesn't seem to understand ".fpu none", but .fpu is supposed to
do the same as -mfpu as far as I understand.

Thanks,
Nico


On Tue, Oct 1, 2013 at 3:20 AM, Amara Emerson <amara.emerson at arm.com> wrote:

> Author: aemerson
> Date: Tue Oct  1 05:20:54 2013
> New Revision: 191736
>
> URL: http://llvm.org/viewvc/llvm-project?rev=191736&view=rev
> Log:
> [ARM] Add -mfpu=none option to the driver.
>
> Modified:
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/test/Driver/arm-mfpu.c
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=191736&r1=191735&r2=191736&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Tue Oct  1 05:20:54 2013
> @@ -573,8 +573,36 @@ static bool isNoCommonDefault(const llvm
>  //
>  // FIXME: Centralize feature selection, defaulting shouldn't be also in
> the
>  // frontend target.
> -static void getFPUFeatures(const Driver &D, const Arg *A, const ArgList
> &Args,
> -                           std::vector<const char *> &Features) {
> +static void getAArch64FPUFeatures(const Driver &D, const Arg *A,
> +                                  const ArgList &Args,
> +                                  std::vector<const char *> &Features) {
> +  StringRef FPU = A->getValue();
> +  if (FPU == "fp-armv8") {
> +    Features.push_back("+fp-armv8");
> +  } else if (FPU == "neon-fp-armv8") {
> +    Features.push_back("+fp-armv8");
> +    Features.push_back("+neon");
> +  } else if (FPU == "crypto-neon-fp-armv8") {
> +    Features.push_back("+fp-armv8");
> +    Features.push_back("+neon");
> +    Features.push_back("+crypto");
> +  } else if (FPU == "neon") {
> +    Features.push_back("+neon");
> +  } else if (FPU == "none") {
> +    Features.push_back("-fp-armv8");
> +    Features.push_back("-crypto");
> +    Features.push_back("-neon");
> +  } else
> +    D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
> +}
> +
> +// Handle -mfpu=.
> +//
> +// FIXME: Centralize feature selection, defaulting shouldn't be also in
> the
> +// frontend target.
> +static void getARMFPUFeatures(const Driver &D, const Arg *A,
> +                              const ArgList &Args,
> +                              std::vector<const char *> &Features) {
>    StringRef FPU = A->getValue();
>
>    // Set the target features based on the FPU.
> @@ -603,6 +631,13 @@ static void getFPUFeatures(const Driver
>      Features.push_back("+fp-armv8");
>    } else if (FPU == "neon") {
>      Features.push_back("+neon");
> +  } else if (FPU == "none") {
> +    Features.push_back("-vfp2");
> +    Features.push_back("-vfp3");
> +    Features.push_back("-vfp4");
> +    Features.push_back("-fp-armv8");
> +    Features.push_back("-crypto");
> +    Features.push_back("-neon");
>    } else
>      D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
>  }
> @@ -704,7 +739,7 @@ static void getARMTargetFeatures(const D
>
>    // Honor -mfpu=.
>    if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))
> -    getFPUFeatures(D, A, Args, Features);
> +    getARMFPUFeatures(D, A, Args, Features);
>
>    // Setting -msoft-float effectively disables NEON because of the GCC
>    // implementation, although the same isn't true of VFP or VFP3.
> @@ -1384,7 +1419,7 @@ static void getAArch64TargetFeatures(con
>                                       std::vector<const char *> &Features)
> {
>    // Honor -mfpu=.
>    if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))
> -    getFPUFeatures(D, A, Args, Features);
> +    getAArch64FPUFeatures(D, A, Args, Features);
>  }
>
>  static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
>
> Modified: cfe/trunk/test/Driver/arm-mfpu.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpu.c?rev=191736&r1=191735&r2=191736&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Driver/arm-mfpu.c (original)
> +++ cfe/trunk/test/Driver/arm-mfpu.c Tue Oct  1 05:20:54 2013
> @@ -61,6 +61,15 @@
>  // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto"
>  // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+fp-armv8"
>
> +// RUN: %clang -target armv8-linux-gnueabi -mfpu=none %s -### 2>&1 \
> +// RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s
> +// CHECK-NO-FP: "-target-feature" "-vfp2"
> +// CHECK-NO-FP: "-target-feature" "-vfp3"
> +// CHECK-NO-FP: "-target-feature" "-vfp4"
> +// CHECK-NO-FP: "-target-feature" "-fp-armv8"
> +// CHECK-NO-FP: "-target-feature" "-crypto"
> +// CHECK-NO-FP: "-target-feature" "-neon"
> +
>  // RUN: %clang -target arm-linux-gnueabihf %s -### 2>&1 \
>  // RUN:   | FileCheck --check-prefix=CHECK-HF %s
>  // CHECK-HF: "-target-cpu" "arm1136jf-s"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140726/5d06e768/attachment.html>


More information about the cfe-commits mailing list