From #694 (comment):
LL/SC machines are the motivation for compare_exchange_weak existing in the C++ standard. Other compilers like GCC and clang know the difference and emit non-looping code for CAS_weak.
Apparently it cannot be done without compiler support by having more ARM intrinsics exposed.