1.0.13.4: Removing UNIX-NAMESTRING, part 4
[sbcl.git] / src / runtime / x86-64-arch.h
index 2085503..10df5d8 100644 (file)
@@ -9,6 +9,8 @@
 #error genesis/config.h (or sbcl.h) must be included before this file
 #endif
 
+#include "interr.h"                     /* for declaration of lose() */
+
 #define ARCH_HAS_STACK_POINTER
 
 /* FIXME: Do we also want
@@ -26,11 +28,19 @@ get_spinlock(volatile lispobj *word,long value)
     if(*word==value)
         lose("recursive get_spinlock: 0x%x,%ld\n",word,value);
     do {
+#if defined(LISP_FEATURE_DARWIN)
+        asm ("xor %0,%0\n\
+              lock/cmpxchg %1,%2"
+             : "=a" (rax)
+             : "r" (value), "m" (*word)
+             : "memory", "cc");
+#else
         asm ("xor %0,%0\n\
               lock cmpxchg %1,%2"
              : "=a" (rax)
              : "r" (value), "m" (*word)
              : "memory", "cc");
+#endif
     } while(rax!=0);
 #else
     *word=value;