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 / Zaamo word 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。
A / Zaamo 扩展 word 原子指令使用 32-bit 编码;动画先展示字段切分。
假设地址所在区域支持该 AMO 且访问成功;动画展示运算、旧值返回、内存写回和 aq/rl 在被访问地址域中的排序。步骤是教学拆解,不模拟访问异常、CPU 缓存一致性、流水线或时序。
AMOSWAP.W 的结果寄存器 rd 得到的是交换前的旧内存值;内存得到的是 rs2 的低 32 位。这是单条 AMO read-modify-write,不是 LR/SC 循环。
32 位访问成功的示例:a2=0x1000,旧内存值=5,a1=3;amoswap.w a0, a1, (a2) 返回 a0=5,内存更新为 3。地址自然对齐,内存区域支持该 AMO。
rd 接收内存交换前的旧 32 位值,并符号扩展到 XLEN。rs2 的低 32 位才是写回内存的新值。
不需要。AMOSWAP.W 是独立的 AMO read-modify-write 指令,不依赖 LR/SC reservation。