[ARMv8] Emit the proper .fpu directive.
authorJoey Gouly <joey.gouly@arm.com>
Fri, 13 Sep 2013 11:51:52 +0000 (11:51 +0000)
committerJoey Gouly <joey.gouly@arm.com>
Fri, 13 Sep 2013 11:51:52 +0000 (11:51 +0000)
Patch by Bradley Smith!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190683 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMAsmPrinter.cpp
test/CodeGen/ARM/2010-09-29-mc-asm-header-test.ll

index 0e940452b143d0f61b74fc2b11f30f607b0a8d6d..ff43d46327c0d2a34995b909d5a1058c9ac06314 100644 (file)
@@ -807,8 +807,11 @@ void ARMAsmPrinter::emitAttributes() {
 
   if (Subtarget->hasNEON() && emitFPU) {
     /* NEON is not exactly a VFP architecture, but GAS emit one of
-     * neon/neon-vfpv4/vfpv3/vfpv2 for .fpu parameters */
-    if (Subtarget->hasVFP4())
+     * neon/neon-fp-armv8/neon-vfpv4/vfpv3/vfpv2 for .fpu parameters */
+    if (Subtarget->hasV8FP())
+      AttrEmitter->EmitTextAttribute(ARMBuildAttrs::Advanced_SIMD_arch,
+                                     "neon-fp-armv8");
+    else if (Subtarget->hasVFP4())
       AttrEmitter->EmitTextAttribute(ARMBuildAttrs::Advanced_SIMD_arch,
                                      "neon-vfpv4");
     else
@@ -823,7 +826,7 @@ void ARMAsmPrinter::emitAttributes() {
     AttrEmitter->EmitAttribute(ARMBuildAttrs::VFP_arch,
                                ARMBuildAttrs::AllowV8FPA);
     if (emitFPU)
-      AttrEmitter->EmitTextAttribute(ARMBuildAttrs::VFP_arch, "v8fp");
+      AttrEmitter->EmitTextAttribute(ARMBuildAttrs::VFP_arch, "fp-armv8");
     /* VFPv4 + .fpu */
   } else if (Subtarget->hasVFP4()) {
     AttrEmitter->EmitAttribute(ARMBuildAttrs::VFP_arch,
index e6d1518b737ace2ff4b8cc6270a2dbca03e33997..174a641c6e1c5e67e51d43b0725b5e766a3f171f 100644 (file)
@@ -3,6 +3,7 @@
 ; RUN: llc < %s -mtriple=thumbv8-linux-gnueabi | FileCheck %s --check-prefix=Vt8
 ; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mattr=+v8fp | FileCheck %s --check-prefix=V8-V8FP
 ; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mattr=+neon | FileCheck %s --check-prefix=V8-NEON
+; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mattr=+v8fp -mattr=+neon | FileCheck %s --check-prefix=V8-V8FP-NEON
 ; This tests that MC/asm header conversion is smooth
 ;
 ; V7:      .syntax unified
 ; V8-V8FP:      .syntax unified
 ; V8-V8FP: .eabi_attribute 6, 14
 ; V8-V8FP: .eabi_attribute 10, 7
+; V8-V8FP: .fpu fp-armv8
 
 ; V8-NEON:      .syntax unified
 ; V8-NEON: .eabi_attribute 6, 14
 ; V8-NEON: .eabi_attribute 12, 3
 
+; V8-V8FP-NEON:      .syntax unified
+; V8-V8FP-NEON: .eabi_attribute 6, 14
+; V8-V8FP-NEON: .fpu neon-fp-armv8
+; V8-V8FP-NEON: .eabi_attribute 10, 7
+
 define i32 @f(i64 %z) {
        ret i32 0
 }