--- /dev/null
+#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;
+}