Согласно https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html, есть:
type __atomic_load_n (type *ptr, int memorder)
и («универсальный»):
void __atomic_load (type *ptr, type *ret, int memorder)
затем
void __atomic_store_n (type *ptr, type val, int memorder)
и(«универсальный»)
void __atomic_store (type *ptr, type *val, int memorder)
и т. д.
Что общего в последних версиях (это не общее в предыдущих версиях) и зачем они нужны?