WRS.NTO

RISC-V WRS.NTO 指令详解

指令手册I-type

等待保留集存储事件(无超时)

指令语法

wrs.nto
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数所在的寄存器。
立即数 imm:12 位有符号立即数,符号扩展后与 rs1 进行运算。
Zawrs缓存与同步

指令行为说明

使hart在低功耗状态下暂停执行,直到保留集发生存储操作或观察到待处理中断。需配合LR指令使用。属于Zawrs扩展,用于节能轮询。

快速理解与检索要点

WRS.NTO 是 Zawrs 等待保留集指令,配合先前的 LR 保留集使用,让 hart 可在等待相关内存位置被写入时临时停顿。

必须先用 LR 建立包含目标字节的保留集;该指令本身不指定地址操作数。
WRS.NTO 没有短超时,但可因写入保留集、观察到中断或实现选择而结束。
这些指令在所有特权模式可用,但 WRS.NTO 受 mstatus.TW 规则影响。

常见使用场景

原子与同步

结合 «lr.w x10, (x11) ; wrs.nto» 等实际代码理解该场景。

并发与多核

结合 «lr.w x10, (x11) ; wrs.nto» 等实际代码理解该场景。

调试与监控

结合 «lr.w x10, (x11) ; wrs.nto» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 I-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

必须配合先前 LR 建立的保留集使用。
mstatus.TW 可使较低特权模式中的长时间等待触发非法指令异常。
没有短超时保证,但实现仍可因写入保留集、中断或自身选择结束等待;软件必须循环复查条件。

常见问题

WRS.NTO 能替代 LR/SC 吗?

不能。它只等待已有保留集相关事件;同步算法仍需要 LR/SC、AMO 或 CAS 等原子操作完成状态更新。

WRS.NTO 一定会睡到内存变化吗?

不一定。官方允许实现因任何原因偶尔结束停顿,软件必须在循环中重新检查条件。