如何在x86中實現128位原子操作?x86 128位原子操作
英特爾系統編程指南第1部分8.1鎖定原子操作指定保證的16位,32位和64位原子操作。那麼,你可以用LOCK前綴做2個64位操作來實現128位原子操作嗎?類似...
LOCK mov 64bits->addr
LOCK mov 64bits->addr+64bits
Aparently SSE有128位XMM寄存器。你能用這些寄存器做128位的比較和交換嗎?
如何在x86中實現128位原子操作?x86 128位原子操作
英特爾系統編程指南第1部分8.1鎖定原子操作指定保證的16位,32位和64位原子操作。那麼,你可以用LOCK前綴做2個64位操作來實現128位原子操作嗎?類似...
LOCK mov 64bits->addr
LOCK mov 64bits->addr+64bits
Aparently 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。 Intel Instruction Set Reference
否則將產生一個操作碼無效異常。所以LOCK CMPXCHG16B
是這裏唯一的方法。
您需要CMPXCHG上的'LOCK'前綴嗎?似乎沒有必要。 – brooksbp 2011-06-26 21:43:27
關於英特爾指令集參考,需要'LOCK'。 「該指令可以與LOCK前綴一起使用,以允許指令以原子方式執行,爲了簡化與處理器總線的接口,目標操作數接收寫週期而不考慮比較結果。」 – bkausbk 2011-07-14 07:28:54
@brooksbp:有[''cmpxchg'沒有'lock'的用例](https://stackoverflow.com/a/44273130/224132),例如用於除MMIO端口以外的其他內存的單處理器系統。這也使得它與內存目的地「add」以及除併發之外具有明顯用途的其他指令一致。 – 2017-11-27 09:52:33
你可以做一個原子16字節的比較交換('CMPXCHG16B')。 – 2010-11-04 16:47:03
你想在32位x86或x64中執行此操作嗎? – user200783 2010-11-04 19:56:43
x86_64,64位模式 – brooksbp 2010-11-04 21:07:59