From: Sandra Loosemore Date: Fri, 27 Feb 2015 18:59:29 +0000 (-0500) Subject: extend.texi (x86 transactional memory intrinsics): Reorganize discussion of _xbegin. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8eba66e88067ee0773d2e245c111703de56540d3;p=gcc.git extend.texi (x86 transactional memory intrinsics): Reorganize discussion of _xbegin. 2015-02-27 Sandra Loosemore gcc/ * doc/extend.texi (x86 transactional memory intrinsics): Reorganize discussion of _xbegin. Clarify that the return value is a bit mask. Expand example and move to end of section. From-SVN: r221068 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bae6265d6da..06ea6d8296b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-02-27 Sandra Loosemore + + * doc/extend.texi (x86 transactional memory intrinsics): + Reorganize discussion of _xbegin. Clarify that the return + value is a bit mask. Expand example and move to end of section. + 2015-02-26 Jakub Jelinek Aldy Hernandez diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index c066d32274e..eb818613eed 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -17274,24 +17274,11 @@ and suitable fallback code always needs to be supplied. Start a RTM (Restricted Transactional Memory) transaction. Returns @code{_XBEGIN_STARTED} when the transaction started successfully (note this is not 0, so the constant has to be -explicitly tested). If the transaction aborts, all side-effects -are undone and an abort code is returned. There is no guarantee -any transaction ever succeeds, so there always needs to be a valid -fallback path. -@end deftypefn - -@smallexample -#include - -if ((status = _xbegin ()) == _XBEGIN_STARTED) @{ - ... transaction code... - _xend (); -@} else @{ - ... non transactional fallback path... -@} -@end smallexample +explicitly tested). -If the transaction aborts, the return value is one of: +If the transaction aborts, all side-effects +are undone and an abort code encoded as a bit mask is returned. +The following macros are defined: @table @code @item _XABORT_EXPLICIT @@ -17309,6 +17296,11 @@ Transaction abort due to a debug trap. Transaction abort in an inner nested transaction. @end table +There is no guarantee +any transaction ever succeeds, so there always needs to be a valid +fallback path. +@end deftypefn + @deftypefn {RTM Function} {void} _xend () Commit the current transaction. When no transaction is active this faults. All memory side-effects of the transaction become visible @@ -17325,6 +17317,37 @@ The @var{status} is an 8-bit constant; its value is encoded in the return value from @code{_xbegin}. @end deftypefn +Here is an example showing handling for @code{_XABORT_RETRY} +and a fallback path for other failures: + +@smallexample +#include + +int n_tries, max_tries; +unsigned status = _XABORT_EXPLICIT; +... + +for (n_tries = 0; n_tries < max_tries; n_tries++) + @{ + status = _xbegin (); + if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY)) + break; + @} +if (status == _XBEGIN_STARTED) + @{ + ... transaction code... + _xend (); + @} +else + @{ + ... non-transactional fallback path... + @} +@end smallexample + +@noindent +Note that, in most cases, the transactional and non-transactional code +must synchronize together to ensure consistency. + @node Target Format Checks @section Format Checks Specific to Particular Target Machines