使用 32 位 ARM 处理器在多线程系统中以用户模式在汇编中编写 64 位原子操作(可能吗?)

用户1998844

我想为多线程操作系统的 atomic64bit 读/写函数编写汇编语言,但是我使用的处理器是 32 位的(AM574x、AM576x、Sitara 处理器、使用 ARMv7-A 架构的 Cortex A15)并且它在用户模式下运行并且它需要保持在用户模式(意味着禁用中断不起作用 - CPSID I)。在汇编中有没有办法做到这一点?

绒毛

请参阅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指令来标记独占存储的内存。它不能被消除。您必须在循环中执行此操作,因为它可能会虚假地失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章