+ lispobj old_value;
+#if defined(LISP_FEATURE_DARWIN)
+ asm volatile ("lock/xchg %0,(%1)"
+ : "=r" (old_value)
+ : "r" (dest), "0" (value)
+ : "memory");
+#else
+ asm volatile ("lock xchg %0,(%1)"
+ : "=r" (old_value)
+ : "r" (dest), "0" (value)
+ : "memory");
+#endif
+ return old_value;