]> granicus.if.org Git - gc/commitdiff
2008-08-10 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sun, 10 Aug 2008 14:43:54 +0000 (14:43 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 11:31:21 +0000 (15:31 +0400)
* include/private/gc_locks.h: Add amd64 support so parallel mark works on
amd64 too.

svn path=/trunk/mono/; revision=110070

ChangeLog
include/private/gc_locks.h

index 02f00b01a1ad3ff6b4e5fbe4f2cd2fe932d08a48..338e4bc9e4683ae8d5babad51ceae84e65dacdc4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-10  Zoltan Varga  <vargaz@gmail.com>
+
+       * include/private/gc_locks.h: Add amd64 support so parallel mark works on
+       amd64 too.
+
 2008-08-05  Andreas Färber  <andreas.faerber@web.de>
 
        * autogen.sh: Suppress arguments warning for NOCONFIGURE.
index d1ccf0ed0da550eb4061b8998ea6a1a5d4d7ce87..ee38aff5bc57c6acb276d252ec5f40a45bea8c19 100644 (file)
        }
 #     endif /* I386 */
 
+#     if defined(X86_64)
+#      if !defined(GENERIC_COMPARE_AND_SWAP)
+         /* Returns TRUE if the comparison succeeded. */
+         inline static GC_bool GC_compare_and_exchange(volatile GC_word *addr,
+                                                      GC_word old,
+                                                      GC_word new_val) 
+         {
+          char result;
+          __asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
+               : "+m"(*(addr)), "=r"(result)
+               : "r" (new_val), "a"(old) : "memory");
+          return (GC_bool) result;
+         }
+#      endif /* !GENERIC_COMPARE_AND_SWAP */
+       inline static void GC_memory_barrier()
+       {
+        /* We believe the processor ensures at least processor */
+        /* consistent ordering.  Thus a compiler barrier       */
+        /* should suffice.                                     */
+         __asm__ __volatile__("" : : : "memory");
+       }
+#     endif /* X86_64 */
+
 #     if defined(POWERPC)
 #      if !defined(GENERIC_COMPARE_AND_SWAP)
 #       if CPP_WORDSZ == 64