我想为多线程操作系统的 atomic64bit 读/写函数编写汇编语言,但是我使用的处理器是 32 位的(AM574x、AM576x、Sitara 处理器、使用 ARMv7-A 架构的 Cortex A15)并且它在用户模式下运行并且它需要保持在用户模式(意味着禁用中断不起作用 - CPSID I)。在汇编中有没有办法做到这一点?
请参阅ARM 架构参考手册 Armv7-A 和 ARMv7-R 版(DDI 0406C)的 A3.4 “同步和信号量”部分。
这归结为在循环中使用ldrexd
and指令: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
指令来标记独占存储的内存。它不能被消除。您必须在循环中执行此操作,因为它可能会虚假地失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句