Hi Christophe, > -----Original Message----- > From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> On Behalf Of > Christophe Lyon via Gcc-patches > Sent: 24 March 2020 14:27 > To: gcc-patches@gcc.gnu.org > Subject: [PATCH 1/3] [testsuite, arm] target-supports.exp: Add > arm_fp_dp_ok effective-target > > Some tests require double-precision support, but the existing arm_fp_ok > effective-target only checks if hardware floating-point is available, not what > level. So this patch adds a new arm_fp_dp_ok effective-target to check that > double-precision is supported.
The series looks good to me, and I trust that you test a wide a matrix of configurations. So ok for all three. Thanks, Kyrill > > 2020-03-24 Christophe Lyon <christophe.l...@linaro.org> > > gcc/ > * doc/sourcebuild.texi (ARM-specific attributes): Add > arm_fp_dp_ok. > (Features for dg-add-options): Add arm_fp_dp. > > gcc/testsuite/ > * lib/target-supports.exp > (check_effective_target_arm_fp_dp_ok_nocache): New. > (check_effective_target_arm_fp_dp_ok): New. > (add_options_for_arm_fp_dp): New. > --- > gcc/doc/sourcebuild.texi | 11 +++++++++ > gcc/testsuite/lib/target-supports.exp | 44 > +++++++++++++++++++++++++++++++++++ > 2 files changed, 55 insertions(+) > > diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index > eef1432..91b46cc 100644 > --- a/gcc/doc/sourcebuild.texi > +++ b/gcc/doc/sourcebuild.texi > @@ -1733,6 +1733,12 @@ ARM target defines @code{__ARM_FP} using > @code{-mfloat-abi=softfp} or equivalent options. Some multilibs may be > incompatible with these options. > > +@item arm_fp_dp_ok > +@anchor{arm_fp_dp_ok} > +ARM target defines @code{__ARM_FP} with double-precision support using > +@code{-mfloat-abi=softfp} or equivalent options. Some multilibs may be > +incompatible with these options. > + > @item arm_hf_eabi > ARM target adheres to the VFP and Advanced SIMD Register Arguments > variant of the ABI for the ARM Architecture (as selected with @@ -2504,6 > +2510,11 @@ are: > in certain modes; see the @ref{arm_fp_ok,,arm_fp_ok effective target > keyword}. > > +@item arm_fp_dp > +@code{__ARM_FP} definition with double-precision support. Only ARM > +targets support this feature, and only then in certain modes; see the > +@ref{arm_fp_dp_ok,,arm_fp_dp_ok effective target keyword}. > + > @item arm_neon > NEON support. Only ARM targets support this feature, and only then in > certain modes; see the @ref{arm_neon_ok,,arm_neon_ok effective target > diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target- > supports.exp > index 4413c26..332611c 100644 > --- a/gcc/testsuite/lib/target-supports.exp > +++ b/gcc/testsuite/lib/target-supports.exp > @@ -3679,6 +3679,50 @@ proc add_options_for_arm_fp { flags } { > return "$flags $et_arm_fp_flags" > } > > +# Return 1 if this is an ARM target defining __ARM_FP with # > +double-precision support. We may need -mfloat-abi=softfp or # > +equivalent options. Some multilibs may be incompatible with these # > +options. Also set et_arm_fp_dp_flags to the best options to add. > + > +proc check_effective_target_arm_fp_dp_ok_nocache { } { > + global et_arm_fp_dp_flags > + set et_arm_fp_dp_flags "" > + if { [check_effective_target_arm32] } { > + foreach flags {"" "-mfloat-abi=softfp" "-mfloat-abi=hard"} { > + if { [check_no_compiler_messages_nocache arm_fp_dp_ok object { > + #ifndef __ARM_FP > + #error __ARM_FP not defined > + #endif > + #if ((__ARM_FP & 8) == 0) > + #error __ARM_FP indicates that double-precision is not > supported > + #endif > + } "$flags"] } { > + set et_arm_fp_dp_flags $flags > + return 1 > + } > + } > + } > + > + return 0 > +} > + > +proc check_effective_target_arm_fp_dp_ok { } { > + return [check_cached_effective_target arm_fp_dp_ok \ > + check_effective_target_arm_fp_dp_ok_nocache] > +} > + > +# Add the options needed to define __ARM_FP with double-precision # > +support. We need either -mfloat-abi=softfp or -mfloat-abi=hard, but # > +if one is already specified by the multilib, use it. > + > +proc add_options_for_arm_fp_dp { flags } { > + if { ! [check_effective_target_arm_fp_dp_ok] } { > + return "$flags" > + } > + global et_arm_fp_dp_flags > + return "$flags $et_arm_fp_dp_flags" > +} > + > # Return 1 if this is an ARM target that supports DSP multiply with # > current > multilib flags. > > -- > 2.7.4