[arm] Add isa features to FPU descriptions
authorRichard Earnshaw <rearnsha@arm.com>
Thu, 15 Dec 2016 15:54:53 +0000 (15:54 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Thu, 15 Dec 2016 15:54:53 +0000 (15:54 +0000)
Similar to the new CPU and architecture ISA feature lists, we now add
similar capabilities to each FPU description.  We don't use these yet,
that will come in later patches.  These follow the same style as the
newly modified flag sets, but use slightly different defaults that
more accurately reflect the ISA specifications.

* arm-isa.h (isa_feature): Add bits for VFPv4, FPv5, fp16conv,
fP_dbl, fp_d32 and fp_crypto.
(ISA_ALL_FPU): Add all the new bits.
(ISA_VFPv2, ISA_VFPv3, ISA_VFPv4, ISA_FPv5): New macros.
(ISA_FP_ARMv8, ISA_FP_DBL, ISA_FP_D32, ISA_NEON, ISA_CRYPTO): Likewise.
* arm-fpus.def: Add ISA features to all FPUs.
* arm.h: (arm_fpu_desc): Add new field for ISA bits.
* arm.c (all_fpus): Initialize it.
* arm-tables.opt: Regenerated.

From-SVN: r243709

gcc/ChangeLog
gcc/config/arm/arm-fpus.def
gcc/config/arm/arm-tables.opt
gcc/config/arm/arm.c
gcc/config/arm/arm.h

index 281eff73f8662c77081fa89acbf1b99902d1a11c..4bcf816e83399664a2b2b28ddf4867d7cf6554f2 100644 (file)
@@ -1,3 +1,15 @@
+2016-12-15  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm-isa.h (isa_feature): Add bits for VFPv4, FPv5, fp16conv,
+       fP_dbl, fp_d32 and fp_crypto.
+       (ISA_ALL_FPU): Add all the new bits.
+       (ISA_VFPv2, ISA_VFPv3, ISA_VFPv4, ISA_FPv5): New macros.
+       (ISA_FP_ARMv8, ISA_FP_DBL, ISA_FP_D32, ISA_NEON, ISA_CRYPTO): Likewise.
+       * arm-fpus.def: Add ISA features to all FPUs.
+       * arm.h: (arm_fpu_desc): Add new field for ISA bits.
+       * arm.c (all_fpus): Initialize it.
+       * arm-tables.opt: Regenerated.
+
 2016-12-15  Richard Earnshaw  <rearnsha@arm.com>
 
        * arm.h (FPU_FL_VFPv2) New feature bit.
index 25e2ebdc3d937b6f12626367b57c2b841a7b2579..1be718fa2cd25dd861b0a5001bd54674ef80b715 100644 (file)
 
 /* Before using #include to read this file, define a macro:
 
-      ARM_FPU(NAME, FEATURES)
+      ARM_FPU(NAME, ISA, FEATURES)
 
    The arguments are the fields of struct arm_fpu_desc.
 
    genopt.sh assumes no whitespace up to the first "," in each entry.  */
 
-ARM_FPU("vfp",                 FPU_VFPv2 | FPU_DBL)
-ARM_FPU("vfpv2",               FPU_VFPv2 | FPU_DBL)
-ARM_FPU("vfpv3",               FPU_VFPv3 | FPU_D32)
-ARM_FPU("vfpv3-fp16",          FPU_VFPv3 | FPU_D32 | FPU_FP16)
-ARM_FPU("vfpv3-d16",           FPU_VFPv3 | FPU_DBL)
-ARM_FPU("vfpv3-d16-fp16",      FPU_VFPv3 | FPU_DBL | FPU_FP16)
-ARM_FPU("vfpv3xd",             FPU_VFPv3)
-ARM_FPU("vfpv3xd-fp16",                FPU_VFPv3 | FPU_FP16)
-ARM_FPU("neon",                        FPU_VFPv3 | FPU_NEON)
-ARM_FPU("neon-vfpv3",          FPU_VFPv3 | FPU_NEON)
-ARM_FPU("neon-fp16",           FPU_VFPv3 | FPU_NEON | FPU_FP16)
-ARM_FPU("vfpv4",               FPU_VFPv4 | FPU_D32 | FPU_FP16)
-ARM_FPU("vfpv4-d16",           FPU_VFPv4 | FPU_DBL | FPU_FP16)
-ARM_FPU("fpv4-sp-d16",         FPU_VFPv4 | FPU_FP16)
-ARM_FPU("fpv5-sp-d16",         FPU_VFPv5 | FPU_FP16)
-ARM_FPU("fpv5-d16",            FPU_VFPv5 | FPU_DBL | FPU_FP16)
-ARM_FPU("neon-vfpv4",          FPU_VFPv4 | FPU_NEON | FPU_FP16)
-ARM_FPU("fp-armv8",            FPU_ARMv8 | FPU_D32 | FPU_FP16)
-ARM_FPU("neon-fp-armv8",       FPU_ARMv8 | FPU_NEON | FPU_FP16)
-ARM_FPU("crypto-neon-fp-armv8", FPU_ARMv8 | FPU_CRYPTO | FPU_FP16)
+ARM_FPU("vfp",                 ISA_FEAT(ISA_VFPv2) ISA_FEAT(ISA_FP_DBL),                            FPU_VFPv2 | FPU_DBL)
+ARM_FPU("vfpv2",               ISA_FEAT(ISA_VFPv2) ISA_FEAT(ISA_FP_DBL),                            FPU_VFPv2 | FPU_DBL)
+ARM_FPU("vfpv3",               ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_FP_D32),                            FPU_VFPv3 | FPU_D32)
+ARM_FPU("vfpv3-fp16",          ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_FP_D32) ISA_FEAT(isa_bit_fp16conv), FPU_VFPv3 | FPU_D32 | FPU_FP16)
+ARM_FPU("vfpv3-d16",           ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_FP_DBL),                            FPU_VFPv3 | FPU_DBL)
+ARM_FPU("vfpv3-d16-fp16",      ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_FP_DBL) ISA_FEAT(isa_bit_fp16conv), FPU_VFPv3 | FPU_DBL | FPU_FP16)
+ARM_FPU("vfpv3xd",             ISA_FEAT(ISA_VFPv3),                                                 FPU_VFPv3)
+ARM_FPU("vfpv3xd-fp16",                ISA_FEAT(ISA_VFPv3) ISA_FEAT(isa_bit_fp16conv),                      FPU_VFPv3 | FPU_FP16)
+ARM_FPU("neon",                        ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_NEON),                              FPU_VFPv3 | FPU_NEON)
+ARM_FPU("neon-vfpv3",          ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_NEON),                              FPU_VFPv3 | FPU_NEON)
+ARM_FPU("neon-fp16",           ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_NEON) ISA_FEAT(isa_bit_fp16conv),   FPU_VFPv3 | FPU_NEON | FPU_FP16)
+ARM_FPU("vfpv4",               ISA_FEAT(ISA_VFPv4) ISA_FEAT(ISA_FP_D32),                            FPU_VFPv4 | FPU_D32 | FPU_FP16)
+ARM_FPU("neon-vfpv4",          ISA_FEAT(ISA_VFPv4) ISA_FEAT(ISA_NEON),                              FPU_VFPv4 | FPU_NEON | FPU_FP16)
+ARM_FPU("vfpv4-d16",           ISA_FEAT(ISA_VFPv4) ISA_FEAT(ISA_FP_DBL),                            FPU_VFPv4 | FPU_DBL | FPU_FP16)
+ARM_FPU("fpv4-sp-d16",         ISA_FEAT(ISA_VFPv4),                                                 FPU_VFPv4 | FPU_FP16)
+ARM_FPU("fpv5-sp-d16",         ISA_FEAT(ISA_FPv5),                                                  FPU_VFPv5 | FPU_FP16)
+ARM_FPU("fpv5-d16",            ISA_FEAT(ISA_FPv5) ISA_FEAT(ISA_FP_DBL),                             FPU_VFPv5 | FPU_DBL | FPU_FP16)
+ARM_FPU("fp-armv8",            ISA_FEAT(ISA_FP_ARMv8) ISA_FEAT(ISA_FP_D32),                         FPU_ARMv8 | FPU_D32 | FPU_FP16)
+ARM_FPU("neon-fp-armv8",       ISA_FEAT(ISA_FP_ARMv8) ISA_FEAT(ISA_NEON),                           FPU_ARMv8 | FPU_NEON | FPU_FP16)
+ARM_FPU("crypto-neon-fp-armv8", ISA_FEAT(ISA_FP_ARMv8) ISA_FEAT(ISA_CRYPTO),                        FPU_ARMv8 | FPU_CRYPTO | FPU_FP16)
 /* Compatibility aliases.  */
