Потенциальные проблемы при использовании 16-байтных атомарных операций
======================================================================

Для процессоров с системой команд elbrus-v4 и ниже отсутствует аппаратная поддержка 16-байтных
атомарных операций (есть только атомарные load и store для дескрипторов защищённого режима).
Поэтому в компиляторе при построении 16-байтных атомарных операций для режимов elbrus-v4
и ниже строится вызов функции из библиотеки libatomic. Функции внутри себя реализованы
через использование mutex'а, т.е. НЕ являются Lock-Free

Для процессоров с системой команд elbrus-v5 и выше уже есть аппаратная поддержка 16-байтных
атомарных операций. Поэтому в компиляторе при построении 16-байтных атомарных
операций для режимов elbrus-v5 и выше строится код, использующий аппаратную
поддержку, т.е. без использования функций из библиотеки libatomic

Такая работа компилятора приведёт к проблеме, когда внутри одной программы
используются 16-байтные атомарные операции над одним и тем же адресом памяти
в случае, если часть кода скомпилирована в режиме elbrus-v4 и ниже, а часть кода - в
режиме elbrus-v5 и выше. Это обусловлено тем, что нельзя совмещать разные способы
построения атомарных операций над одним и тем же адресом - нужно либо чтобы все обращения
работали через библиотеку libatomic, либо чтобы все обращения работали через аппаратную
поддержку

При наличии смеси из кодов, скомпилированных под разные режимы ``-march=`` и имеющих
атомарные операции над одним и тем же адресом, следует использовать опцию
``-mno-quad-memory-atomic``, которая принудительно запретит использование аппаратной
поддержки при построении 16-байтных атомарных операций

