De acordo com https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html , há:
type __atomic_load_n (type *ptr, int memorder)
e (o "genérico"):
void __atomic_load (type *ptr, type *ret, int memorder)
então
void __atomic_store_n (type *ptr, type val, int memorder)
e ("o genérico")
void __atomic_store (type *ptr, type *val, int memorder)
etc.
O que é genérico nas últimas versões (não é genérico nas anteriores) e por que elas são necessárias?
fonte