aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc/extend.texi
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2013-06-21 13:51:48 +0000
committerAndi Kleen <ak@gcc.gnu.org>2013-06-21 13:51:48 +0000
commit927f908bf879a79ec26af82671e2a5b93073a8a2 (patch)
treec37e13744a23b3780fe8bdb3aaf2d908e43581d6 /gcc/doc/extend.texi
parentcca410b69b25a729ea3a4d3614426e380c688ca4 (diff)
downloadgcc-927f908bf879a79ec26af82671e2a5b93073a8a2.zip
gcc-927f908bf879a79ec26af82671e2a5b93073a8a2.tar.gz
gcc-927f908bf879a79ec26af82671e2a5b93073a8a2.tar.bz2
Fix HLE example in manual
The HLE example in the manual only commits when using bool for the flag, because __atomic_clear only writes bool, and HLE requires the acquire and release to match. So when the example is copied with e.g. an int variable it does not commit and causes slower than expected performance. Some people are running into problems because of this. Switch it over to use __atomic_store. Also fix a minor typo nearby. gcc/: 2013-06-21 Andi Kleen <ak@linux.intel.com> * doc/extend.texi: Dont use __atomic_clear in HLE example. Fix typo. From-SVN: r200304
Diffstat (limited to 'gcc/doc/extend.texi')
-rw-r--r--gcc/doc/extend.texi6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 213cf00..77295f1 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -7525,18 +7525,20 @@ End lock elision on a lock variable.
Memory model must be @code{__ATOMIC_RELEASE} or stronger.
@end table
-When a lock acquire fails it's required for good performance to abort
+When a lock acquire fails it is required for good performance to abort
the transaction quickly. This can be done with a @code{_mm_pause}
@smallexample
#include <immintrin.h> // For _mm_pause
+int lockvar;
+
/* Acquire lock with lock elision */
while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
_mm_pause(); /* Abort failed transaction */
...
/* Free lock with lock elision */
-__atomic_clear(&lockvar, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
+__atomic_store(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
@end smallexample
@node Object Size Checking