WRS.STO

RISC-V WRS.STO 指令详解

指令手册I-type

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

指令语法

wrs.sto
操作数说明
WRS.STO 没有显式汇编操作数;它使用固定的 SYSTEM I-type 编码。
funct12 固定为 000000011101,rs1=x0、funct3=000、rd=x0,opcode=1110011。
reservation set 的有效性、pending interrupt 和实现定义的停顿时间是隐式架构或实现状态,不是汇编寄存器或立即数操作数。
Zawrs缓存与同步

指令编码

31..20
funct12
19..15
rs1=x0
14..12
funct3
11..7
rd=x0
6..0
opcode

WRS-STO 使用 opcode 1110011(0x73)、funct3 000、funct12 000000011101、rs2 固定 x0。该固定 SYSTEM 编码没有显式汇编寄存器或立即数操作数;funct12、rs1、funct3、rd 和 opcode 必须与手册列出的常量一致。

格式: SYSTEM I 型字段
opcode: 1110011 (0x73)
funct3: 000 (0x0)
funct12: 000000011101 (0x01d)
rs2: 固定 x0

指令行为说明

与 WRS.NTO 一样,WRS.STO 可在保留集有效且未观察到待处理中断时让 hart 临时停顿;它还受实现定义的短超时约束。超时、保留集相关写入、中断或实现偶尔提前结束都可使执行继续。

快速理解与检索要点

WRS.STO 是 Zawrs 等待保留集指令:在保留集有效、未观察到待处理中断且短超时未到期时,hart 可以临时停顿;LR 用来建立该保留集。

若要等待目标字节被写入,应先用 LR 建立包含它们的保留集;该指令本身不指定地址操作数。
WRS.STO 的停顿受实现定义的短超时约束。
这些指令在所有特权模式可用,但 WRS.NTO 受 mstatus.TW 规则影响。

常见使用场景

原子与同步

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

特定用途

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

使用前检查清单

语法检查
  • 确认立即数字段在有效范围内。
  • 确认源寄存器 rs1 指向正确的操作数。
语义检查
  • 确认立即数符号扩展是否符合预期。
  • 确认结果寄存器 rd 的用途是否明确。

容易混淆 / 常见误区

若要等待某个内存位置被写入,应先用 LR 建立包含其字节的保留集。
短超时时长由实现定义,不能写成固定周期数。
等待返回不代表条件已满足;软件必须重新读取并判断共享状态。

常见问题

WRS.STO 能替代 LR/SC 吗?

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

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

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