summaryrefslogtreecommitdiff
path: root/graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h')
-rw-r--r--graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h b/graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h
new file mode 100644
index 0000000000..6d284b1ae0
--- /dev/null
+++ b/graphics/asymptote/libatomic_ops/src/atomic_ops/sysdeps/gcc/tile.h
@@ -0,0 +1,48 @@
+/*
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+#if (AO_GNUC_PREREQ(4, 8) || AO_CLANG_PREREQ(3, 4)) \
+ && !defined(AO_DISABLE_GCC_ATOMICS)
+
+# include "generic.h"
+
+#else /* AO_DISABLE_GCC_ATOMICS */
+
+ /* Minimal support for tile. */
+
+# include "../all_atomic_load_store.h"
+
+# include "../test_and_set_t_is_ao_t.h"
+
+ AO_INLINE void
+ AO_nop_full(void)
+ {
+ __sync_synchronize();
+ }
+# define AO_HAVE_nop_full
+
+ AO_INLINE AO_t
+ AO_fetch_and_add_full(volatile AO_t *p, AO_t incr)
+ {
+ return __sync_fetch_and_add(p, incr);
+ }
+# define AO_HAVE_fetch_and_add_full
+
+ AO_INLINE AO_t
+ AO_fetch_compare_and_swap_full(volatile AO_t *addr, AO_t old_val,
+ AO_t new_val)
+ {
+ return __sync_val_compare_and_swap(addr, old_val, new_val
+ /* empty protection list */);
+ }
+# define AO_HAVE_fetch_compare_and_swap_full
+
+#endif /* AO_DISABLE_GCC_ATOMICS */