SC.D 成功时 rd 保存写入的数据吗?
不。rd 是状态结果寄存器:成功写 0,失败写非零;被写入内存的数据来自 rs2。
在 RV64 上按预留状态条件存储 64 位 doubleword;成功 rd=0,失败 rd 为非零且不写内存
SC.D 将 rs2 的 64 位 doubleword 作为候选写入值。只有当当前 hart 的有效预留包含 rs1 指向的目标字节时,SC.D 才把该值写入内存并令 rd=0;失败时不写内存,并向 rd 写入非零失败码。无论成功或失败,SC.D 都会使当前预留失效。
展示 A-extension doubleword 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 doubleword 原子指令使用 32-bit 编码;动画先展示字段切分。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
SC.D 是 RV64 LR/SC 序列的条件写入点。成功时写入 rs2 的 64 位值并让 rd=0;失败时内存保持旧值,rd 为非零。
结合 «sc.d.rl t0, a1, (a0) # store 64-bit a1 to *a0 if the reservation is valid; t0=0 on success» 等实际代码理解该场景。
结合 «sc.d.rl t0, a1, (a0) # store 64-bit a1 to *a0 if the reservation is valid; t0=0 on success» 等实际代码理解该场景。
不。rd 是状态结果寄存器:成功写 0,失败写非零;被写入内存的数据来自 rs2。
不会。SC.D 失败时不执行内存写入,只写 rd 的非零失败码,并使预留失效。