From 536b9f42cef7c74e3c92e5eaeb12b8514582907c Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Fri, 23 Sep 2016 09:09:28 +0000 Subject: [PATCH] [PATCH 4/17][ARM] Define feature macros for FP16. 2016-09-23 Matthew Wahab * 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 * gcc.target/arm/attr-fp16-arith-1.c: New. From-SVN: r240402 --- gcc/ChangeLog | 6 +++ gcc/config/arm/arm-c.c | 5 +++ gcc/testsuite/ChangeLog | 4 ++ .../gcc.target/arm/attr-fp16-arith-1.c | 45 +++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e440959e48..12adfb96c9a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-09-23 Matthew Wahab + + * 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 * doc/sourcebuild.texi (ARM-specific attributes): Add anchor for diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c index b98470fff45..72837001d10 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c60fdf2b1dd..f2fb03ca693 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-09-23 Matthew Wahab + + * gcc.target/arm/attr-fp16-arith-1.c: New. + 2016-09-23 Matthew Wahab * 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 index 00000000000..5011315961c --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/attr-fp16-arith-1.c @@ -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