Commit 927f908b by Andi Kleen Committed by Andi Kleen

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
parent cca410b6
2013-06-21 Andi Kleen <ak@linux.intel.com>
* doc/extend.texi: Dont use __atomic_clear in HLE
example. Fix typo.
2013-06-21 Andi Kleen <ak@linux.intel.com>
* doc/extend.texi: Document that __atomic_clear and
__atomic_test_and_set should only be used with bool.
......
......@@ -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
......
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