WRS.STO 能替代 LR/SC 吗?
不能。它等待 LR 已建立的保留集,不执行 LR 的加载或 SC 的条件存储。
等待保留集存储事件(短超时)
没有显式操作数;需 Zawrs。等待目标内存写入时,先用 LR 建立包含目标字节的保留集。
32 位 SYSTEM I 型字段:funct12=000000011101、rs1=00000、funct3=000、rd=00000、opcode=1110011。
保留集有效、未观察到待处理中断时可停顿;停顿受实现定义的短超时约束。实现可偶尔因任意原因结束;软件须复查条件。
可在所有特权模式使用;WRS.NTO 的 TW/VTW 有界时间异常规则不施加给 WRS.STO。
WRS.STO 使用 opcode 1110011(0x73)、funct3 000、funct12 000000011101。32 位 SYSTEM I 型字段:funct12=000000011101、rs1=00000、funct3=000、rd=00000、opcode=1110011。
与 WRS.NTO 一样,WRS.STO 可在保留集有效且未观察到待处理中断时让 hart 临时停顿;它还受实现定义的短超时约束。超时、保留集相关写入、中断或实现偶尔提前结束都可使执行继续。
WRS.STO 是 Zawrs 等待保留集指令:在保留集有效、未观察到待处理中断且短超时未到期时,hart 可以临时停顿;LR 用来建立该保留集。
在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。
在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。
不能。它等待 LR 已建立的保留集,不执行 LR 的加载或 SC 的条件存储。
不一定。官方允许实现因任何原因偶尔结束停顿,软件必须在循环中重新检查条件。