Date: Tuesday, November 3, 2015 @ 06:57:17
  Author: anatolik
Revision: 145720

FS#46951 backport Cortex-M7 patch from upstream

Added:
  arm-none-eabi-binutils/trunk/cortex_m7_support.patch
Modified:
  arm-none-eabi-binutils/trunk/PKGBUILD

-------------------------+
 PKGBUILD                |    7 
 cortex_m7_support.patch |  808 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 812 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2015-11-03 05:56:25 UTC (rev 145719)
+++ PKGBUILD    2015-11-03 05:57:17 UTC (rev 145720)
@@ -5,7 +5,7 @@
 _target=arm-none-eabi
 pkgname=$_target-binutils
 pkgver=2.25.1
-pkgrel=1
+pkgrel=2
 _commit=2bd25930
 pkgdesc='A set of programs to assemble and manipulate binary and object files 
for the ARM EABI (bare-metal) target'
 arch=(i686 x86_64)
@@ -13,10 +13,11 @@
 license=(GPL)
 depends=(zlib)
 source=(ftp://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}
-        
#binutils-${pkgver}-roundup-${_commit}.patch::https://sourceware.org/git/gitweb.cgi\?p=binutils-gdb.git\;a=commitdiff_plain\;h=${_commit}\;hp=binutils-2_25
+        cortex_m7_support.patch
         enable_link_arm_no_attributes.patch)
 sha1sums=('1d597ae063e3947a5f61e23ceda8aebf78405fcd'
           'SKIP'
+          'a4486f87d00435b181922bd1a64e15e576abf1e8'
           'c88cc0ed5f884332fa76b733fb47a26f307bde0f')
 validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93')  # Tristan Gingold 
<ging...@adacore.com>
 
@@ -24,7 +25,7 @@
   cd binutils-$pkgver
   sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure
   patch -p1 < ../enable_link_arm_no_attributes.patch # FS#43794
