AMOADD.W 的 rd 保存加法后的值吗?
不。AMOADD.W 的 rd 保存加法前的旧内存值;加法后的低 32 位结果写回内存。
原子加法32位字:读取旧内存值到 rd,并把旧值加 rs2 低32位后的结果写回同一地址
AMOADD.W 对 rs1 指向的 32 位字执行原子 read-modify-write:读取旧内存值并符号扩展写入 rd,将该旧 word 与 rs2 的低 32 位相加,低 32 位结果写回同一地址。加法按 32 位 word 回绕;aq/rl 位只影响内存排序,不改变加法结果。
展示 A / Zaamo word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A / Zaamo 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
AMOADD.W 按完整 32-bit word 加法计算,低 32 位结果写回内存;这里不展示逐 bit 等式,避免隐藏进位链。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
AMOADD.W 常用于原子计数类场景。它把旧内存值返回到 rd,同时把旧值加 rs2 后的 32 位结果写回内存;不要把 rd 误认为加法后的新值。
32 位访问成功的示例:a2=0x1000,旧内存值=5,a1=3;amoadd.w a0, a1, (a2) 返回 a0=5,内存更新为 8。地址自然对齐,内存区域支持该 AMO。
32 位访问成功的示例:a2=0x1000,旧内存值=5,a1=3;amoadd.w a0, a1, (a2) 返回 a0=5,内存更新为 8。地址自然对齐,内存区域支持该 AMO。
不。AMOADD.W 的 rd 保存加法前的旧内存值;加法后的低 32 位结果写回内存。
不会。AMOADD.W 的 word 加法结果按 32 位回绕,写回低 32 位。