你将如何在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位比较和交换吗?
该LOCK
前缀可以不与组合使用MOV
指令.
LOCK前缀只能作为以下指令前缀,并且只能作为目标操作数是内存操作数的指令形式:ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,DEC,INC,NEG, NOT,OR,SBB,SUB,XOR,XADD和XCHG.英特尔指令集参考
这样做会产生无效的操作码异常.这LOCK CMPXCHG16B
是唯一的方法.