Merge pull request #4594 from lambdageek/bug-53890
[mono.git] / mono / utils / mono-membar.h
index 2ae1a4acc9c935eeafb3025308596ddab6271629..3f937b3b43164c6f8a97015bcff49fc6632324b3 100644 (file)
@@ -1,5 +1,6 @@
-/*
- * mono-membar.h: Memory barrier inline functions
+/**
+ * \file
+ * Memory barrier inline functions
  *
  * Author:
  *     Mark Probst (mark.probst@gmail.com)
@@ -15,6 +16,9 @@
 #include <glib.h>
 
 #ifdef _MSC_VER
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
 #include <windows.h>
 #include <intrin.h>
 
@@ -42,34 +46,6 @@ static inline void mono_memory_write_barrier (void)
        _WriteBarrier ();
        MemoryBarrier ();
 }
-#elif defined(__WIN32__) || defined(_WIN32)
-#include <windows.h>
-
-/* Since we only support GCC 3.x in Cygwin for
-   some arcane reason, we have to use inline
-   assembly to get fences (__sync_synchronize
-   is not available). */
-
-static inline void mono_memory_barrier (void)
-{
-       __asm__ __volatile__ (
-               "lock\n\t"
-               "addl\t$0,0(%%esp)\n\t"
-               :
-               :
-               : "memory"
-       );
-}
-
-static inline void mono_memory_read_barrier (void)
-{
-       mono_memory_barrier ();
-}
-
-static inline void mono_memory_write_barrier (void)
-{
-       mono_memory_barrier ();
-}
 #elif defined(USE_GCC_ATOMIC_OPS)
 static inline void mono_memory_barrier (void)
 {
@@ -85,63 +61,8 @@ static inline void mono_memory_write_barrier (void)
 {
        mono_memory_barrier ();
 }
-#elif defined(sparc) || defined(__sparc__)
-static inline void mono_memory_barrier (void)
-{
-       __asm__ __volatile__ ("membar   #LoadLoad | #LoadStore | #StoreStore | #StoreLoad" : : : "memory");
-}
-
-static inline void mono_memory_read_barrier (void)
-{
-       __asm__ __volatile__ ("membar   #LoadLoad" : : : "memory");
-}
-
-static inline void mono_memory_write_barrier (void)
-{
-       __asm__ __volatile__ ("membar   #StoreStore" : : : "memory");
-}
-#elif defined(__s390__)
-static inline void mono_memory_barrier (void)
-{
-       __asm__ __volatile__ ("bcr 15,0" : : : "memory");
-}
-
-static inline void mono_memory_read_barrier (void)
-{
-       mono_memory_barrier ();
-}
-
-static inline void mono_memory_write_barrier (void)
-{
-       mono_memory_barrier ();
-}
-#elif defined(__ia64__)
-static inline void mono_memory_barrier (void)
-{
-       __asm__ __volatile__ ("mf" : : : "memory");
-}
-
-static inline void mono_memory_read_barrier (void)
-{
-       mono_memory_barrier ();
-}
-
-static inline void mono_memory_write_barrier (void)
-{
-       mono_memory_barrier ();
-}
-#elif defined(MONO_CROSS_COMPILE)
-static inline void mono_memory_barrier (void)
-{
-}
-
-static inline void mono_memory_read_barrier (void)
-{
-}
-
-static inline void mono_memory_write_barrier (void)
-{
-}
+#else
+#error "Don't know how to do memory barriers!"
 #endif
 
 #endif /* _MONO_UTILS_MONO_MEMBAR_H_ */