Hello!
Availability of long long and int_128 sync instructions can vary on
x86, due to -m32, so don't cache the result. The problem can be
triggered with:
make -k check RUNTESTFLAGS="--target_board=unix\{,-m32\}"
FAIL: gcc.dg/atomic-compare-exchange-5.c (test for excess errors)
WARNING: gcc.dg/atomic-compare-exchange-5.c compilation failed to
produce executable
FAIL: gcc.dg/atomic-exchange-5.c (test for excess errors)
WARNING: gcc.dg/atomic-exchange-5.c compilation failed to produce executable
FAIL: gcc.dg/atomic-load-5.c (test for excess errors)
WARNING: gcc.dg/atomic-load-5.c compilation failed to produce executable
FAIL: gcc.dg/atomic-op-5.c (test for excess errors)
WARNING: gcc.dg/atomic-op-5.c compilation failed to produce executable
FAIL: gcc.dg/atomic-store-5.c (test for excess errors)
WARNING: gcc.dg/atomic-store-5.c compilation failed to produce executable
FAIL: gcc.dg/simulate-thread/atomic-load-int128.c -O0 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-load-int128.c -O1 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-load-int128.c -O2 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-load-int128.c -O3 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-load-int128.c -Os -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-other-int128.c -O0 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-other-int128.c -O1 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-other-int128.c -O2 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-other-int128.c -O3 -g (test for
excess errors)
FAIL: gcc.dg/simulate-thread/atomic-other-int128.c -Os -g (test for
excess errors)
2011-11-07 Uros Bizjak <[email protected]>
* lib/target-supports.exp (check_effective_target_sync_int_128):
Don't cache the result.
(check_effective_target_sync_long_long): Ditto.
Tested on x86_64-pc-linux-gnu {,-m32}, committed to SVN.
Uros.
Index: lib/target-supports.exp
===================================================================
--- lib/target-supports.exp (revision 181080)
+++ lib/target-supports.exp (working copy)
@@ -3542,39 +3542,23 @@
# Return 1 if the target supports atomic operations on "int_128" values.
proc check_effective_target_sync_int_128 { } {
- global et_sync_int_128_saved
-
- if [info exists et_sync_int_128_saved] {
- verbose "check_effective_target_sync_int_128: using cached result" 2
+ if { ([istarget x86_64-*-*] || [istarget i?86-*-*])
+ && ![is-effective-target ia32] } {
+ return 1
} else {
- set et_sync_int_128_saved 0
- if { ([istarget x86_64-*-*] || [istarget i?86-*-*])
- && ![is-effective-target ia32] } {
- set et_sync_int_128_saved 1
- }
+ return 0
}
-
- verbose "check_effective_target_sync_int_128: returning
$et_sync_int_128_saved" 2
- return $et_sync_int_128_saved
}
# Return 1 if the target supports atomic operations on "long long".
proc check_effective_target_sync_long_long { } {
- global et_sync_long_long_saved
-
- if [info exists et_sync_long_long_saved] {
- verbose "check_effective_target_sync_long_long: using cached result" 2
+ if { ([istarget x86_64-*-*] || [istarget i?86-*-*])
+ && ![is-effective-target ia32] } {
+ return 1
} else {
- set et_sync_long_long_saved 0
- if { ([istarget x86_64-*-*] || [istarget i?86-*-*])
- && ![is-effective-target ia32] } {
- set et_sync_long_long_saved 1
- }
+ return 0
}
-
- verbose "check_effective_target_sync_long_long: returning
$et_sync_long_long_saved" 2
- return $et_sync_long_long_saved
}
# Return 1 if the target supports atomic operations on "int" and "long".