blob: 2e13b09b49738ec1af4d415af6e5b881d4340048 [file] [log] [blame]
#include "libgomp.h"
#include "../../atomic.c"
/* Implement __sync_val_compare_and_swap_16, to support offloading from hosts
that support this builtin. Fallback on libatomic. This can be removed
once omp-expand starts using __atomic_compare_exchange_n instead. */
unsigned __int128
__sync_val_compare_and_swap_16 (volatile void *vptr, unsigned __int128 oldval,
unsigned __int128 newval)
{
volatile __int128 *ptr = vptr;
__int128 expected = oldval;
__atomic_compare_exchange_n (ptr, &expected, newval, false,
MEMMODEL_SEQ_CST, MEMMODEL_SEQ_CST);
return expected;
}