improve aarch64 atomics
authorRich Felker <dalias@aerifal.cx>
Sat, 23 Jan 2016 19:03:40 +0000 (14:03 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 23 Jan 2016 19:03:40 +0000 (14:03 -0500)
commitb17fbd3520640745051d2fd9f1fd334ceb8b8783
treee4b6b233e866b6baef822554855f23c342e9559a
parent0f5eb3de2955e2eaf5ee4b9637d9216f82a97fbd
improve aarch64 atomics

aarch64 provides ll/sc variants with acquire/release memory order,
freeing us from the need to have full barriers both before and after
the ll/sc operation. previously they were not used because the a_cas
can fail without performing a_sc, in which case half of the barrier
would be omitted. instead, define a custom version of a_cas for
aarch64 which uses a_barrier explicitly when aborting the cas
operation. aside from cas, other operations built on top of ll/sc are
not affected since they never abort but rather loop until they
succeed.

a split ll/sc version of the pointer-sized a_cas_p is also introduced
using the same technique.

patch by Szabolcs Nagy.
arch/aarch64/atomic_arch.h