LR.W 是普通 lw 加一个标记吗?
不是。LR.W 与 LW 都读取 32 位字并符号扩展写入 rd,但 LR.W 还建立 reservation set,供后续 SC.W 判断条件存储。
原子加载32位字并建立预留,供后续 SC.W 判断条件存储是否可成功
LR.W 从 rs1 指向的地址原子读取 32 位字,将读取值符号扩展到 XLEN 后写入 rd,并建立覆盖该访问字节的 reservation set。它本身不写内存;后续 SC.W 使用该预留判断条件存储是否成功。aq/rl 位只对该指令访问的地址域提供内存排序约束。
展示 A-extension word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
LR.W 是 LR/SC 序列的第一步:读取内存中的 32 位旧值并建立预留。页面重点不是普通 load,而是“读取旧值 + 建立 reservation + 后续 SC.W 消费该 reservation”。
结合 «lr.w.aq t0, (a0) # load word from *a0 with acquire ordering, set reservation» 等实际代码理解该场景。
不是。LR.W 与 LW 都读取 32 位字并符号扩展写入 rd,但 LR.W 还建立 reservation set,供后续 SC.W 判断条件存储。
不一定。预留可能失效,且 SC.W 可能失败;软件应检查 SC.W 写入 rd 的结果,失败时重试 LR/SC 序列。