Я в настоящее время портирую atomic.hpp для поддержки проекта и хотел бы обобщить функцию атомарного добавления, с помощью которой она шаблонируется для типа добавления:
template <typename T, typename V>
inline T add(volatile T* mem, V val)
{
T r;
asm volatile
(
"lock\n\t"
"xadd %1, %0":
"+m"( *mem ), "=r"( r ):
"1"( val ):
"memory", "cc"
);
return r;
}
Я не могу найти четкую документацию, чтобы с ней можно было безопасно использовать 8, 16, 32 и 64-битные числа с подписью и без них. Кто-нибудь знает?