diff options
author | Andrew Haley <aph@redhat.com> | 2009-08-12 16:10:12 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2009-08-12 16:10:12 +0000 |
commit | 4b462d7786135d389f58ccda0a9dddf9ed4cee73 (patch) | |
tree | 2b29a3b4b734755142382ee704c64493d0a28268 /gcc/java/builtins.c | |
parent | 97804369a99a4e9ab5609b158ce5b0becff36880 (diff) | |
download | gcc-4b462d7786135d389f58ccda0a9dddf9ed4cee73.zip gcc-4b462d7786135d389f58ccda0a9dddf9ed4cee73.tar.gz gcc-4b462d7786135d389f58ccda0a9dddf9ed4cee73.tar.bz2 |
builtins.c (compareAndSwapInt_builtin): Use flag_use_atomic_builtins.
2009-08-12 Andrew Haley <aph@redhat.com>
* builtins.c (compareAndSwapInt_builtin): Use
flag_use_atomic_builtins.
(compareAndSwapLong_builtin): Likewise.
(compareAndSwapObject_builtin): Likewise.
* jvspec.c: Add flag_use_atomic_builtins.
* gcj.texi: Likewise.
* java-tree.h: Likewise.
* lang.opt: Likewise.
From-SVN: r150699
Diffstat (limited to 'gcc/java/builtins.c')
-rw-r--r-- | gcc/java/builtins.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/java/builtins.c b/gcc/java/builtins.c index 0f7b197..6e4815b 100644 --- a/gcc/java/builtins.c +++ b/gcc/java/builtins.c @@ -318,7 +318,8 @@ compareAndSwapInt_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree orig_call) { enum machine_mode mode = TYPE_MODE (int_type_node); - if (sync_compare_and_swap[mode] != CODE_FOR_nothing) + if (sync_compare_and_swap[mode] != CODE_FOR_nothing + || flag_use_atomic_builtins) { tree addr, stmt; UNMARSHAL5 (orig_call); @@ -337,7 +338,12 @@ compareAndSwapLong_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree orig_call) { enum machine_mode mode = TYPE_MODE (long_type_node); - if (sync_compare_and_swap[mode] != CODE_FOR_nothing) + if (sync_compare_and_swap[mode] != CODE_FOR_nothing + || (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (word_mode) + && flag_use_atomic_builtins)) + /* We don't trust flag_use_atomic_builtins for multi-word + compareAndSwap. Some machines such as ARM have atomic libfuncs + but not the multi-word versions. */ { tree addr, stmt; UNMARSHAL5 (orig_call); @@ -355,7 +361,8 @@ compareAndSwapObject_builtin (tree method_return_type ATTRIBUTE_UNUSED, tree orig_call) { enum machine_mode mode = TYPE_MODE (ptr_type_node); - if (sync_compare_and_swap[mode] != CODE_FOR_nothing) + if (sync_compare_and_swap[mode] != CODE_FOR_nothing + || flag_use_atomic_builtins) { tree addr, stmt; int builtin; |