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
This commit is contained in:
Andrew Haley 2009-08-12 16:10:12 +00:00 committed by Andrew Haley
parent 97804369a9
commit 4b462d7786
6 changed files with 36 additions and 3 deletions

View File

@ -1,3 +1,14 @@
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>
PR debug/40990

View File

@ -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;

View File

@ -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
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

View File

@ -145,6 +145,9 @@ extern int flag_newer;
/* 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;

View File

@ -73,6 +73,7 @@ static const char jvgenmain_spec[] =
%<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\

View File

@ -192,6 +192,10 @@ fuse-divide-subroutine
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