如何在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位比较和交换吗?
答案 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
是唯一的方法。