arm.c (arm_test_fpu_data): New.
authorTamar Christina <tamar.christina@arm.com>
Thu, 5 Oct 2017 11:38:06 +0000 (11:38 +0000)
committerTamar Christina <tnfchris@gcc.gnu.org>
Thu, 5 Oct 2017 11:38:06 +0000 (11:38 +0000)
2017-10-05  Tamar Christina  <tamar.christina@arm.com>

* config/arm/arm.c (arm_test_fpu_data): New.
(arm_run_selftests): Call arm_test_fpu_data.

From-SVN: r253443

gcc/ChangeLog
gcc/config/arm/arm.c

index b936292d7af2b0383c7edf7bf98364c87db84943..27d1782057566b7cd50d389861bcfe67695c587c 100644 (file)
@@ -1,3 +1,8 @@
+2017-10-05  Tamar Christina  <tamar.christina@arm.com>
+
+       * config/arm/arm.c (arm_test_fpu_data): New.
+       (arm_run_selftests): Call arm_test_fpu_data.
+
 2017-10-04  Nathan Sidwell  <nathan@acm.org>
 
        * toplev.c (toplev::main): Remove excess parens on pretty_printer
index 4cddf3b02e5e731507c2d326b80747524fd505bf..bece1f76011e2f779fb144cdd7a9d90d3a3d114a 100644 (file)
@@ -31393,10 +31393,43 @@ arm_test_cpu_arch_data (void)
     }
 }
 
+/* Scan the static data tables generated by parsecpu.awk looking for
+   potential issues with the data.  Here we check for consistency between the
+   fpu bits, in particular we check that ISA_ALL_FPU_INTERNAL does not contain
+   a feature bit that is not defined by any FPU flag.  */
+static void
+arm_test_fpu_data (void)
+{
+  auto_sbitmap isa_all_fpubits (isa_num_bits);
+  auto_sbitmap fpubits (isa_num_bits);
+  auto_sbitmap tmpset (isa_num_bits);
+
+  static const enum isa_feature fpu_bitlist[]
+    = { ISA_ALL_FPU_INTERNAL, isa_nobit };
+  arm_initialize_isa (isa_all_fpubits, fpu_bitlist);
+
+  for (unsigned int i = 0; i < TARGET_FPU_auto; i++)
+  {
+    arm_initialize_isa (fpubits, all_fpus[i].isa_bits);
+    bitmap_and_compl (tmpset, isa_all_fpubits, fpubits);
+    bitmap_clear (isa_all_fpubits);
+    bitmap_copy (isa_all_fpubits, tmpset);
+  }
+
+  if (!bitmap_empty_p (isa_all_fpubits))
+    {
+       fprintf (stderr, "Error: found feature bits in the ALL_FPU_INTERAL"
+                        " group that are not defined by any FPU.\n"
+                        "       Check your arm-cpus.in.\n");
+       ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits));
+    }
+}
+
 static void
 arm_run_selftests (void)
 {
   arm_test_cpu_arch_data ();
+  arm_test_fpu_data ();
 }
 } /* Namespace selftest.  */