<div dir="ltr"><div><div class="gmail_extra">On Fri, Jan 30, 2015 at 11:35 AM, Saleem Abdulrasool <span dir="ltr"><<a href="mailto:compnerd@compnerd.org" target="_blank">compnerd@compnerd.org</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: compnerd<br>
Date: Fri Jan 30 13:35:18 2015<br>
New Revision: 227603<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227603&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227603&view=rev</a><br>
Log:<br>
ARM: further correct .fpu directive handling<br>
<br>
If the original FPU specification involved a restricted VFP unit (d16), ensure<br>
that we reset the functionality when we encounter a new FPU type.  In<br>
particular, if the user specified vfpv3-d16, but switched to a VFPv3 (which has<br>
32 double precision registers), we would fail to reset the D16 feature, and<br>
treat it as being equivalent to vfpv3-d16.<br>
<br>
Added:<br>
    llvm/trunk/test/MC/ARM/pr22395-2.s<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=227603&r1=227602&r2=227603&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=227603&r1=227602&r2=227603&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Fri Jan 30 13:35:18 2015<br>
@@ -9197,11 +9197,12 @@ static const struct {<br>
 } FPUs[] = {<br>
     {ARM::VFP, ARM::FeatureVFP2, ARM::FeatureNEON},<br>
     {ARM::VFPV2, ARM::FeatureVFP2, ARM::FeatureNEON},<br>
-    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3, ARM::FeatureNEON},<br>
+    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3,<br>
+     ARM::FeatureNEON | ARM::FeatureD16},<br>
     {ARM::VFPV3_D16, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureD16,<br>
      ARM::FeatureNEON},<br>
     {ARM::VFPV4, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4,<br>
-     ARM::FeatureNEON},<br>
+     ARM::FeatureNEON | ARM::FeatureD16},<br>
     {ARM::VFPV4_D16,<br>
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureD16,<br>
      ARM::FeatureNEON},<br>
@@ -9210,19 +9211,20 @@ static const struct {<br>
      ARM::FeatureNEON | ARM::FeatureCrypto},<br>
     {ARM::FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |<br>
                         ARM::FeatureFPARMv8,<br>
-     ARM::FeatureNEON | ARM::FeatureCrypto},<br>
-    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON, 0},<br>
+     ARM::FeatureNEON | ARM::FeatureCrypto | ARM::FeatureD16},<br>
+    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON,<br>
+     ARM::FeatureD16},<br>
     {ARM::NEON_VFPV4,<br>
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureNEON,<br>
-     0},<br>
+     ARM::FeatureD16},<br>
     {ARM::NEON_FP_ARMV8,<br>
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |<br>
          ARM::FeatureFPARMv8 | ARM::FeatureNEON,<br>
-     ARM::FeatureCrypto},<br>
+     ARM::FeatureCrypto | ARM::FeatureD16},<br>
     {ARM::CRYPTO_NEON_FP_ARMV8,<br>
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |<br>
          ARM::FeatureFPARMv8 | ARM::FeatureNEON | ARM::FeatureCrypto,<br>
-     0},<br>
+     ARM::FeatureD16},<br>
     {ARM::SOFTVFP, 0, 0},<br>
 };<br>
<br>
<br>
Added: llvm/trunk/test/MC/ARM/pr22395-2.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/pr22395-2.s?rev=227603&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/pr22395-2.s?rev=227603&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/MC/ARM/pr22395-2.s (added)<br>
+++ llvm/trunk/test/MC/ARM/pr22395-2.s Fri Jan 30 13:35:18 2015<br>
@@ -0,0 +1,37 @@<br>
+@ RUN: llvm-mc -triple armv4t-eabi -mattr +d16 -filetype asm -o - %s 2>&1 | FileCheck %s<br>
+<br>
+       .text<br>
+       .thumb<br>
+<br>
+       .p2align 2<br>
+<br>
+       .fpu vfpv3<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br>
+       .fpu vfpv4<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br>
+       .fpu neon<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br>
+       .fpu neon-vfpv4<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br>
+       .fpu neon-fp-armv8<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br>
+       .fpu crypto-neon-fp-armv8<br>
+       vldmia r0, {d16-d31}<br>
+@ CHECK: vldmia        r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}<br>
+@ CHECK-NOT: error: register expected<br>
+<br><br></blockquote><div><br></div><div>Hi Hans,<div><br></div><div>I think that we should also grab this for 3.6 as it fixes another case that we didn't handle correctly previously (but this time is dependent on the flags that users specify).  The change is similar in vein to SVN r227584.</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br>-- <br><div class="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>
</div></div></div>