Visual C 中的 X64 是否有 8 位原子 CAS (cmpxchg) 内在函数?
以下代码可以在 32 位 Visual Studio C++ 中使用。由于 64 位版本的 Visual Studio C++ 不支持内联 ASM,是否有使用内部函数的 64 位等效项?
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);
}
以下内联函数在 Visual Studio C++ 下编译
_InterlockedCompareExchange16
_InterlockedCompareExchange
_InterlockedCompareExchange64
_InterlockedCompareExchange128
我正在寻找的是类似的东西
_InterlockedCompareExchange8
但这似乎不存在。
The following code is possible in 32-bit Visual Studio C++. Is there a 64-bit equivalent using intrinsics since inline ASM isn't supported in the 64-bit version of Visual Studio C++?
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);
}
The following instrinsics compile under Visual Studio C++
_InterlockedCompareExchange16
_InterlockedCompareExchange
_InterlockedCompareExchange64
_InterlockedCompareExchange128
What I am looking for is something along the lines of
_InterlockedCompareExchange8
But that doesn't seem to exist.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,那不存在。如果需要的话,您可以离线实现它。
原子_msvc_x64.asm
No, that doesn't exist. You can implement it out-of-line though, if needed.
atomic_msvc_x64.asm
已针对 Visual Studio 2012 验证此内在函数确实存在:
但是,它在文档中没有出现。
Verified for Visual Studio 2012 that this intrinsic does exist :
However, it appears nowhere in the documentation.