__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 not defined on aarch64
Richard Earnshaw (lists)
Richard.Earnshaw@arm.com
Fri Jun 30 08:49:00 GMT 2017
On 29/06/17 18:35, Alexander Monakov wrote:
> On Thu, 29 Jun 2017, Alexander Monakov wrote:
>> (but of course that's a nontrivial amount of work for a somewhat "academic"
>> issue)
>
> I think a practical approach is to give the user a degree of control by
> introducing a tri-state compiler option controlling how double-word atomics
> are to be emitted:
>
> - -m128-bit-atomics=libcalls
>
> this is the current behavior, all doubleword atomics become libatomic API
> calls; I don't imagine anyone really likes that;
>
> - -m128-bit-atomics=cas+loads
>
> all doubleword atomics, including loads, become cas/ll-sc loops; atomic loads
> from readonly memory may trap, but the user may know that their code never
> encounters that situation (e.g. if it's in control of how atomic objects are
> allocated, normally on stack or on heap);
>
> it would be binary-incompatible with the above option, but, again, acceptable
> in many situations where the atomic objects are not exposed to
> potentially-incompatible code;
>
> I think this is what users would actually want in practice;
>
> - -m128-bit-atomics=cas-loads
>
> all doubleword atomics, *exluding loads*, become cas/ll-sc loops; atomic loads
> become calls; in the end the user gets a link error and needs to decide how to
> handle it:
> - either adjust the program such that no plain loads remain, or
> - resolve the link error by providing a definition that works via cas, if they
> know that their accesses won't trap (could be with a static inline function,
> so in the end there's no overhead),
> - use the solution with kernel+vdso assist from the previous mail :)
>
> this might eventually become the default compiler behavior.
>
> Alexander
>
This was leads chaos. I would nak such a feature.
R.
More information about the Gcc-help
mailing list