+#if defined(LISP_FEATURE_DARWIN)
+ asm volatile ("xor %0,%0;\n\
+ lock/cmpxchg %1,%2"
+ : "=a" (eax)
+ : "r" (value), "m" (*word)
+ : "memory", "cc");
+#else
+ if (eax!=0) {
+ asm volatile("rep; nop");
+ }
+ asm volatile ("xor %0,%0\n\
+ lock cmpxchg %1,%2"
+ : "=a" (eax)
+ : "r" (value), "m" (*word)
+ : "memory", "cc");
+#endif
+ yield_on_uniprocessor();