]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
target-supports.exp (check_effective_target_mips_llsc): New.
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 5 Feb 2012 14:53:09 +0000 (14:53 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 5 Feb 2012 14:53:09 +0000 (14:53 +0000)
gcc/testsuite/
* lib/target-supports.exp (check_effective_target_mips_llsc): New.
(check_effective_target_sync_int_long): Use it.
(check_effective_target_sync_char_short): Likewise.
* gcc.target/mips/atomic-memory-1.c: Restrict error check to mips_llsc.

From-SVN: r183909

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/atomic-memory-1.c
gcc/testsuite/lib/target-supports.exp

index 92d7759fd02e5b019182ec34b8443d72559e42e5..69e62cb621a7d8437b2d07f19ca120d12e620f6e 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-05  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * lib/target-supports.exp (check_effective_target_mips_llsc): New.
+       (check_effective_target_sync_int_long): Use it.
+       (check_effective_target_sync_char_short): Likewise.
+       * gcc.target/mips/atomic-memory-1.c: Restrict error check to mips_llsc.
+
 2012-02-05  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/51972
index b2316ee6460cffaa792adf7115683f06baa1a4b8..839d75c2b2fccbdd0539ff41e320563f535cc302 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do run } */
 
-/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target *-*-* } 0 } */
+/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target mips_llsc } 0 } */
 
 extern void abort (void);
 extern void exit (int);
index b192779c810f1a59eb3efe786ef9c51b8f791e06..ca101438cc8553622c636d2f1914368b8efbdf40 100644 (file)
@@ -890,6 +890,26 @@ proc check_effective_target_mips_newabi_large_long_double { } {
     } "-mabi=64"]
 }
 
+# Return true if the target is a MIPS target that has access
+# to the LL and SC instructions.
+
+proc check_effective_target_mips_llsc { } {
+    if { ![istarget mips*-*-*] } {
+       return 0
+    }
+    # Assume that these instructions are always implemented for
+    # non-elf* targets, via emulation if necessary.
+    if { ![istarget *-*-elf*] } {
+       return 1
+    }
+    # Otherwise assume LL/SC support for everything but MIPS I.
+    return [check_no_compiler_messages mips_llsc assembly {
+       #if __mips == 1
+       #error FOO
+       #endif
+    }]
+}
+
 # Return 1 if the current multilib does not generate PIC by default.
 
 proc check_effective_target_nonpic { } {
@@ -3770,7 +3790,7 @@ proc check_effective_target_sync_int_long { } {
             || [istarget powerpc*-*-*]
             || [istarget sparc64-*-*]
             || [istarget sparcv9-*-*]
-            || [istarget mips*-*-*] } {
+            || [check_effective_target_mips_llsc] } {
            set et_sync_int_long_saved 1
         }
     }
@@ -3800,7 +3820,7 @@ proc check_effective_target_sync_char_short { } {
             || [istarget powerpc*-*-*]
             || [istarget sparc64-*-*]
             || [istarget sparcv9-*-*]
-            || [istarget mips*-*-*] } {
+            || [check_effective_target_mips_llsc] } {
            set et_sync_char_short_saved 1
         }
     }