[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.

2020-03-24  Christophe Lyon  <christophe.lyon@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.
This commit is contained in:
Christophe Lyon 2020-03-23 17:59:51 +00:00
parent 0409915769
commit 8001f59c82
4 changed files with 69 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2020-03-24 Christophe Lyon <christophe.lyon@linaro.org>
* doc/sourcebuild.texi (ARM-specific attributes): Add
arm_fp_dp_ok.
(Features for dg-add-options): Add arm_fp_dp.
2020-03-24 John David Anglin <danglin@gcc.gnu.org>
PR lto/94249

View File

@ -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

View File

@ -1,3 +1,10 @@
2020-03-24 Christophe Lyon <christophe.lyon@linaro.org>
* 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.
2020-03-24 Jakub Jelinek <jakub@redhat.com>
PR target/94286
@ -18,7 +25,7 @@
PR target/94238
* gcc.c-torture/compile/pr94144.c: New test.
* gcc.c-torture/compile/pr94238.c: New test.
2020-03-23 Patrick Palka <ppalka@redhat.com>
PR c++/93805

View File

@ -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.