-  #patch -p1 < ../binutils-$pkgver-roundup-$_commit.patch
+  patch -p1 < ../cortex_m7_support.patch # FS#46951
 }
 
 build() {

Added: cortex_m7_support.patch
===================================================================
--- cortex_m7_support.patch                             (rev 0)
+++ cortex_m7_support.patch     2015-11-03 05:57:17 UTC (rev 145720)
@@ -0,0 +1,808 @@
+commit a715796ba188e7ca9eac6e613439b63fe50a677d
+Author: Terry Guo <terry....@arm.com>
+Date:   Fri Nov 21 11:31:37 2014 +0800
+
+    Support ARM Cortex-M7
+    
+    include/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * opcode/arm.h (FPU_VFP_EXT_ARMV8xD): New macro.
+       (FPU_VFP_V5D16): Likewise.
+       (FPU_VFP_V5_SP_D16): Likewise.
+       (FPU_ARCH_VFP_V5D16): Likewise.
+       (FPU_ARCH_VFP_V5_SP_D16): Likewise.
+    
+    bfd/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * elf32-arm.c (elf32_arm_merge_eabi_attributes): Support FPv5.
+    
+    binutils/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * readelf.c (arm_attr_tag_FP_arch): Extended to support FPv5.
+    
+    gas/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * config/tc-arm.c (fpu_vfp_ext_armv8xd): New.
+       (arm_cpus): Support cortex-m7.
+       (arm_fpus): Support fpv5-sp-d16 and fpv5-d16.
+       (do_vfp_nsyn_cvt_fpv8): Generate error when use D register for S
+       register only target like FPv5-SP-D16.
+       (do_neon_cvttb_1): Likewise.
+       (do_vfp_nsyn_fpv8): Likewise.
+       (do_vrint_1): Likewise.
+       (aeabi_set_public_attributes): Set proper FP arch for FPv5.
+       * doc/c-arm.texi: Document new cpu and fpu names for cortex-m7.
+    
+    gas/testsuite/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * gas/arm/armv7e-m+fpv5-d16.s: New.
+       * gas/arm/armv7e-m+fpv5-d16.d: Likewise.
+       * gas/arm/armv7e-m+fpv5-sp-d16.s: Likewise.
+       * gas/arm/armv7e-m+fpv5-sp-d16.d: Likewise.
+    
+    ld/testsuite/ChangeLog:
+    2014-11-21  Terry Guo  <terry....@arm.com>
+    
+       * ld-arm/attr-merge-vfp-4-sp.s: New test source file.
+       * ld-arm/attr-merge-vfp-5-sp.s: Likewise.
+       * ld-arm/attr-merge-vfp-5.s: Likewise.
+       * ld-arm/attr-merge-vfp-8.d: New test.
+       * ld-arm/attr-merge-vfp-8r.d: Likewise.
+       * ld-arm/attr-merge-vfp-9.d: Likewise.
+       * ld-arm/attr-merge-vfp-9r.d: Likewise.
+       * ld-arm/attr-merge-vfp-10.d: Likewise.
+       * ld-arm/attr-merge-vfp-10r.d: Likewise.
+       * ld-arm/attr-merge-vfp-11.d: Likewise.
+       * ld-arm/attr-merge-vfp-11r.d: Likewise.
+       * ld-arm/attr-merge-vfp-12.d: Likewise.
+       * ld-arm/attr-merge-vfp-12r.d: Likewise.
+       * ld-arm/attr-merge-vfp-13.d: Likewise.
+       * ld-arm/attr-merge-vfp-13r.d: Likewise.
+       * ld-arm/attr-merge-vfp-14.d: Likewise.
+       * ld-arm/attr-merge-vfp-14r.d: Likewise.
+       * ld-arm/arm-elf.exp: Run the new tests.
+
+diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
+index 95f59d5..1ff562c 100644
+--- a/bfd/elf32-arm.c
++++ b/bfd/elf32-arm.c
+@@ -11955,7 +11955,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
+                when it's 0.  It might mean absence of FP hardware if
+                Tag_FP_arch is zero, otherwise it is effectively SP + DP.  */
+ 
+-#define VFP_VERSION_COUNT 8
++#define VFP_VERSION_COUNT 9
+             static const struct
+             {
+                 int ver;
+@@ -11969,7 +11969,8 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
+                 {3, 16},
+                 {4, 32},
+                 {4, 16},
+-                {8, 32}
++                {8, 32},
++                {8, 16}
+               };
+             int ver;
+             int regs;
+diff --git a/binutils/readelf.c b/binutils/readelf.c
+index 6cead83..b7269d1 100644
+--- a/binutils/readelf.c
++++ b/binutils/readelf.c
+@@ -11887,7 +11887,7 @@ static const char * arm_attr_tag_THUMB_ISA_use[] =
+   {"No", "Thumb-1", "Thumb-2"};
+ static const char * arm_attr_tag_FP_arch[] =
+   {"No", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16", "VFPv4", "VFPv4-D16",
+-   "FP for ARMv8"};
++   "FP for ARMv8", "FPv5/FP-D16 for ARMv8"};
+ static const char * arm_attr_tag_WMMX_arch[] = {"No", "WMMXv1", "WMMXv2"};
+ static const char * arm_attr_tag_Advanced_SIMD_arch[] =
+   {"No", "NEONv1", "NEONv1 with Fused-MAC", "NEON for ARMv8"};
+diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
+index 9100fb2..f692cff 100644
+--- a/gas/config/tc-arm.c
++++ b/gas/config/tc-arm.c
+@@ -236,6 +236,8 @@ static const arm_feature_set fpu_neon_ext_fma = 
ARM_FEATURE (0, FPU_NEON_EXT_FMA
+ static const arm_feature_set fpu_vfp_ext_fma = ARM_FEATURE (0, 
FPU_VFP_EXT_FMA);
+ static const arm_feature_set fpu_vfp_ext_armv8 =
+   ARM_FEATURE (0, FPU_VFP_EXT_ARMV8);
++static const arm_feature_set fpu_vfp_ext_armv8xd =
++  ARM_FEATURE (0, FPU_VFP_EXT_ARMV8xD);
+ static const arm_feature_set fpu_neon_ext_armv8 =
+   ARM_FEATURE (0, FPU_NEON_EXT_ARMV8);
+ static const arm_feature_set fpu_crypto_ext_armv8 =
+@@ -15032,6 +15034,13 @@ do_vfp_nsyn_cvt_fpv8 (enum neon_cvt_flavour flavour,
+   int sz, op;
+   int rm;
+ 
++  /* Targets like FPv5-SP-D16 don't support FP v8 instructions with
++     D register operands.  */
++  if (flavour == neon_cvt_flavour_s32_f64
++      || flavour == neon_cvt_flavour_u32_f64)
++    constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
++              _(BAD_FPU));
++
+   set_it_insn_type (OUTSIDE_IT_INSN);
+ 
+   switch (flavour)
+@@ -15296,11 +15305,21 @@ do_neon_cvttb_1 (bfd_boolean t)
+     }
+   else if (neon_check_type (2, rs, N_F16, N_F64 | N_VFP).type != NT_invtype)
+     {
++      /* The VCVTB and VCVTT instructions with D-register operands
++         don't work for SP only targets.  */
++      constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
++                _(BAD_FPU));
++
+       inst.error = NULL;
+       do_neon_cvttb_2 (t, /*to=*/TRUE, /*is_double=*/TRUE);
+     }
+   else if (neon_check_type (2, rs, N_F64 | N_VFP, N_F16).type != NT_invtype)
+     {
++      /* The VCVTB and VCVTT instructions with D-register operands
++         don't work for SP only targets.  */
++      constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
++                _(BAD_FPU));
++
+       inst.error = NULL;
+       do_neon_cvttb_2 (t, /*to=*/FALSE, /*is_double=*/TRUE);
+     }
+@@ -16427,6 +16446,12 @@ do_neon_ldx_stx (void)
+ static void
+ do_vfp_nsyn_fpv8 (enum neon_shape rs)
+ {
++  /* Targets like FPv5-SP-D16 don't support FP v8 instructions with
++     D register operands.  */
++  if (neon_shape_class[rs] == SC_DOUBLE)
++    constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
++              _(BAD_FPU));
++
+   NEON_ENCODE (FPV8, inst);
+ 
+   if (rs == NS_FFF)
+@@ -16472,6 +16497,12 @@ do_vrint_1 (enum neon_cvt_mode mode)
+   if (rs == NS_NULL)
+     return;
+ 
++  /* Targets like FPv5-SP-D16 don't support FP v8 instructions with
++     D register operands.  */
++  if (neon_shape_class[rs] == SC_DOUBLE)
++    constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
++              _(BAD_FPU));
++
+   et = neon_check_type (2, rs, N_EQK | N_VFP, N_F32 | N_F64 | N_KEY | N_VFP);
+   if (et.type != NT_invtype)
+     {
+@@ -18953,9 +18984,9 @@ static const struct asm_opcode insns[] =
+ 
+   /* FP for ARMv8.  */
+ #undef  ARM_VARIANT
+-#define ARM_VARIANT   & fpu_vfp_ext_armv8
++#define ARM_VARIANT   & fpu_vfp_ext_armv8xd
+ #undef  THUMB_VARIANT
+-#define THUMB_VARIANT & fpu_vfp_ext_armv8
++#define THUMB_VARIANT & fpu_vfp_ext_armv8xd
+ 
+   nUF(vseleq, _vseleq, 3, (RVSD, RVSD, RVSD),         vsel),
+   nUF(vselvs, _vselvs, 3, (RVSD, RVSD, RVSD),         vsel),
+@@ -24406,6 +24437,7 @@ static const struct arm_cpu_option_table arm_cpus[] =
+   ARM_CPU_OPT ("cortex-r7",   ARM_ARCH_V7R_IDIV,
+                                                FPU_ARCH_VFP_V3D16,
+                                                                 "Cortex-R7"),
++  ARM_CPU_OPT ("cortex-m7",   ARM_ARCH_V7EM,   FPU_NONE,        "Cortex-M7"),
+   ARM_CPU_OPT ("cortex-m4",   ARM_ARCH_V7EM,   FPU_NONE,        "Cortex-M4"),
+   ARM_CPU_OPT ("cortex-m3",   ARM_ARCH_V7M,    FPU_NONE,        "Cortex-M3"),
+   ARM_CPU_OPT ("cortex-m1",   ARM_ARCH_V6SM,   FPU_NONE,        "Cortex-M1"),
+@@ -24574,6 +24606,8 @@ static const struct arm_option_fpu_value_table 
arm_fpus[] =
+   {"vfpv4",           FPU_ARCH_VFP_V4},
+   {"vfpv4-d16",               FPU_ARCH_VFP_V4D16},
+   {"fpv4-sp-d16",     FPU_ARCH_VFP_V4_SP_D16},
++  {"fpv5-d16",                FPU_ARCH_VFP_V5D16},
++  {"fpv5-sp-d16",     FPU_ARCH_VFP_V5_SP_D16},
+   {"neon-vfpv4",      FPU_ARCH_NEON_VFP_V4},
+   {"fp-armv8",                FPU_ARCH_VFP_ARMV8},
+   {"neon-fp-armv8",   FPU_ARCH_NEON_VFP_ARMV8},
+@@ -25199,8 +25233,10 @@ aeabi_set_public_attributes (void)
+       ARM_CPU_HAS_FEATURE (flags, arm_arch_t2) ? 2 : 1);
+ 
+   /* Tag_VFP_arch.  */
+-  if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_armv8))
+-    aeabi_set_attribute_int (Tag_VFP_arch, 7);
++  if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_armv8xd))
++    aeabi_set_attribute_int (Tag_VFP_arch,
++                           ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_d32)
++                           ? 7 : 8);
+   else if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_fma))
+     aeabi_set_attribute_int (Tag_VFP_arch,
+                            ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_d32)
+diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
+index 7bcce94..12952a7 100644
+--- a/gas/doc/c-arm.texi
++++ b/gas/doc/c-arm.texi
+@@ -123,6 +123,7 @@ recognized:
+ @code{cortex-r4f},
+ @code{cortex-r5},
+ @code{cortex-r7},
++@code{cortex-m7},
+ @code{cortex-m4},
+ @code{cortex-m3},
+ @code{cortex-m1},
+@@ -247,6 +248,8 @@ The following format options are recognized:
+ @code{vfpv4},
+ @code{vfpv4-d16},
+ @code{fpv4-sp-d16},
++@code{fpv5-sp-d16},
++@code{fpv5-d16},
+ @code{fp-armv8},
+ @code{arm1020t},
+ @code{arm1020e},
+diff --git a/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.d 
b/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.d
+new file mode 100644
+index 0000000..2951b1b
+--- /dev/null
++++ b/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.d
+@@ -0,0 +1,60 @@
++#name: Valid v7e-m+fpv5-d16
++#objdump: -dr --prefix-addresses --show-raw-insn
++
++.*: +file format .*arm.*
++
++Disassembly of section .text:
++0[0-9a-f]+ <[^>]+> fe00 0a00  vseleq.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fe50 0aa0  vselvs.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe2f fa0f  vselge.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fe7f faaf  vselgt.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> fe00 0b00  vseleq.f64      d0, d0, d0
++0[0-9a-f]+ <[^>]+> fe18 8b08  vselvs.f64      d8, d8, d8
++0[0-9a-f]+ <[^>]+> fe2f fb0f  vselge.f64      d15, d15, d15
++0[0-9a-f]+ <[^>]+> fe3a ab0a  vselgt.f64      d10, d10, d10
++0[0-9a-f]+ <[^>]+> fe80 0a00  vmaxnm.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fec0 0aa0  vmaxnm.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe8f fa0f  vmaxnm.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fecf faaf  vmaxnm.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> fe80 0b00  vmaxnm.f64      d0, d0, d0
++0[0-9a-f]+ <[^>]+> fe88 8b08  vmaxnm.f64      d8, d8, d8
++0[0-9a-f]+ <[^>]+> fe8f fb0f  vmaxnm.f64      d15, d15, d15
++0[0-9a-f]+ <[^>]+> fe8a ab0a  vmaxnm.f64      d10, d10, d10
++0[0-9a-f]+ <[^>]+> fe80 0a40  vminnm.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fec0 0ae0  vminnm.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe8f fa4f  vminnm.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fecf faef  vminnm.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> fe80 0b40  vminnm.f64      d0, d0, d0
++0[0-9a-f]+ <[^>]+> fe88 8b48  vminnm.f64      d8, d8, d8
++0[0-9a-f]+ <[^>]+> fe8f fb4f  vminnm.f64      d15, d15, d15
++0[0-9a-f]+ <[^>]+> fe8a ab4a  vminnm.f64      d10, d10, d10
++0[0-9a-f]+ <[^>]+> febc 0ac0  vcvta.s32.f32   s0, s0
++0[0-9a-f]+ <[^>]+> fefd 0ae0  vcvtn.s32.f32   s1, s1
++0[0-9a-f]+ <[^>]+> febe fa4f  vcvtp.u32.f32   s30, s30
++0[0-9a-f]+ <[^>]+> feff fa6f  vcvtm.u32.f32   s31, s31
++0[0-9a-f]+ <[^>]+> febc 0bc0  vcvta.s32.f64   s0, d0
++0[0-9a-f]+ <[^>]+> fefd 0bc8  vcvtn.s32.f64   s1, d8
++0[0-9a-f]+ <[^>]+> febe fb4f  vcvtp.u32.f64   s30, d15
++0[0-9a-f]+ <[^>]+> feff fb4a  vcvtm.u32.f64   s31, d10
++0[0-9a-f]+ <[^>]+> eeb6 0ac0  vrintz.f32      s0, s0
++0[0-9a-f]+ <[^>]+> eef7 0a60  vrintx.f32      s1, s1
++0[0-9a-f]+ <[^>]+> eeb6 fa4f  vrintr.f32      s30, s30
++0[0-9a-f]+ <[^>]+> feb8 0a40  vrinta.f32      s0, s0
++0[0-9a-f]+ <[^>]+> fef9 0a60  vrintn.f32      s1, s1
++0[0-9a-f]+ <[^>]+> feba fa4f  vrintp.f32      s30, s30
++0[0-9a-f]+ <[^>]+> fefb fa6f  vrintm.f32      s31, s31
++0[0-9a-f]+ <[^>]+> eeb6 0bc0  vrintz.f64      d0, d0
++0[0-9a-f]+ <[^>]+> eeb7 1b41  vrintx.f64      d1, d1
++0[0-9a-f]+ <[^>]+> eeb6 ab4a  vrintr.f64      d10, d10
++0[0-9a-f]+ <[^>]+> feb8 0b40  vrinta.f64      d0, d0
++0[0-9a-f]+ <[^>]+> feb9 1b41  vrintn.f64      d1, d1
++0[0-9a-f]+ <[^>]+> feba ab4a  vrintp.f64      d10, d10
++0[0-9a-f]+ <[^>]+> febb ab4a  vrintm.f64      d10, d10
++0[0-9a-f]+ <[^>]+> eeb3 0bc0  vcvtt.f16.f64   s0, d0
++0[0-9a-f]+ <[^>]+> eef3 0b48  vcvtb.f16.f64   s1, d8
++0[0-9a-f]+ <[^>]+> eeb3 fbcf  vcvtt.f16.f64   s30, d15
++0[0-9a-f]+ <[^>]+> eef3 fb4a  vcvtb.f16.f64   s31, d10
++0[0-9a-f]+ <[^>]+> eeb2 0bc0  vcvtt.f64.f16   d0, s0
++0[0-9a-f]+ <[^>]+> eeb2 8b60  vcvtb.f64.f16   d8, s1
++0[0-9a-f]+ <[^>]+> eeb2 fbcf  vcvtt.f64.f16   d15, s30
++0[0-9a-f]+ <[^>]+> eeb2 ab6f  vcvtb.f64.f16   d10, s31
+diff --git a/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.s 
b/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.s
+new file mode 100644
+index 0000000..06fba06
+--- /dev/null
++++ b/gas/testsuite/gas/arm/armv7e-m+fpv5-d16.s
+@@ -0,0 +1,60 @@
++      .syntax unified
++      .text
++      .arch armv7e-m
++      .fpu fpv5-d16
++
++      .thumb
++      vseleq.f32      s0, s0, s0
++      vselvs.f32      s1, s1, s1
++      vselge.f32      s30, s30, s30
++      vselgt.f32      s31, s31, s31
++      vseleq.f64      d0, d0, d0
++      vselvs.f64      d8, d8, d8
++      vselge.f64      d15, d15, d15
++      vselgt.f64      d10, d10, d10
++      vmaxnm.f32      s0, s0, s0
++      vmaxnm.f32      s1, s1, s1
++      vmaxnm.f32      s30, s30, s30
++      vmaxnm.f32      s31, s31, s31
++      vmaxnm.f64      d0, d0, d0
++      vmaxnm.f64      d8, d8, d8
++      vmaxnm.f64      d15, d15, d15
++      vmaxnm.f64      d10, d10, d10
++      vminnm.f32      s0, s0, s0
++      vminnm.f32      s1, s1, s1
++      vminnm.f32      s30, s30, s30
++      vminnm.f32      s31, s31, s31
++      vminnm.f64      d0, d0, d0
++      vminnm.f64      d8, d8, d8
++      vminnm.f64      d15, d15, d15
++      vminnm.f64      d10, d10, d10
++      vcvta.s32.f32   s0, s0
++      vcvtn.s32.f32   s1, s1
++      vcvtp.u32.f32   s30, s30
++      vcvtm.u32.f32   s31, s31
++      vcvta.s32.f64   s0, d0
++      vcvtn.s32.f64   s1, d8
++      vcvtp.u32.f64   s30, d15
++      vcvtm.u32.f64   s31, d10
++      vrintz.f32      s0, s0
++        vrintx.f32    s1, s1
++        vrintr.f32    s30, s30
++      vrinta.f32      s0, s0
++      vrintn.f32      s1, s1
++      vrintp.f32      s30, s30
++      vrintm.f32      s31, s31
++      vrintz.f64      d0, d0
++        vrintx.f64    d1, d1
++        vrintr.f64    d10, d10
++      vrinta.f64      d0, d0
++      vrintn.f64      d1, d1
++      vrintp.f64      d10, d10
++      vrintm.f64      d10, d10
++      vcvtt.f16.f64   s0, d0
++      vcvtb.f16.f64   s1, d8
++      vcvtt.f16.f64   s30, d15
++      vcvtb.f16.f64   s31, d10
++      vcvtt.f64.f16   d0, s0
++      vcvtb.f64.f16   d8, s1
++      vcvtt.f64.f16   d15, s30
++      vcvtb.f64.f16   d10, s31
+diff --git a/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.d 
b/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.d
+new file mode 100644
+index 0000000..84ed3b0
+--- /dev/null
++++ b/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.d
+@@ -0,0 +1,28 @@
++#objdump: -dr --prefix-addresses --show-raw-insn
++
++.*: +file format .*arm.*
++
++Disassembly of section .text:
++0[0-9a-f]+ <[^>]+> fe00 0a00  vseleq.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fe50 0aa0  vselvs.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe2f fa0f  vselge.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fe7f faaf  vselgt.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> fe80 0a00  vmaxnm.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fec0 0aa0  vmaxnm.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe8f fa0f  vmaxnm.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fecf faaf  vmaxnm.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> fe80 0a40  vminnm.f32      s0, s0, s0
++0[0-9a-f]+ <[^>]+> fec0 0ae0  vminnm.f32      s1, s1, s1
++0[0-9a-f]+ <[^>]+> fe8f fa4f  vminnm.f32      s30, s30, s30
++0[0-9a-f]+ <[^>]+> fecf faef  vminnm.f32      s31, s31, s31
++0[0-9a-f]+ <[^>]+> febc 0ac0  vcvta.s32.f32   s0, s0
++0[0-9a-f]+ <[^>]+> fefd 0ae0  vcvtn.s32.f32   s1, s1
++0[0-9a-f]+ <[^>]+> febe fa4f  vcvtp.u32.f32   s30, s30
++0[0-9a-f]+ <[^>]+> feff fa6f  vcvtm.u32.f32   s31, s31
++0[0-9a-f]+ <[^>]+> eeb6 0ac0  vrintz.f32      s0, s0
++0[0-9a-f]+ <[^>]+> eef7 0a60  vrintx.f32      s1, s1
++0[0-9a-f]+ <[^>]+> eeb6 fa4f  vrintr.f32      s30, s30
++0[0-9a-f]+ <[^>]+> feb8 0a40  vrinta.f32      s0, s0
++0[0-9a-f]+ <[^>]+> fef9 0a60  vrintn.f32      s1, s1
++0[0-9a-f]+ <[^>]+> feba fa4f  vrintp.f32      s30, s30
++0[0-9a-f]+ <[^>]+> fefb fa6f  vrintm.f32      s31, s31
+diff --git a/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.s 
b/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.s
+new file mode 100644
+index 0000000..0fee290
+--- /dev/null
++++ b/gas/testsuite/gas/arm/armv7e-m+fpv5-sp-d16.s
+@@ -0,0 +1,29 @@
++      .syntax unified
++      .text
++      .arch armv7e-m
++      .fpu fpv5-sp-d16
++
++      .thumb
++      vseleq.f32      s0, s0, s0
++      vselvs.f32      s1, s1, s1
++      vselge.f32      s30, s30, s30
++      vselgt.f32      s31, s31, s31
++      vmaxnm.f32      s0, s0, s0
++      vmaxnm.f32      s1, s1, s1
++      vmaxnm.f32      s30, s30, s30
++      vmaxnm.f32      s31, s31, s31
++      vminnm.f32      s0, s0, s0
++      vminnm.f32      s1, s1, s1
++      vminnm.f32      s30, s30, s30
++      vminnm.f32      s31, s31, s31
++      vcvta.s32.f32   s0, s0
++      vcvtn.s32.f32   s1, s1
++      vcvtp.u32.f32   s30, s30
++      vcvtm.u32.f32   s31, s31
++      vrintz.f32      s0, s0
++        vrintx.f32    s1, s1
++        vrintr.f32    s30, s30
++      vrinta.f32      s0, s0
++      vrintn.f32      s1, s1
++      vrintp.f32      s30, s30
++      vrintm.f32      s31, s31
+diff --git a/include/opcode/arm.h b/include/opcode/arm.h
+index 6d4825a..00475e1 100644
+--- a/include/opcode/arm.h
++++ b/include/opcode/arm.h
+@@ -78,10 +78,11 @@
+ #define FPU_VFP_EXT_FP16 0x00100000   /* Half-precision extensions. */
+ #define FPU_NEON_EXT_FMA 0x00080000   /* Neon fused multiply-add    */
+ #define FPU_VFP_EXT_FMA        0x00040000     /* VFP fused multiply-add     */
+-#define FPU_VFP_EXT_ARMV8 0x00020000  /* FP for ARMv8.  */
++#define FPU_VFP_EXT_ARMV8 0x00020000  /* Double-precision FP for ARMv8.  */
+ #define FPU_NEON_EXT_ARMV8 0x00010000 /* Neon for ARMv8.  */
+ #define FPU_CRYPTO_EXT_ARMV8 0x00008000       /* Crypto for ARMv8.  */
+ #define CRC_EXT_ARMV8  0x00004000     /* CRC32 for ARMv8.  */
++#define FPU_VFP_EXT_ARMV8xD 0x00002000        /* Single-precision FP for 
ARMv8.  */
+ 
+ /* Architectures are the sum of the base and extensions.  The ARM ARM (rev E)
+    defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
+@@ -153,7 +154,9 @@
+ #define FPU_VFP_V4D16 (FPU_VFP_V3D16 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
+ #define FPU_VFP_V4    (FPU_VFP_V3 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
+ #define FPU_VFP_V4_SP_D16 (FPU_VFP_V3xD | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)
+-#define FPU_VFP_ARMV8 (FPU_VFP_V4 | FPU_VFP_EXT_ARMV8)
++#define FPU_VFP_V5D16 (FPU_VFP_V4D16 | FPU_VFP_EXT_ARMV8xD | 
FPU_VFP_EXT_ARMV8)
++#define FPU_VFP_V5_SP_D16 (FPU_VFP_V4_SP_D16 | FPU_VFP_EXT_ARMV8xD)
++#define FPU_VFP_ARMV8 (FPU_VFP_V4 | FPU_VFP_EXT_ARMV8 | FPU_VFP_EXT_ARMV8xD)
+ #define FPU_NEON_ARMV8        (FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA | 
FPU_NEON_EXT_ARMV8)
+ #define FPU_CRYPTO_ARMV8 (FPU_CRYPTO_EXT_ARMV8)
+ #define FPU_VFP_HARD  (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
+@@ -186,6 +189,8 @@
+ #define FPU_ARCH_VFP_V4 ARM_FEATURE(0, FPU_VFP_V4)
+ #define FPU_ARCH_VFP_V4D16 ARM_FEATURE(0, FPU_VFP_V4D16)
+ #define FPU_ARCH_VFP_V4_SP_D16 ARM_FEATURE(0, FPU_VFP_V4_SP_D16)
++#define FPU_ARCH_VFP_V5D16 ARM_FEATURE(0, FPU_VFP_V5D16)
++#define FPU_ARCH_VFP_V5_SP_D16 ARM_FEATURE(0, FPU_VFP_V5_SP_D16)
+ #define FPU_ARCH_NEON_VFP_V4 \
+   ARM_FEATURE(0, FPU_VFP_V4 | FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA)
+ #define FPU_ARCH_VFP_ARMV8 ARM_FEATURE(0, FPU_VFP_ARMV8)
+diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
+index d00b74d..8aacb69 100644
+--- a/ld/testsuite/ld-arm/arm-elf.exp
++++ b/ld/testsuite/ld-arm/arm-elf.exp
+@@ -877,6 +877,20 @@ run_dump_test "attr-merge-vfp-6"
+ run_dump_test "attr-merge-vfp-6r"
+ run_dump_test "attr-merge-vfp-7"
+ run_dump_test "attr-merge-vfp-7r"
++run_dump_test "attr-merge-vfp-8"
++run_dump_test "attr-merge-vfp-8r"
++run_dump_test "attr-merge-vfp-9"
++run_dump_test "attr-merge-vfp-9r"
++run_dump_test "attr-merge-vfp-10"
++run_dump_test "attr-merge-vfp-10r"
++run_dump_test "attr-merge-vfp-11"
++run_dump_test "attr-merge-vfp-11r"
++run_dump_test "attr-merge-vfp-12"
++run_dump_test "attr-merge-vfp-12r"
++run_dump_test "attr-merge-vfp-13"
++run_dump_test "attr-merge-vfp-13r"
++run_dump_test "attr-merge-vfp-14"
++run_dump_test "attr-merge-vfp-14r"
+ run_dump_test "attr-merge-incompatible"
+ run_dump_test "attr-merge-arch-2"
+ run_dump_test "attr-merge-nosection-1"
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-10.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-10.d
+new file mode 100644
+index 0000000..f32f119
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-10.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5.s
++#source: attr-merge-vfp-4-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-10r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-10r.d
+new file mode 100644
+index 0000000..35e0f77
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-10r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-4-sp.s
++#source: attr-merge-vfp-5.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-11.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-11.d
+new file mode 100644
+index 0000000..428410b
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-11.d
+@@ -0,0 +1,13 @@
++#source: attr-merge-vfp-5.s
++#source: attr-merge-vfp-armv8.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-11r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-11r.d
+new file mode 100644
+index 0000000..fec7983
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-11r.d
+@@ -0,0 +1,13 @@
++#source: attr-merge-vfp-armv8.s
++#source: attr-merge-vfp-5.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-12.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-12.d
+new file mode 100644
+index 0000000..f6dff81
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-12.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5-sp.s
++#source: attr-merge-vfp-armv8.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-12r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-12r.d
+new file mode 100644
+index 0000000..1ce719d
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-12r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-armv8.s
++#source: attr-merge-vfp-5-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-13.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-13.d
+new file mode 100644
+index 0000000..b79f606
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-13.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5.s
++#source: attr-merge-vfp-armv8-hard.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-13r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-13r.d
+new file mode 100644
+index 0000000..4633d4e
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-13r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-armv8-hard.s
++#source: attr-merge-vfp-5.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-14.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-14.d
+new file mode 100644
+index 0000000..b93ef50
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-14.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5-sp.s
++#source: attr-merge-vfp-armv8-hard.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-14r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-14r.d
+new file mode 100644
+index 0000000..2563938
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-14r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-armv8-hard.s
++#source: attr-merge-vfp-5-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FP for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-4-sp.s 
b/ld/testsuite/ld-arm/attr-merge-vfp-4-sp.s
+new file mode 100644
+index 0000000..71527df
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-4-sp.s
+@@ -0,0 +1,2 @@
++.fpu fpv4-sp-d16
++
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-5-sp.s 
b/ld/testsuite/ld-arm/attr-merge-vfp-5-sp.s
+new file mode 100644
+index 0000000..a617adc
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-5-sp.s
+@@ -0,0 +1,2 @@
++.fpu fpv5-sp-d16
++
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-5.s 
b/ld/testsuite/ld-arm/attr-merge-vfp-5.s
+new file mode 100644
+index 0000000..cee3863
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-5.s
+@@ -0,0 +1,2 @@
++.fpu fpv5-d16
++
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-8.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-8.d
+new file mode 100644
+index 0000000..78b74af
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-8.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5.s
++#source: attr-merge-vfp-5-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-8r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-8r.d
+new file mode 100644
+index 0000000..1fd5d63
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-8r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5-sp.s
++#source: attr-merge-vfp-5.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP and DP
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-9.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-9.d
+new file mode 100644
+index 0000000..bdf3bc1
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-9.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-4-sp.s
++#source: attr-merge-vfp-5-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP only
+diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-9r.d 
b/ld/testsuite/ld-arm/attr-merge-vfp-9r.d
+new file mode 100644
+index 0000000..78ead24
+--- /dev/null
++++ b/ld/testsuite/ld-arm/attr-merge-vfp-9r.d
+@@ -0,0 +1,14 @@
++#source: attr-merge-vfp-5-sp.s
++#source: attr-merge-vfp-4-sp.s
++#as:
++#ld: -r
++#readelf: -A
++# This test is only valid on ELF based ports.
++# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
++
++Attribute Section: aeabi
++File Attributes
++  Tag_ARM_ISA_use: Yes
++  Tag_THUMB_ISA_use: Thumb-1
++  Tag_FP_arch: FPv5/FP-D16 for ARMv8
++  Tag_ABI_HardFP_use: SP only

Reply via email to