SC.D 成功时 rd 保存写入的数据吗?
不。rd 是状态结果寄存器:成功写 0,失败写非零;被写入内存的数据来自 rs2。
RV64 条件存储 64 位值:成功写内存、rd=0;失败不执行数据存储、rd 为非零。
扩展条件:RV64,需要 Zalrsc 或包含 Zalrsc 的 A 扩展。
SC.D 以 rs1 为地址、rs2 的低 64 位为候选数据;成功时写入数据并向 rd 写 0,失败时不执行数据存储并向 rd 写非零码。成功要求最近 LR 的预留仍有效且覆盖写入字节,但预留有效不保证成功;其他 hart 的相关写入、设备对 LR 访问字节的写入或中间 SC 会强制失败。成功和失败均使本 hart 的预留失效。SC 在退出前必须通过内存权限检查;失败时隐式地址转换/保护访问的副作用未指定。SC.D 仅在 RV64 可用。
展示 A / Zalrsc doubleword 原子指令的字段解析、aq/rl 排序位、预留与权限检查和 条件存储 状态更新。
该教学开关只选择 SC 的成功或失败结果;成功仍取决于最近 LR 的预留及其他架构条件,失败码只保证为非零。
A / Zalrsc 扩展 doubleword 原子指令使用 32-bit 编码;动画先展示字段切分。
本例假定取指成功,目标自然对齐且区域支持 LR/SC,并通过内存权限检查。开关选择一个允许的 SC 成功/失败结果,不完整模拟 LR、预留集和其他 hart/设备干扰。失败不执行数据存储,但隐式地址转换/保护访问的副作用未指定。aq/rl 只涉及被访问的 memory/I/O 域;步骤是教学拆解。
SC.D 是 RV64 LR/SC 序列的条件写入点。成功时写入 rs2 的 64 位值并让 rd=0;失败时不执行数据存储,rd 为非零。
SC.D 用于 LR/SC 条件更新;软件检查 rd 的 0/非零状态,预留有效不保证成功。
不。rd 是状态结果寄存器:成功写 0,失败写非零;被写入内存的数据来自 rs2。
失败的 SC 不执行数据存储,并写入非零状态(rd=x0 时丢弃)及使预留失效;隐式地址转换或保护访问的副作用未指定。