public inbox for java-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Java: add flag_use_atomic_builtins
@ 2009-08-12 16:09 Andrew Haley
  2009-08-12 16:49 ` Joseph S. Myers
  0 siblings, 1 reply; 11+ messages in thread
From: Andrew Haley @ 2009-08-12 16:09 UTC (permalink / raw)
  To: java-patches, Gcc Patch List

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

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-08-12 19:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-12 16:09 Java: add flag_use_atomic_builtins Andrew Haley
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

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).