Commit 4b462d77 by Andrew Haley Committed by Andrew Haley

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
parent 97804369
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.
2009-08-11 Dodji Seketeli <dodji@redhat.com> 2009-08-11 Dodji Seketeli <dodji@redhat.com>
PR debug/40990 PR debug/40990
......
...@@ -318,7 +318,8 @@ compareAndSwapInt_builtin (tree method_return_type ATTRIBUTE_UNUSED, ...@@ -318,7 +318,8 @@ compareAndSwapInt_builtin (tree method_return_type ATTRIBUTE_UNUSED,
tree orig_call) tree orig_call)
{ {
enum machine_mode mode = TYPE_MODE (int_type_node); 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; tree addr, stmt;
UNMARSHAL5 (orig_call); UNMARSHAL5 (orig_call);
...@@ -337,7 +338,12 @@ compareAndSwapLong_builtin (tree method_return_type ATTRIBUTE_UNUSED, ...@@ -337,7 +338,12 @@ compareAndSwapLong_builtin (tree method_return_type ATTRIBUTE_UNUSED,
tree orig_call) tree orig_call)
{ {
enum machine_mode mode = TYPE_MODE (long_type_node); 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; tree addr, stmt;
UNMARSHAL5 (orig_call); UNMARSHAL5 (orig_call);
...@@ -355,7 +361,8 @@ compareAndSwapObject_builtin (tree method_return_type ATTRIBUTE_UNUSED, ...@@ -355,7 +361,8 @@ compareAndSwapObject_builtin (tree method_return_type ATTRIBUTE_UNUSED,
tree orig_call) tree orig_call)
{ {
enum machine_mode mode = TYPE_MODE (ptr_type_node); 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; tree addr, stmt;
int builtin; int builtin;
......
...@@ -607,6 +607,13 @@ On some systems it's necessary to insert inline checks whenever ...@@ -607,6 +607,13 @@ On some systems it's necessary to insert inline checks whenever
accessing an object via a reference. On other systems you won't need accessing an object via a reference. On other systems you won't need
this because null pointer accesses are caught automatically by the this because null pointer accesses are caught automatically by the
processor. 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 @end table
@c man end @c man end
......
...@@ -145,6 +145,9 @@ extern int flag_newer; ...@@ -145,6 +145,9 @@ extern int flag_newer;
/* When nonzero, call a library routine to do integer divisions. */ /* When nonzero, call a library routine to do integer divisions. */
extern int flag_use_divide_subroutine; 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. */ /* When nonzero, generate code for the Boehm GC. */
extern int flag_use_boehm_gc; extern int flag_use_boehm_gc;
......
...@@ -73,6 +73,7 @@ static const char jvgenmain_spec[] = ...@@ -73,6 +73,7 @@ static const char jvgenmain_spec[] =
%<fclasspath* %<fCLASSPATH* %<fbootclasspath*\ %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
%<fextdirs*\ %<fextdirs*\
%<fuse-divide-subroutine %<fno-use-divide-subroutine\ %<fuse-divide-subroutine %<fno-use-divide-subroutine\
%<fuse-atomic-builtins %<fno-use-atomic-builtins\
%<fcheck-references %<fno-check-references\ %<fcheck-references %<fno-check-references\
%<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\ %<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\
%{f*} -fdollars-in-identifiers\ %{f*} -fdollars-in-identifiers\
......
...@@ -192,6 +192,10 @@ fuse-divide-subroutine ...@@ -192,6 +192,10 @@ fuse-divide-subroutine
Java Var(flag_use_divide_subroutine) Init(1) Java Var(flag_use_divide_subroutine) Init(1)
Call a library routine to do integer divisions 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 fbootstrap-classes
Java Var(flag_bootstrap_classes) Java Var(flag_bootstrap_classes)
Generated should be loaded by bootstrap loader Generated should be loaded by bootstrap loader
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment