aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/builtins.c
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2009-08-12 16:10:12 +0000
committerAndrew Haley <aph@gcc.gnu.org>2009-08-12 16:10:12 +0000
commit4b462d7786135d389f58ccda0a9dddf9ed4cee73 (patch)
tree2b29a3b4b734755142382ee704c64493d0a28268 /gcc/java/builtins.c
parent97804369a99a4e9ab5609b158ce5b0becff36880 (diff)
downloadgcc-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.c13
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;