x86 128位原子操作

时间:2010-11-04 16:42:44

标签: assembly x86 atomic x86-64

如何在x86中实现128位原子操作?

英特尔系统编程指南,第1部分,8.1锁定原子操作指定保证16位,32位和64位原子操作。那么,你能用2个带有LOCK前缀的64位操作来实现128位原子操作吗?有点像...

LOCK mov 64bits->addr
LOCK mov 64bits->addr+64bits

通常SSE具有128位XMM寄存器。你能用这些寄存器进行128位比较和交换吗?

1 个答案:

答案 0 :(得分:10)

LOCK前缀不能与MOV指令结合使用。

  

LOCK前缀只能作为以下指令前缀,并且只能作为目标操作数是内存操作数的指令形式:ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,DEC,INC ,NEG,NOT,OR,SBB,SUB,XOR,XADD和XCHG。 Intel Instruction Set Reference

这样做会产生无效的操作码异常。所以LOCK CMPXCHG16B是唯一的方法。