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)
但这似乎并不存在.
不,那不存在。如果需要的话,您可以离线实现它。
原子_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)
| 归档时间: |
|
| 查看次数: |
1657 次 |
| 最近记录: |