aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/sysdeps/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads/sysdeps/sparc')
-rw-r--r--linuxthreads/sysdeps/sparc/sparc64/pt-machine.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
index e22f4fe..e5695c0 100644
--- a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
+++ b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
@@ -38,9 +38,11 @@ testandset (int *spinlock)
/* Memory barrier; default is to do nothing */
-/* FIXME: is stbar OK, or should we use the more general membar instruction?
- If so, which mode to pass to membar? */
-#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory")
+#define MEMORY_BARRIER() \
+ __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory")
+/* Read barrier. */
+#define READ_MEMORY_BARRIER() \
+ __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory")
/* Write barrier. */
#define WRITE_MEMORY_BARRIER() \
__asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory")