在以下指令序列中:
mov r4, r0
add r0, r4, #40
.tryagain:
ldrex r1, [r0]
add r1, r1, #1
strex r2, r1, [r0]
cmp r2, #0
bne .tryagain
ldr r1, [r4, #40]
我们首先将[r4 + 40]处的值原子递增1. ldrex将旧值保留在r1中。 然后我们使用正常负载(ldr)立即在同一地址加载新的递增值。 忽略一个明显的事实,即我们可以在bne之后将r1加1,而不是再次加载它,是否有可能处理器重新排序ldr才能在ldrex之前发生?
答案 0 :(得分:0)
这是来自ARM的Barrier Litmus Tests and Cookbook
7.1 LOAD EXCLUSIVE / STORE EXCLUSIVE AND BARRIERS,简介
... 说明书 没有任何隐含的屏障功能被定义为他们的一部分 运营 ......