xref: /netbsd-src/external/gpl3/gcc/dist/libgomp/config/nvptx/atomic.c (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 #include "libgomp.h"
2 
3 #include "../../atomic.c"
4 
5 /* Implement __sync_val_compare_and_swap_16, to support offloading from hosts
6    that support this builtin.  Fallback on libatomic.  This can be removed
7    once omp-expand starts using __atomic_compare_exchange_n instead.  */
8 
9 unsigned __int128
__sync_val_compare_and_swap_16(volatile void * vptr,unsigned __int128 oldval,unsigned __int128 newval)10 __sync_val_compare_and_swap_16 (volatile void *vptr, unsigned __int128 oldval,
11 				unsigned __int128 newval)
12 {
13   volatile __int128 *ptr = vptr;
14   __int128 expected = oldval;
15   __atomic_compare_exchange_n (ptr, &expected, newval, false,
16 			       MEMMODEL_SEQ_CST, MEMMODEL_SEQ_CST);
17   return expected;
18 }
19