-ARM_FPU("vfp3",                        FPU_VFPv3 | FPU_D32)
+ARM_FPU("vfp3",                        ISA_FEAT(ISA_VFPv3) ISA_FEAT(ISA_FP_D32),                            FPU_VFPv3 | FPU_D32)
index 9d833794ca85379bc04fcc05a1e42a9a89b2c248..faa00aaa6f409bf6e54e3a0b082d4781e3e72f0d 100644 (file)
@@ -504,19 +504,19 @@ EnumValue
 Enum(arm_fpu) String(vfpv4) Value(11)
 
 EnumValue
-Enum(arm_fpu) String(vfpv4-d16) Value(12)
+Enum(arm_fpu) String(neon-vfpv4) Value(12)
 
 EnumValue
-Enum(arm_fpu) String(fpv4-sp-d16) Value(13)
+Enum(arm_fpu) String(vfpv4-d16) Value(13)
 
 EnumValue
-Enum(arm_fpu) String(fpv5-sp-d16) Value(14)
+Enum(arm_fpu) String(fpv4-sp-d16) Value(14)
 
 EnumValue
-Enum(arm_fpu) String(fpv5-d16) Value(15)
+Enum(arm_fpu) String(fpv5-sp-d16) Value(15)
 
 EnumValue
-Enum(arm_fpu) String(neon-vfpv4) Value(16)
+Enum(arm_fpu) String(fpv5-d16) Value(16)
 
 EnumValue
 Enum(arm_fpu) String(fp-armv8) Value(17)
index e555cf6d08a3d3df7c6953ba1881604d16606655..bc246c919db806698cd11657fa48707dec7bd4ea 100644 (file)
@@ -2323,8 +2323,8 @@ char arm_arch_name[] = "__ARM_ARCH_PROFILE__";
 
 const struct arm_fpu_desc all_fpus[] =
 {
-#define ARM_FPU(NAME, FEATURES) \
-  { NAME, FEATURES },
+#define ARM_FPU(NAME, ISA, FEATURES)           \
+  { NAME, {ISA isa_nobit}, FEATURES },
 #include "arm-fpus.def"
 #undef ARM_FPU
 };
index 332f0fabb0425a2b2eddeddf5ee254d991b8c0c1..908e7638333f0f43d36942ed5b417837ab6c4592 100644 (file)
@@ -363,6 +363,7 @@ typedef unsigned long arm_fpu_feature_set;
 extern const struct arm_fpu_desc
 {
   const char *name;
+  enum isa_feature isa_bits[isa_num_bits];
   arm_fpu_feature_set features;
 } all_fpus[];