static inline void nt_spin_lock(volatile NT_SPIN_LOCK *lock) { __asm__ __volatile__( "\n" "1:\t" " lock; addl $1, %0; mfence\n\t" " cmpl %1, %0\n\t" " je 3f\n" "2:\t" " rep; nop\n\t" " cmpl %2, %0\n\t" " jne 2b\n\t" " jmp 1b\n" "3:\n\t" : "=m" (*lock) : "i" (NT_SPIN_LOCK_UNLOCKED + 1), "i" (NT_SPIN_LOCK_UNLOCKED) : "memory"); }