WRS.STO

RISC-V WRS.STO 指令详解

指令手册I-type

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

指令语法

wrs.sto

没有显式操作数;需 Zawrs。等待目标内存写入时,先用 LR 建立包含目标字节的保留集。

32 位 SYSTEM I 型字段:funct12=000000011101、rs1=00000、funct3=000、rd=00000、opcode=1110011。

保留集有效、未观察到待处理中断时可停顿;停顿受实现定义的短超时约束。实现可偶尔因任意原因结束;软件须复查条件。

可在所有特权模式使用;WRS.NTO 的 TW/VTW 有界时间异常规则不施加给 WRS.STO。

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。32 位 SYSTEM I 型字段:funct12=000000011101、rs1=00000、funct3=000、rd=00000、opcode=1110011。

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

指令行为说明

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

快速理解与检索要点

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

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

常见使用场景

有短超时的保留集轮询

在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。

共享状态等待

在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。

使用前检查清单

语法检查
  • 没有显式操作数;需 Zawrs。等待目标内存写入时,先用 LR 建立包含目标字节的保留集。
  • 32 位 SYSTEM I 型字段:funct12=000000011101、rs1=00000、funct3=000、rd=00000、opcode=1110011。
语义检查
  • 保留集有效、未观察到待处理中断时可停顿;停顿受实现定义的短超时约束。实现可偶尔因任意原因结束;软件须复查条件。
  • 可在所有特权模式使用;WRS.NTO 的 TW/VTW 有界时间异常规则不施加给 WRS.STO。

容易混淆 / 常见误区

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

常见问题

WRS.STO 能替代 LR/SC 吗?

不能。它等待 LR 已建立的保留集,不执行 LR 的加载或 SC 的条件存储。

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

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