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
      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  }