Commit 8001f59c by Christophe Lyon

[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.
parent 04099157
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> 2020-03-24 John David Anglin <danglin@gcc.gnu.org>
PR lto/94249 PR lto/94249
......
...@@ -1733,6 +1733,12 @@ ARM target defines @code{__ARM_FP} using @code{-mfloat-abi=softfp} or ...@@ -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 equivalent options. Some multilibs may be incompatible with these
options. 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 @item arm_hf_eabi
ARM target adheres to the VFP and Advanced SIMD Register Arguments ARM target adheres to the VFP and Advanced SIMD Register Arguments
variant of the ABI for the ARM Architecture (as selected with variant of the ABI for the ARM Architecture (as selected with
...@@ -2504,6 +2510,11 @@ are: ...@@ -2504,6 +2510,11 @@ are:
in certain modes; see the @ref{arm_fp_ok,,arm_fp_ok effective target in certain modes; see the @ref{arm_fp_ok,,arm_fp_ok effective target
keyword}. 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 @item arm_neon
NEON support. Only ARM targets support this feature, and only then 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 in certain modes; see the @ref{arm_neon_ok,,arm_neon_ok effective target
......
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> 2020-03-24 Jakub Jelinek <jakub@redhat.com>
PR target/94286 PR target/94286
...@@ -18,7 +25,7 @@ ...@@ -18,7 +25,7 @@
PR target/94238 PR target/94238
* gcc.c-torture/compile/pr94144.c: New test. * gcc.c-torture/compile/pr94144.c: New test.
* gcc.c-torture/compile/pr94238.c: New test. * gcc.c-torture/compile/pr94238.c: New test.
2020-03-23 Patrick Palka <ppalka@redhat.com> 2020-03-23 Patrick Palka <ppalka@redhat.com>
PR c++/93805 PR c++/93805
......
...@@ -3679,6 +3679,50 @@ proc add_options_for_arm_fp { flags } { ...@@ -3679,6 +3679,50 @@ proc add_options_for_arm_fp { flags } {
return "$flags $et_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 # Return 1 if this is an ARM target that supports DSP multiply with
# current multilib flags. # current multilib flags.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment