]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[ARM] Rework CPU feature selection in the disassembler
authorMatthew Wahab <matthew.wahab@arm.com>
Tue, 2 Jun 2015 11:24:24 +0000 (12:24 +0100)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 24 Aug 2017 12:13:38 +0000 (09:13 -0300)
include/opcode/
* arm.h (ARM_FEATURE_ALL): New.

opcodes/
* arm-dis.c (select_arm_features): Rework to avoid used of
redefined macros.

Change-Id: I55383e81473254b8dd31251634f7bd5af87d8a9d

include/opcode/arm.h
opcodes/ChangeLog
opcodes/arm-dis.c

index 0847d12e3e3810eafa9c9fd36bd404f684fd76f8..148a0d8420c72608e0edd06c8d1f960a8a05c680 100644 (file)
 #define ARM_ARCH_NONE  ARM_FEATURE_LOW (0, 0)
 #define FPU_NONE       ARM_FEATURE_LOW (0, 0)
 #define ARM_ANY                ARM_FEATURE (-1, -1, 0) /* Any basic core.  */
+#define ARM_FEATURE_ALL        ARM_FEATURE (-1, -1, -1)/* All CPU and FPU features.  */
 #define FPU_ANY_HARD   ARM_FEATURE_COPROC (FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK)
 #define ARM_ARCH_THUMB2 ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2 | ARM_EXT_V7 \
                                              | ARM_EXT_V7A | ARM_EXT_V7R \
index 71f17f1f11bdc29cc487dfce037780ffbfce0919..a678d488f36bc2f578926d66fad0b23fad0a2caf 100644 (file)
        (print_insn_arm): Likewise.
        (select_arm_features): Follow new feature struct.
 
+2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * arm-dis.c (select_arm_features): Rework to avoid used of redefined
+       macros.
+
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
        * aarch64-tbl.h (aarch64_feature_rdma): New.
index 9d1ee872262156653f56957f011390d2fdac4e6d..619e11c1fd3d4c3be74939d6c0bbfb95f6967266 100644 (file)
@@ -6017,43 +6017,40 @@ static void
 select_arm_features (unsigned long mach,
                     arm_feature_set * features)
 {
-#undef  ARM_FEATURE_LOW
-#define ARM_FEATURE_LOW(ARCH1,CEXT) \
-  features->core[0] = (ARCH1); \
-  features->core[1] = 0; \
-  features->coproc = (CEXT) | FPU_FPA; \
-  return
-
-#undef  ARM_FEATURE_CORE_LOW
-#define ARM_FEATURE_CORE_LOW(ARCH1) \
-  features->core[0] = (ARCH1); \
-  features->core[1] = 0; \
-  features->coproc = FPU_FPA; \
-  return
+#undef ARM_SET_FEATURES
+#define ARM_SET_FEATURES(FSET) \
+  {                                                    \
+    const arm_feature_set fset = FSET;                 \
+    arm_feature_set tmp = ARM_FEATURE (0, 0, FPU_FPA) ;        \
+    ARM_MERGE_FEATURE_SETS (*features, tmp, fset);     \
+  }
 
   switch (mach)
     {
-    case bfd_mach_arm_2:       ARM_ARCH_V2;
-    case bfd_mach_arm_2a:      ARM_ARCH_V2S;
-    case bfd_mach_arm_3:       ARM_ARCH_V3;
-    case bfd_mach_arm_3M:      ARM_ARCH_V3M;
-    case bfd_mach_arm_4:       ARM_ARCH_V4;
-    case bfd_mach_arm_4T:      ARM_ARCH_V4T;
-    case bfd_mach_arm_5:       ARM_ARCH_V5;
-    case bfd_mach_arm_5T:      ARM_ARCH_V5T;
-    case bfd_mach_arm_5TE:     ARM_ARCH_V5TE;
-    case bfd_mach_arm_XScale:  ARM_ARCH_XSCALE;
-    case bfd_mach_arm_ep9312:  ARM_FEATURE_LOW (ARM_AEXT_V4T, \
-                                               ARM_CEXT_MAVERICK \
-                                               | FPU_MAVERICK);
-    case bfd_mach_arm_iWMMXt:  ARM_ARCH_IWMMXT;
-    case bfd_mach_arm_iWMMXt2: ARM_ARCH_IWMMXT2;
+    case bfd_mach_arm_2:       ARM_SET_FEATURES (ARM_ARCH_V2); break;
+    case bfd_mach_arm_2a:      ARM_SET_FEATURES (ARM_ARCH_V2S); break;
+    case bfd_mach_arm_3:       ARM_SET_FEATURES (ARM_ARCH_V3); break;
+    case bfd_mach_arm_3M:      ARM_SET_FEATURES (ARM_ARCH_V3M); break;
+    case bfd_mach_arm_4:       ARM_SET_FEATURES (ARM_ARCH_V4); break;
+    case bfd_mach_arm_4T:      ARM_SET_FEATURES (ARM_ARCH_V4T); break;
+    case bfd_mach_arm_5:       ARM_SET_FEATURES (ARM_ARCH_V5); break;
+    case bfd_mach_arm_5T:      ARM_SET_FEATURES (ARM_ARCH_V5T); break;
+    case bfd_mach_arm_5TE:     ARM_SET_FEATURES (ARM_ARCH_V5TE); break;
+    case bfd_mach_arm_XScale:  ARM_SET_FEATURES (ARM_ARCH_XSCALE); break;
+    case bfd_mach_arm_ep9312:
+      ARM_SET_FEATURES (ARM_FEATURE_LOW (ARM_AEXT_V4T,
+                                        ARM_CEXT_MAVERICK | FPU_MAVERICK));
+       break;
+    case bfd_mach_arm_iWMMXt:  ARM_SET_FEATURES (ARM_ARCH_IWMMXT); break;
+    case bfd_mach_arm_iWMMXt2: ARM_SET_FEATURES (ARM_ARCH_IWMMXT2); break;
       /* If the machine type is unknown allow all
         architecture types and all extensions.  */
-    case bfd_mach_arm_unknown: ARM_FEATURE_LOW (-1UL, -1UL);
+    case bfd_mach_arm_unknown: ARM_SET_FEATURES (ARM_FEATURE_ALL); break;
     default:
       abort ();
     }
+
+#undef ARM_SET_FEATURES
 }