2019-09-23 Sandra Loosemore <sandra@codesourcery.com>
authorSandra Loosemore <sandra@codesourcery.com>
Mon, 23 Sep 2019 19:28:10 +0000 (15:28 -0400)
committerSandra Loosemore <sandra@gcc.gnu.org>
Mon, 23 Sep 2019 19:28:10 +0000 (15:28 -0400)
gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_arm_vfp_ok_nocache): New.
(check_effective_target_arm_vfp_ok): Rewrite.
(add_options_for_arm_vfp): New.
(add_options_for_sqrt_insn): Add options for arm.
* gcc.target/arm/attr-neon-builtin-fail2.c: Use dg-add-options.
* gcc.target/arm/short-vfp-1.c: Likewise.

From-SVN: r276063

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/attr-neon-builtin-fail2.c
gcc/testsuite/gcc.target/arm/short-vfp-1.c
gcc/testsuite/lib/target-supports.exp

index f381bb24f762ebece72e9256960294423a244728..a9b108db1dd9c46a43a9702fc134eead1edeaec8 100644 (file)
@@ -1,3 +1,13 @@
+2019-09-23  Sandra Loosemore  <sandra@codesourcery.com>
+
+       * lib/target-supports.exp
+       (check_effective_target_arm_vfp_ok_nocache): New.
+       (check_effective_target_arm_vfp_ok): Rewrite.
+       (add_options_for_arm_vfp): New.
+       (add_options_for_sqrt_insn): Add options for arm.
+       * gcc.target/arm/attr-neon-builtin-fail2.c: Use dg-add-options.
+       * gcc.target/arm/short-vfp-1.c: Likewise.
+
 2019-09-23  Marek Polacek  <polacek@redhat.com>
 
        PR c++/91844 - Implement CWG 2352, Similar types and reference binding.
index 0f8ac1b723c286eb5987c6a1f134b621d63bb7e4..9cb5a2ebb9050d9ef2273558a050386a9096e6d2 100644 (file)
@@ -1,7 +1,8 @@
 /* Check that calling a neon builtin from a function compiled with vfp fails.  */
 /* { dg-do compile } */
 /* { dg-require-effective-target arm_vfp_ok } */
-/* { dg-options "-O2 -mfloat-abi=softfp" } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_vfp } */
 
 extern __simd64_int8_t a, b;
 
index d96c7631798ba6b41636470a66ae7fd61e7a313f..3ca1ffc00173e00bf333a4d3662ba0ab68b51628 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target arm_vfp_ok }
-/* { dg-options "-mfpu=vfp" } */
+/* { dg-add-options arm_vfp } */
 
 int
 test_sisf (float x)
index 414bf80003b9192806f79afed9393f9ef4750a7d..6a1aaca9691b7fe9ae5e0e5b1874c7af34a3a6e3 100644 (file)
@@ -3489,18 +3489,43 @@ proc check_effective_target_arm_soft_ok { } {
     }
 }
 
-# Return 1 if this is an ARM target supporting -mfpu=vfp
-# -mfloat-abi=softfp.  Some multilibs may be incompatible with these
-# options.
+# Return 1 if this is an ARM target supporting -mfpu=vfp with an
+# appropriate abi.
 
-proc check_effective_target_arm_vfp_ok { } {
+proc check_effective_target_arm_vfp_ok_nocache { } {
+    global et_arm_vfp_flags
+    set et_arm_vfp_flags ""
     if { [check_effective_target_arm32] } {
-       return [check_no_compiler_messages arm_vfp_ok object {
-           int dummy;
-       } "-mfpu=vfp -mfloat-abi=softfp"]
-    } else {
-       return 0
+       foreach flags {"-mfpu=vfp" "-mfpu=vfp -mfloat-abi=softfp" "-mpu=vfp -mfloat-abi=hard"} {
+           if { [check_no_compiler_messages_nocache arm_fp_ok object {
+               #ifndef __ARM_FP
+               #error __ARM_FP not defined
+               #endif
+           } "$flags"] } {
+               set et_arm_vfp_flags $flags
+               return 1
+           }
+       }
     }
+
+    return 0
+}
+
+proc check_effective_target_arm_vfp_ok { } {
+    return [check_cached_effective_target arm_vfp_ok \
+               check_effective_target_arm_vfp_ok_nocache]
+}
+
+# Add the options needed to compile code with -mfpu=vfp.  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_vfp { flags } {
+    if { ! [check_effective_target_arm_vfp_ok] } {
+       return "$flags"
+    }
+    global et_arm_vfp_flags
+    return "$flags $et_arm_vfp_flags"
 }
 
 # Return 1 if this is an ARM target supporting -mfpu=vfp3
@@ -6678,6 +6703,9 @@ proc add_options_for_sqrt_insn { flags } {
     if { [istarget amdgcn*-*-*] } {
        return "$flags -ffast-math"
     }
+    if { [istarget arm*-*-*] } {
+       return [add_options_for_arm_vfp "$flags"]
+    }
     return $flags
 }