我想為多執行緒作業系統的 atomic64bit 讀/寫函式撰寫匯編語言,但是我使用的處理器是 32 位的(AM574x、AM576x、Sitara 處理器、使用 ARMv7-A 架構的 Cortex A15)并且它在用戶模式下運行并且它需要保持在用戶模式(意味著禁用中斷不起作用 - CPSID I)。在匯編中有沒有辦法做到這一點?
uj5u.com熱心網友回復:
請參閱ARM 架構參考手冊 Armv7-A 和 ARMv7-R 版(DDI 0406C)的 A3.4 “同步和信號量”部分。
這歸結為在回圈中使用ldrexdand指令:strexd
@ assuming r0 holds the address, r1:r2 holds the datum to be stored
again: ldrexd r3, r4, [r0] @ retrieve old value, tag memory
strexd r3, r1, r2, [r0] @ attempt to store
cmp r3, #0 @ did the store succeed?
bne again
需要該ldrexd指令來標記獨占存盤的記憶體。它不能被消除。您必須在回圈中執行此操作,因為它可能會虛假地失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/464751.html
