[PATCH 4/17][ARM] Define feature macros for FP16.
authorMatthew Wahab <matthew.wahab@arm.com>
Fri, 23 Sep 2016 09:09:28 +0000 (09:09 +0000)
committerMatthew Wahab <mwahab@gcc.gnu.org>
Fri, 23 Sep 2016 09:09:28 +0000 (09:09 +0000)
2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>

* config/arm/arm-c.c (arm_cpu_builtins): Define
"__ARM_FEATURE_FP16_SCALAR_ARITHMETIC" and
"__ARM_FEATURE_FP16_VECTOR_ARITHMETIC".

testsuite/
2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>

* gcc.target/arm/attr-fp16-arith-1.c: New.

From-SVN: r240402

gcc/ChangeLog
gcc/config/arm/arm-c.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c [new file with mode: 0644]

index 3e440959e48217d00447d045013da1c9af2cc674..12adfb96c9a43304adace1a850571f8ec6b911b2 100644 (file)
@@ -1,3 +1,9 @@
+2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * config/arm/arm-c.c (arm_cpu_builtins): Define
+       "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC" and
+       "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC".
+
 2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>
 
        * doc/sourcebuild.texi (ARM-specific attributes): Add anchor for
index b98470fff45b20a5398c2534bc3bb3edfb7bfd01..72837001d1011e366233236a6ba3d1e5775583b1 100644 (file)
@@ -142,6 +142,11 @@ arm_cpu_builtins (struct cpp_reader* pfile)
   def_or_undef_macro (pfile, "__ARM_FP16_ARGS",
                      arm_fp16_format != ARM_FP16_FORMAT_NONE);
 
+  def_or_undef_macro (pfile, "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC",
+                     TARGET_VFP_FP16INST);
+  def_or_undef_macro (pfile, "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC",
+                     TARGET_NEON_FP16INST);
+
   def_or_undef_macro (pfile, "__ARM_FEATURE_FMA", TARGET_FMA);
   def_or_undef_macro (pfile, "__ARM_NEON__", TARGET_NEON);
   def_or_undef_macro (pfile, "__ARM_NEON", TARGET_NEON);
index c60fdf2b1dd0dc0376f49bed559f3ec3642cfa59..f2fb03ca693c375ee6cab57b5227d8ffeda1c9e0 100644 (file)
@@ -1,3 +1,7 @@
+2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>
+
+       * gcc.target/arm/attr-fp16-arith-1.c: New.
+
 2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>
 
        * lib/target-supports.exp (add_options_for_arm_v8_2a_fp16_scalar):
diff --git a/gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c b/gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c
new file mode 100644 (file)
index 0000000..5011315
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_v8_2a_fp16_scalar } */
+
+/* Reset fpu to a value compatible with the next pragmas.  */
+#pragma GCC target ("fpu=vfp")
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=fp-armv8")
+
+#ifndef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
+#error __ARM_FEATURE_FP16_SCALAR_ARITHMETIC not defined.
+#endif
+
+#pragma GCC push_options
+#pragma GCC target ("fpu=neon-fp-armv8")
+
+#ifndef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
+#error __ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined.
+#endif
+
+#ifndef __ARM_NEON
+#error __ARM_NEON not defined.
+#endif
+
+#if !defined (__ARM_FP) || !(__ARM_FP & 0x2)
+#error Invalid value for __ARM_FP
+#endif
+
+#pragma GCC pop_options
+
+/* Check that the FP version is correctly reset to mfpu=fp-armv8.  */
+
+#if !defined (__ARM_FP) || !(__ARM_FP & 0x2)
+#error __ARM_FP should record FP16 support.
+#endif
+
+#pragma GCC pop_options
+
+/* Check that the FP version is correctly reset to mfpu=vfp.  */
+
+#if !defined (__ARM_FP) || (__ARM_FP & 0x2)
+#error Unexpected value for __ARM_FP.
+#endif