From: Andrew Haley <aph@redhat.com>
To: java-patches@gcc.gnu.org, Gcc Patch List <gcc-patches@gcc.gnu.org>
Subject: Java: add flag_use_atomic_builtins
Date: Wed, 12 Aug 2009 16:09:00 -0000 [thread overview]
Message-ID: <4A82E93B.5010504@redhat.com> (raw)
Some targets, particularly ARM, don't have instructions for things
such as sync_compare_and_swap. Instead, a routine in libgcc is
used. This patch adds a new gcj option, -fuse-atomic-builtins,
which causes gcj to use the routines in libgcc whenever atomic
operations are needed.
Andrew.
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.
Index: java/builtins.c
===================================================================
--- java/builtins.c (revision 150696)
+++ java/builtins.c (working copy)
@@ -318,7 +318,8 @@
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 @@
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 @@
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;
Index: java/jvspec.c
===================================================================
--- java/jvspec.c (revision 150696)
+++ java/jvspec.c (working copy)
@@ -73,6 +73,7 @@
%<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
%<fextdirs*\
%<fuse-divide-subroutine %<fno-use-divide-subroutine\
+ %<fuse-atomic-builtins %<fno-use-atomic-builtins\
%<fcheck-references %<fno-check-references\
%<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\
%{f*} -fdollars-in-identifiers\
Index: java/lang.opt
===================================================================
--- java/lang.opt (revision 150696)
+++ java/lang.opt (working copy)
@@ -192,6 +192,10 @@
Java Var(flag_use_divide_subroutine) Init(1)
Call a library routine to do integer divisions
+fuse-atomic-builtins
+Java Var(flag_use_atomic_builtins) Init(0)
+Generate code for built-in atomic operations
+
fbootstrap-classes
Java Var(flag_bootstrap_classes)
Generated should be loaded by bootstrap loader
Index: java/java-tree.h
===================================================================
--- java/java-tree.h (revision 150696)
+++ java/java-tree.h (working copy)
@@ -145,6 +145,9 @@
/* When nonzero, call a library routine to do integer divisions. */
extern int flag_use_divide_subroutine;
+/* When nonzero, use atomic builtins. */
+extern int flag_use_atomic_builtins;
+
/* When nonzero, generate code for the Boehm GC. */
extern int flag_use_boehm_gc;
Index: java/gcj.texi
===================================================================
--- java/gcj.texi (revision 150696)
+++ java/gcj.texi (working copy)
@@ -607,6 +607,13 @@
accessing an object via a reference. On other systems you won't need
this because null pointer accesses are caught automatically by the
processor.
+
+@item -fuse-atomic-builtins
+On some systems, gcc can generate code for built-in atomic operations.
+Use this option to force gcj to use these builtins when compiling Java
+code. Where this capability is present it should be automatically
+detected, so you won't usually need to use this option.
+
@end table
@c man end
z
next reply other threads:[~2009-08-12 16:09 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-12 16:09 Andrew Haley [this message]
2009-08-12 16:49 ` Joseph S. Myers
2009-08-12 16:54 ` Andrew Haley
2009-08-12 16:57 ` Paolo Bonzini
2009-08-12 17:05 ` Andrew Haley
2009-08-12 17:17 ` Andrew Haley
2009-08-12 18:08 ` Boehm, Hans
2009-08-12 18:25 ` Boehm, Hans
2009-08-12 18:27 ` Richard Guenther
2009-08-12 19:00 ` David Daney
2009-08-12 18:08 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A82E93B.5010504@redhat.com \
--to=aph@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=java-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).