diff mbox

[committed] Add -fno-sync-libcalls

Message ID 4FA006E3.90401@redhat.com
State New
Headers show

Commit Message

Richard Henderson May 1, 2012, 3:53 p.m. UTC
A support option for implementing libatomic, committed as a separate patch.


r~
* common.opt (fsync-libcalls): New.
	* doc/invoke.texi: Document it.
	* optabs.c (init_sync_libfuncs): Honor it.
diff mbox

Patch

diff --git a/gcc/common.opt b/gcc/common.opt
index af02992..cc57976 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1878,6 +1878,10 @@  fstrict-overflow
 Common Report Var(flag_strict_overflow)
 Treat signed overflow as undefined
 
+fsync-libcalls
+Common Report Var(flag_sync_libcalls) Init(1)
+Implement __atomic operations via libcalls to legacy __sync functions
+
 fsyntax-only
 Common Report Var(flag_syntax_only)
 Check for syntax errors, then stop
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index a7efaa7..5550c71 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -990,7 +990,7 @@  See S/390 and zSeries Options.
 -fno-stack-limit -fsplit-stack @gol
 -fleading-underscore  -ftls-model=@var{model} @gol
 -ftrapv  -fwrapv  -fbounds-check @gol
--fvisibility -fstrict-volatile-bitfields}
+-fvisibility -fstrict-volatile-bitfields -fsync-libcalls}
 @end table
 
 @menu
@@ -19824,6 +19824,16 @@  that it is unaware of.
 The default value of this option is determined by the application binary
 interface for the target processor.
 
+@item -fsync-libcalls
+@opindex fsync-libcalls
+This option controls whether any out-of-line instance of the @code{__sync}
+family of functions may be used to implement the C++11 @code{__atomic}
+family of functions.
+
+The default value of this option is enabled, thus the only useful form
+of the option is @option{-fno-sync-libcalls}.  This option is used in
+the implementation of the @file{libatomic} runtime library.
+
 @end table
 
 @c man end
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 080061a..7ef513a 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -6643,6 +6643,9 @@  init_sync_libfuncs_1 (optab tab, const char *base, int max)
 void
 init_sync_libfuncs (int max)
 {
+  if (!flag_sync_libcalls)
+    return;
+
   init_sync_libfuncs_1 (sync_compare_and_swap_optab,
 			"__sync_val_compare_and_swap", max);
   init_sync_libfuncs_1 (sync_lock_test_and_set_optab,