-/*
- * atomic.c: Workarounds for atomic operations for platforms that dont have
- * really atomic asm functions in atomic.h
+/**
+ * \file
+ * Workarounds for atomic operations for platforms that dont have
+ * really atomic asm functions in atomic.h
*
* Author:
* Dick Porter (dick@ximian.com)
#include <glib.h>
#include <mono/utils/atomic.h>
+#include <mono/utils/mono-compiler.h>
#if defined (WAPI_NO_ATOMIC_ASM) || defined (BROKEN_64BIT_ATOMICS_INTRINSIC)
return __sync_val_compare_and_swap (dest, comp, exch);
}
-#elif defined (HAVE_64BIT_CMPXCHG_FALLBACK)
+#elif defined (__arm__) && defined (HAVE_ARMV7) && (defined(TARGET_IOS) || defined(TARGET_WATCHOS) || defined(TARGET_ANDROID))
#if defined (TARGET_IOS) || defined (TARGET_WATCHOS)
* so we have to roll our own...
*/
-gint64 InterlockedCompareExchange64(volatile gint64 *dest, gint64 exch, gint64 comp) __attribute__ ((naked));
+gint64 InterlockedCompareExchange64(volatile gint64 *dest, gint64 exch, gint64 comp) __attribute__ ((__naked__));
gint64
InterlockedCompareExchange64(volatile gint64 *dest, gint64 exch, gint64 comp)
return(old);
}
+#endif
#endif
+#if !defined (WAPI_NO_ATOMIC_ASM) && !defined (BROKEN_64BIT_ATOMICS_INTRINSIC) && !defined (NEED_64BIT_CMPXCHG_FALLBACK)
+MONO_EMPTY_SOURCE_FILE (atomic);
#endif