SC.W 成功时 rd 为什么是 0?
SC.W 的 rd 是状态结果寄存器。官方语义定义成功写 0,失败写非零值,软件据此决定是否退出或重试 LR/SC 循环。
在预留有效时原子条件存储32位字;成功写内存并令 rd=0,失败不写内存并令 rd 为非零
SC.W 将 rs2 的低 32 位作为候选写入值,只有当最近的 LR.W 建立的预留仍有效且预留集包含目标字节时才写入 rs1 指向的内存。成功时 rd 写入 0;失败时不写内存,rd 写入非零失败码。无论成功或失败,SC.W 都会使当前 hart 的预留失效。
展示 A-extension word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
SC.W 是 LR/SC 序列的判定点:它不是无条件 store。成功时写内存并把 0 写入 rd;失败时内存保持不变,并把非零失败码写入 rd。
结合 «sc.w.rl t0, a1, (a0) # try store a1 to *a0 with release ordering, t0=0 on success» 等实际代码理解该场景。
SC.W 的 rd 是状态结果寄存器。官方语义定义成功写 0,失败写非零值,软件据此决定是否退出或重试 LR/SC 循环。
不会。SC.W 失败时不执行内存写入,只把非零失败码写入 rd,并使当前预留失效。