在Visual C++中是否有一个8位原子CAS(cmpxchg)内在的X64?

Adi*_*sak 6 64-bit x86-64 inline-assembly visual-c++

在32位Visual Studio C++中可以使用以下代码.是否有使用内在函数的64位等效项,因为64位版本的Visual Studio C++不支持内联ASM?

FORCEINLINE bool bAtomicCAS8(volatile UINT8 *dest, UINT8 oldval, UINT8 newval)
{
    bool result=false;
    __asm
    {
        mov     al,oldval
        mov     edx,dest
        mov     cl,newval
        lock cmpxchg    byte ptr [edx],cl
        setz    result
    }
    return(result);
}
Run Code Online (Sandbox Code Playgroud)

以下instrinsics在Visual Studio C++下编译

_InterlockedCompareExchange16
_InterlockedCompareExchange
_InterlockedCompareExchange64
_InterlockedCompareExchange128
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是什么

_InterlockedCompareExchange8
Run Code Online (Sandbox Code Playgroud)

但这似乎并不存在.

Bo *_*son 3

不,那不存在。如果需要的话,您可以离线实现它。

原子_msvc_x64.asm

_text   SEGMENT

; char _InterlockedCompareExchange8(volatile char*, char NewValue, char Expected) 
;      - RCX, RDX, R8

_InterlockedCompareExchange8  PROC

    mov    eax,r8d
    lock cmpxchg [rcx],dl
    ret

_InterlockedCompareExchange8  ENDP

_text  ENDS

       END
Run Code Online (Sandbox Code Playgroud)