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-extension word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
AMOADD.W 按完整 32-bit word 加法计算,低 32 位结果写回内存;这里不展示逐 bit 等式,避免隐藏进位链。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
AMOADD.W 常用于原子计数类场景。它把旧内存值返回到 rd,同时把旧值加 rs2 后的 32 位结果写回内存;不要把 rd 误认为加法后的新值。
结合 «amoadd.w a0, a1, (a2) # a0 = *a2; *a2 += a1» 等实际代码理解该场景。
结合 «amoadd.w a0, a1, (a2) # a0 = *a2; *a2 += a1» 等实际代码理解该场景。
结合 «amoadd.w a0, a1, (a2) # a0 = *a2; *a2 += a1» 等实际代码理解该场景。
不。AMOADD.W 的 rd 保存加法前的旧内存值;加法后的低 32 位结果写回内存。
不会。AMOADD.W 的 word 加法结果按 32 位回绕,写回低 32 位。