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 <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
