AMOSWAP.W 的 rd 是新值还是旧值?
rd 接收内存交换前的旧 32 位值,并符号扩展到 XLEN。rs2 的低 32 位才是写回内存的新值。
原子交换32位字:读取旧内存值到 rd,并把 rs2 的低32位写回同一地址
AMOSWAP.W 对 rs1 指向的 32 位字执行原子 read-modify-write:先读取旧内存值并符号扩展写入 rd,再把 rs2 的低 32 位写回同一地址。它不使用 LR/SC reservation;aq/rl 位只影响该原子内存操作相对同一地址域中其他内存操作的排序。
展示 A-extension word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。
AMOSWAP.W 的结果寄存器 rd 得到的是交换前的旧内存值;内存得到的是 rs2 的低 32 位。这是单条 AMO read-modify-write,不是 LR/SC 循环。
结合 «amoswap.w.aq t0, t1, (a0) # atomic swap *a0 with t1, old value in t0» 等实际代码理解该场景。
rd 接收内存交换前的旧 32 位值,并符号扩展到 XLEN。rs2 的低 32 位才是写回内存的新值。
不需要。AMOSWAP.W 是独立的 AMO read-modify-write 指令,不依赖 LR/SC reservation。