<div dir="ltr">Hi Amara,<div><br></div><div>what's this for? "none" isn't documented on <a href="https://sourceware.org/binutils/docs/as/ARM-Options.html">https://sourceware.org/binutils/docs/as/ARM-Options.html</a> – 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.</div>
<div><br></div><div>Thanks,</div><div>Nico</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Oct 1, 2013 at 3:20 AM, Amara Emerson <span dir="ltr"><<a href="mailto:amara.emerson@arm.com" target="_blank">amara.emerson@arm.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: aemerson<br>
Date: Tue Oct  1 05:20:54 2013<br>
New Revision: 191736<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=191736&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=191736&view=rev</a><br>
Log:<br>
[ARM] Add -mfpu=none option to the driver.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/test/Driver/arm-mfpu.c<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=191736&r1=191735&r2=191736&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=191736&r1=191735&r2=191736&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Tue Oct  1 05:20:54 2013<br>
@@ -573,8 +573,36 @@ static bool isNoCommonDefault(const llvm<br>
 //<br>
 // FIXME: Centralize feature selection, defaulting shouldn't be also in the<br>
 // frontend target.<br>
-static void getFPUFeatures(const Driver &D, const Arg *A, const ArgList &Args,<br>
-                           std::vector<const char *> &Features) {<br>
+static void getAArch64FPUFeatures(const Driver &D, const Arg *A,<br>
+                                  const ArgList &Args,<br>
+                                  std::vector<const char *> &Features) {<br>
+  StringRef FPU = A->getValue();<br>
+  if (FPU == "fp-armv8") {<br>
+    Features.push_back("+fp-armv8");<br>
+  } else if (FPU == "neon-fp-armv8") {<br>
+    Features.push_back("+fp-armv8");<br>
+    Features.push_back("+neon");<br>
+  } else if (FPU == "crypto-neon-fp-armv8") {<br>
+    Features.push_back("+fp-armv8");<br>
+    Features.push_back("+neon");<br>
+    Features.push_back("+crypto");<br>
+  } else if (FPU == "neon") {<br>
+    Features.push_back("+neon");<br>
+  } else if (FPU == "none") {<br>
+    Features.push_back("-fp-armv8");<br>
+    Features.push_back("-crypto");<br>
+    Features.push_back("-neon");<br>
+  } else<br>
+    D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);<br>
+}<br>
+<br>
+// Handle -mfpu=.<br>
+//<br>
+// FIXME: Centralize feature selection, defaulting shouldn't be also in the<br>
+// frontend target.<br>
+static void getARMFPUFeatures(const Driver &D, const Arg *A,<br>
+                              const ArgList &Args,<br>
+                              std::vector<const char *> &Features) {<br>
   StringRef FPU = A->getValue();<br>
<br>
   // Set the target features based on the FPU.<br>
@@ -603,6 +631,13 @@ static void getFPUFeatures(const Driver<br>
     Features.push_back("+fp-armv8");<br>
   } else if (FPU == "neon") {<br>
     Features.push_back("+neon");<br>
+  } else if (FPU == "none") {<br>
+    Features.push_back("-vfp2");<br>
+    Features.push_back("-vfp3");<br>
+    Features.push_back("-vfp4");<br>
+    Features.push_back("-fp-armv8");<br>
+    Features.push_back("-crypto");<br>
+    Features.push_back("-neon");<br>
   } else<br>
     D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);<br>
 }<br>
@@ -704,7 +739,7 @@ static void getARMTargetFeatures(const D<br>
<br>
   // Honor -mfpu=.<br>
   if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))<br>
-    getFPUFeatures(D, A, Args, Features);<br>
+    getARMFPUFeatures(D, A, Args, Features);<br>
<br>
   // Setting -msoft-float effectively disables NEON because of the GCC<br>
   // implementation, although the same isn't true of VFP or VFP3.<br>
@@ -1384,7 +1419,7 @@ static void getAArch64TargetFeatures(con<br>
                                      std::vector<const char *> &Features) {<br>
   // Honor -mfpu=.<br>
   if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ))<br>
-    getFPUFeatures(D, A, Args, Features);<br>
+    getAArch64FPUFeatures(D, A, Args, Features);<br>
 }<br>
<br>
 static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,<br>
<br>
Modified: cfe/trunk/test/Driver/arm-mfpu.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpu.c?rev=191736&r1=191735&r2=191736&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpu.c?rev=191736&r1=191735&r2=191736&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Driver/arm-mfpu.c (original)<br>
+++ cfe/trunk/test/Driver/arm-mfpu.c Tue Oct  1 05:20:54 2013<br>
@@ -61,6 +61,15 @@<br>
 // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto"<br>
 // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+fp-armv8"<br>
<br>
+// RUN: %clang -target armv8-linux-gnueabi -mfpu=none %s -### 2>&1 \<br>
+// RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s<br>
+// CHECK-NO-FP: "-target-feature" "-vfp2"<br>
+// CHECK-NO-FP: "-target-feature" "-vfp3"<br>
+// CHECK-NO-FP: "-target-feature" "-vfp4"<br>
+// CHECK-NO-FP: "-target-feature" "-fp-armv8"<br>
+// CHECK-NO-FP: "-target-feature" "-crypto"<br>
+// CHECK-NO-FP: "-target-feature" "-neon"<br>
+<br>
 // RUN: %clang -target arm-linux-gnueabihf %s -### 2>&1 \<br>
 // RUN:   | FileCheck --check-prefix=CHECK-HF %s<br>
 // CHECK-HF: "-target-cpu" "arm1136jf-s"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>