This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 not defined on aarch64


On 29/06/17 10:40, Alexander Monakov wrote:
> On Thu, 29 Jun 2017, Andrew Haley wrote:
>> I think I now properly understand Richard Earnshaw's point: that we
>> *do* support a full set of atomic primitives for 16-byte types via
>> libatomic, but for them to work as a sequentially-consistent set we
>> must use the same locking scheme for all of them.  It's ugly, and
>> horrible for anyone who simply wants a double-word CAS, but it is what
>> it is.  We can't use LDXP because it isn't atomic on its own, and the
>> ARM manual is quite explicit about this.  Anyone who wants to use
>> a real compare-and-swap-16 is on their own.
> 
> Note that there's no 'atomic read' primitive among __sync builtins, so
> IMO it gives a way out: expose native doubleword cas via __sync_compare_and_swap,
> use a locking scheme for its __atomic counterpart.

So it does.  Good idea.  Although documenting the incompatibility between
__atomic and __sync might be rather problematic.  :-)

-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]