OSCompareAndSwap (Mac OS X) эквивалентен CMPXCHG8B?
OSCompareAndSwap (Mac OS X) эквивалентен CMPXCHG8B?
2 ответа
Решение
Вы можете найти определение атомарных функций в файле OSAtomic.s в источнике XNU. Например, вот OSAtomicCompareAndSwapPtr для x86_64 в версии 1486.2.11:
_OSCompareAndSwap64:
_OSCompareAndSwapPtr: #;oldValue, newValue, ptr
movq %rdi, %rax
lock
cmpxchgq %rsi, 0(%rdx) #; CAS (eax is an implicit operand)
sete %al #; did CAS succeed? (TZ=1)
movzbq %al, %rax #; clear out the high bytes
ret
Блокировка cmpxchg8b
точнее
Это для процессоров Intel, но учтите, что OSX существует не только для архитектуры Intel, поэтому ASM будет отличаться