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