`CMPXCHG8B m64`与`CMPXCHG r/m64, r64`指令的差异是什么?
CMPXCHG8B m64与CMPXCHG r/m64, r64指令的差异 功能与操作逻辑差异
CMPXCHG r/m64, r64:针对64位数据执行比较交换操作,支持寄存器或内存作为操作数。将目标操作数(r/m64)与RAX寄存器的值对比,若相等则把源寄存器(r64)的值写入目标;若不等则把目标值加载到RAX寄存器。CMPXCHG8B m64:专门处理128位(双四字)数据的比较交换,仅支持内存地址作为操作数(对应连续的128位内存区域)。将内存中的128位值与RDX:RAX寄存器对的值对比,若相等则把RCX:RBX寄存器对的值写入该内存区域;若不等则把内存中的128位值加载到RDX:RAX寄存器对。
Zen4架构下的性能差异
根据指令性能测试数据,带LOCK前缀的两个指令在Zen4架构上的性能表现存在明显区别:
LOCK CMPXCHG:操作数计数(Ops)为5,延迟(Latency)为9周期LOCK CMPXCHG8B:操作数计数(Ops)为15,延迟(Latency)为10周期
指令参考说明
从x86指令集官方文档来看,二者的核心差异仅体现在操作数据宽度和寄存器使用方式上,无其他额外功能差异。
内容的提问来源于stack exchange,提问作者grumpyNeko
相关产品推荐
相关产品推荐

