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>
PR debug/40990
......
......@@ -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;
......
......@@ -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
......
......@@ -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;
......
......@@ -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\
......
......@@ -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
......
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