[testsuite,arm] target-supports.exp: Add arm_fp_dp_ok effective-target
authorChristophe Lyon <christophe.lyon@linaro.org>
Mon, 23 Mar 2020 17:59:51 +0000 (17:59 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Tue, 24 Mar 2020 20:53:16 +0000 (20:53 +0000)
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.

gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 81d90c3127ef2019d67b4885ab6d7f3dc042e0d2..4edf2128efb20281f00810ddb99d18c714d45687 100644 (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
index eef1432147ce5f176bbdd31dbf71b7bb1615973c..91b46cc654ba9a28cf941a2adbebcd99f19a6ba5 100644 (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
index 6747258de622a2f2986e0b63eac1717e60c1df64..adce8ede3b3262a9789dee063c2c9b53fac3d727 100644 (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
index 9f3f96f1dd5969ee2d4861d1403378a73603b6c8..f9794b6688f5ed284dde196f9709433bd1c2140e 100644 (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.