все обращения к памяти и без volatile на x86 дают acquire/release семантику
просто без volatile компилятор может заоптимизировать переменную в регистр и не обращаться снова в память
Тем не менее это не отвечает на вопрос, почему с relaxed memory order (который слабее rel/ac) используется cas инструкция, а для volatile на котором ms обещает rel/ac используются три отдельные инструкции load inc store.