WRS.NTO 能替代 LR/SC 吗?
不能。它等待 LR 已建立的保留集,不执行 LR 的加载或 SC 的条件存储。
等待保留集存储事件(无超时)
没有显式操作数;需 Zawrs。等待目标内存写入时,先用 LR 建立包含目标字节的保留集。
32 位 SYSTEM I 型字段:funct12=000000001101、rs1=00000、funct3=000、rd=00000、opcode=1110011。
保留集有效、未观察到待处理中断时可停顿;没有内建的短超时。实现可偶尔因任意原因结束;软件须复查条件。
非 M 模式、TW=1 且未在实现定义的有界时间内完成时产生非法指令异常;VS/VU、TW=0、VTW=1 且同样未完成时产生虚拟指令异常。
WRS.NTO 使用 opcode 1110011(0x73)、funct3 000、funct12 000000001101。32 位 SYSTEM I 型字段:funct12=000000001101、rs1=00000、funct3=000、rd=00000、opcode=1110011。
当保留集有效且未观察到待处理中断(即使该中断被禁用)时,hart 可临时在低功耗状态停顿。它与 LR 建立的保留集配合用于轮询;实现也可因任何原因偶尔结束停顿。
WRS.NTO 是 Zawrs 等待保留集指令:在保留集有效且未观察到待处理中断时,hart 可以临时停顿;LR 用来建立该保留集。
在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。
在轮询循环内,LR 为目标字节建立保留集,再按共享状态决定是否执行本指令。等待返回后重新读取并判断条件;返回不证明已有目标写入。
不能。它等待 LR 已建立的保留集,不执行 LR 的加载或 SC 的条件存储。
不一定。官方允许实现因任何原因偶尔结束停顿,软件必须在循环中重新检查条件。