LR.D 会写内存吗?
不会。LR.D 读取 64 位旧值到 rd,并建立 reservation set;内存写入由后续 SC.D 尝试完成。
在 RV64 上原子读取 64 位 doubleword 到 rd,并建立供后续 SC.D 使用的 reservation set
LR.D 从 rs1 指向的自然对齐地址原子读取 64 位 doubleword,将旧值写入 rd,并建立覆盖该访问字节的 reservation set。它是 RV64 的 A/Zalrsc 指令,本身不写内存;后续 SC.D 使用该预留判断条件存储是否成功。aq/rl 位只影响内存排序,不改变读取值。
展示 A-extension doubleword 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 doubleword 原子指令使用 32-bit 编码;动画先展示字段切分。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
LR.D 是 RV64 LR/SC 序列的 64 位第一步:读取旧 doubleword 到 rd,并建立 reservation set。它不写内存,也不等同于普通 ld,因为后续 SC.D 会消费这个预留。
结合 «lr.d.aq t0, (a0) # load 64-bit doubleword from *a0 and create a reservation» 等实际代码理解该场景。
结合 «lr.d.aq t0, (a0) # load 64-bit doubleword from *a0 and create a reservation» 等实际代码理解该场景。
不会。LR.D 读取 64 位旧值到 rd,并建立 reservation set;内存写入由后续 SC.D 尝试完成。
LR.D 仅用于 RV64,访问 64 位 doubleword,地址需 8 字节对齐;LR.W 访问 32 位 word。