OSDN Git Service

2008-03-09 Paul Brook <paul@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Sun, 9 Mar 2008 13:23:29 +0000 (13:23 +0000)
committerPaul Brook <paul@codesourcery.com>
Sun, 9 Mar 2008 13:23:29 +0000 (13:23 +0000)
bfd/
* elf32-arm.c (elf32_arm_merge_eabi_attributes): Handle new
Tag_VFP_arch values.

binutils/
* readelf.c (arm_attr_tag_VFP_arch): Add "VFPv3-D16".

gas/
* config/tc-arm.c (fpu_vfp_ext_d32): New vairable.
(parse_vfp_reg_list, encode_arm_vfp_reg): Use it.
(arm_option_cpu_value): Add vfpv3-d16, vfpv2 and vfpv3.
(aeabi_set_public_attributes): Handle Tag_VFP_arch=VFPV3-D16.
* doc/c-arm.texi: Document new ARM FPU variants.

gas/testsuite/
* gas/arm/vfpv3-d16-bad.d: New test.
* gas/arm/vfpv3-d16-bad.l: New test.

include/opcode/
* arm.h (FPU_VFP_EXT_D32, FPU_VFP_V3D16, FPU_ARCH_VFP_V3D16): Define.

bfd/ChangeLog
bfd/elf32-arm.c
include/opcode/ChangeLog
include/opcode/arm.h

index 9027887..a786a3e 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-09  Paul Brook  <paul@codesourcery.com>
+
+       * elf32-arm.c (elf32_arm_merge_eabi_attributes): Handle new
+       Tag_VFP_arch values.
+
 2008-03-08  Paul Brook  <paul@codesourcery.com>
 
        * elf32-arm.c (insert_thumb_branch): Rewrite.
index 6764e67..1be3346 100644 (file)
@@ -6902,6 +6902,8 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
   /* Some tags have 0 = don't care, 1 = strong requirement,
      2 = weak requirement.  */
   static const int order_312[3] = {3, 1, 2};
+  /* For use with Tag_VFP_arch.  */
+  static const int order_01243[5] = {0, 1, 2, 4, 3};
   int i;
 
   if (!elf_known_obj_attributes_proc (obfd)[0].i)
@@ -6956,7 +6958,6 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
        case Tag_CPU_arch:
        case Tag_ARM_ISA_use:
        case Tag_THUMB_ISA_use:
-       case Tag_VFP_arch:
        case Tag_WMMX_arch:
        case Tag_NEON_arch:
          /* ??? Do NEON and WMMX conflict?  */
@@ -6984,6 +6985,11 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
          if (in_attr[i].i)
            out_attr[i].i = in_attr[i].i;
          break;
+       case Tag_VFP_arch:
+         if (in_attr[i].i > 4 || out_attr[i].i > 4
+             || order_01243[in_attr[i].i] > order_01243[out_attr[i].i])
+           out_attr[i].i = in_attr[i].i;
+         break;
        case Tag_PCS_config:
          if (out_attr[i].i == 0)
            out_attr[i].i = in_attr[i].i;
index 8b44072..919f205 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-09  Paul Brook  <paul@codesourcery.com>
+
+       * arm.h (FPU_VFP_EXT_D32, FPU_VFP_V3D16, FPU_ARCH_VFP_V3D16): Define.
+
 2008-03-04  Paul Brook  <paul@codesourcery.com>
 
        * arm.h (ARM_EXT_V6M, ARM_EXT_BARRIER, ARM_EXT_THUMB_MSR): Define.
index 5f93fd7..11cab3e 100644 (file)
@@ -64,6 +64,7 @@
 #define FPU_VFP_EXT_V2  0x02000000     /* ARM10E VFPr1.              */
 #define FPU_VFP_EXT_V3  0x01000000     /* VFPv3 insns.               */
 #define FPU_NEON_EXT_V1         0x00800000     /* Neon (SIMD) insns.         */
+#define FPU_VFP_EXT_D32  0x00400000    /* Registers D16-D31.         */
 
 /* Architectures are the sum of the base and extensions.  The ARM ARM (rev E)
    defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
 #define FPU_VFP_V1xD   (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
 #define FPU_VFP_V1     (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
 #define FPU_VFP_V2     (FPU_VFP_V1 | FPU_VFP_EXT_V2)
-#define FPU_VFP_V3     (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_V3D16  (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_V3     (FPU_VFP_V3D16 | FPU_VFP_EXT_D32)
 #define FPU_VFP_HARD   (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
-                         | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1)
+                         | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_D32)
 #define FPU_FPA                (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
 
 /* Deprecated */
 #define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD)
 #define FPU_ARCH_VFP_V1          ARM_FEATURE (0, FPU_VFP_V1)
 #define FPU_ARCH_VFP_V2          ARM_FEATURE (0, FPU_VFP_V2)
+#define FPU_ARCH_VFP_V3D16     ARM_FEATURE (0, FPU_VFP_V3D16)
 #define FPU_ARCH_VFP_V3          ARM_FEATURE (0, FPU_VFP_V3)
 #define FPU_ARCH_NEON_V1  ARM_FEATURE (0, FPU_NEON_EXT_V1)
 #define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \