OSCompareAndSwap(Mac OS X)是否等同于CMPXCHG8B?

时间:2010-03-19 11:01:58

标签: macos assembly kernel compare-and-swap atomic-swap

OSCompareAndSwap(Mac OS X)是否等同于CMPXCHG8B?

2 个答案:

答案 0 :(得分:2)

您可以在XNU源中的OSAtomic.s文件中找到原子函数的定义。例如,版本1486.2.11中的OSAtomicCompareAndSwapPtr for x86_64

_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

答案 1 :(得分:0)

锁 CMPXCHG8B

更确切地说

它适用于英特尔处理器,但考虑到,osx不仅存在于英特尔架构中,因此asm会有所不同