[llvm] r227603 - ARM: further correct .fpu directive handling

Saleem Abdulrasool compnerd at compnerd.org
Fri Jan 30 11:35:19 PST 2015


Author: compnerd
Date: Fri Jan 30 13:35:18 2015
New Revision: 227603

URL: http://llvm.org/viewvc/llvm-project?rev=227603&view=rev
Log:
ARM: further correct .fpu directive handling

If the original FPU specification involved a restricted VFP unit (d16), ensure
that we reset the functionality when we encounter a new FPU type.  In
particular, if the user specified vfpv3-d16, but switched to a VFPv3 (which has
32 double precision registers), we would fail to reset the D16 feature, and
treat it as being equivalent to vfpv3-d16.

Added:
    llvm/trunk/test/MC/ARM/pr22395-2.s
Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=227603&r1=227602&r2=227603&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Fri Jan 30 13:35:18 2015
@@ -9197,11 +9197,12 @@ static const struct {
 } FPUs[] = {
     {ARM::VFP, ARM::FeatureVFP2, ARM::FeatureNEON},
     {ARM::VFPV2, ARM::FeatureVFP2, ARM::FeatureNEON},
-    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3, ARM::FeatureNEON},
+    {ARM::VFPV3, ARM::FeatureVFP2 | ARM::FeatureVFP3,
+     ARM::FeatureNEON | ARM::FeatureD16},
     {ARM::VFPV3_D16, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureD16,
      ARM::FeatureNEON},
     {ARM::VFPV4, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4,
-     ARM::FeatureNEON},
+     ARM::FeatureNEON | ARM::FeatureD16},
     {ARM::VFPV4_D16,
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureD16,
      ARM::FeatureNEON},
@@ -9210,19 +9211,20 @@ static const struct {
      ARM::FeatureNEON | ARM::FeatureCrypto},
     {ARM::FP_ARMV8, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
                         ARM::FeatureFPARMv8,
-     ARM::FeatureNEON | ARM::FeatureCrypto},
-    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON, 0},
+     ARM::FeatureNEON | ARM::FeatureCrypto | ARM::FeatureD16},
+    {ARM::NEON, ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureNEON,
+     ARM::FeatureD16},
     {ARM::NEON_VFPV4,
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 | ARM::FeatureNEON,
-     0},
+     ARM::FeatureD16},
     {ARM::NEON_FP_ARMV8,
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
          ARM::FeatureFPARMv8 | ARM::FeatureNEON,
-     ARM::FeatureCrypto},
+     ARM::FeatureCrypto | ARM::FeatureD16},
     {ARM::CRYPTO_NEON_FP_ARMV8,
      ARM::FeatureVFP2 | ARM::FeatureVFP3 | ARM::FeatureVFP4 |
          ARM::FeatureFPARMv8 | ARM::FeatureNEON | ARM::FeatureCrypto,
-     0},
+     ARM::FeatureD16},
     {ARM::SOFTVFP, 0, 0},
 };
 

Added: llvm/trunk/test/MC/ARM/pr22395-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/pr22395-2.s?rev=227603&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/pr22395-2.s (added)
+++ llvm/trunk/test/MC/ARM/pr22395-2.s Fri Jan 30 13:35:18 2015
@@ -0,0 +1,37 @@
+@ RUN: llvm-mc -triple armv4t-eabi -mattr +d16 -filetype asm -o - %s 2>&1 | FileCheck %s
+
+	.text
+	.thumb
+
+	.p2align 2
+
+	.fpu vfpv3
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+
+	.fpu vfpv4
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+
+	.fpu neon
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+
+	.fpu neon-vfpv4
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+
+	.fpu neon-fp-armv8
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+
+	.fpu crypto-neon-fp-armv8
+	vldmia r0, {d16-d31}
+@ CHECK: vldmia	r0, {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31}
+@ CHECK-NOT: error: register expected
+





More information about the llvm-commits mailing list