SFENCE.W.INVAL 会执行失效吗?
它是排序边界,不是按 VA/ASID 选择的失效指令;失效由 SINVAL.VMA 执行,或在实现 H 时由 HINVAL.* 执行。
Svinval 前置排序指令:保证当前 hart 已可见的先前存储先于后续 SINVAL.VMA 失效;实现 H 时也可与 HINVAL.* 组合。
SFENCE.W.INVAL 是 Svinval 拆分失效序列的前置排序边界,没有显式汇编操作数。它保证当前 hart 已可见的先前存储先于该 hart 后续执行的 SINVAL.VMA。实现 H 时,它也与 HINVAL.VVMA 或 HINVAL.GVMA 组合使用。它不执行 VA/ASID 范围失效,也不是普通数据 cache flush;典型序列是 SFENCE.W.INVAL -> 一条或多条 SINVAL.VMA -> SFENCE.INVAL.IR。
展示固定 SYSTEM 编码和 Svinval 序列中的排序边界;该指令没有显式汇编操作数。
该动画只展示特权架构定义的本 hart 失效/排序关系;不模拟 TLB 结构、cache 刷新、页表遍历耗时、IPI 或 OS shootdown 协议。
SFENCE.W.INVAL 是 Svinval 序列的“前括号”:它把已经对当前 hart 可见的页表相关存储排在后续失效操作之前。
假定 Svinval 可用、S-mode、同一 hart 按序执行 SFENCE.W.INVAL → SINVAL.VMA x0,x0 → SFENCE.INVAL.IR。前置指令排序已对该 hart 可见的先前存储,后置指令排序后续隐式页表引用;两条边界指令均不选择失效范围、也不写回通用寄存器。
假定 Svinval 可用、S-mode、同一 hart 按序执行 SFENCE.W.INVAL → SINVAL.VMA x0,x0 → SFENCE.INVAL.IR。前置指令排序已对该 hart 可见的先前存储,后置指令排序后续隐式页表引用;两条边界指令均不选择失效范围、也不写回通用寄存器。
假定 Svinval 可用、S-mode、同一 hart 按序执行 SFENCE.W.INVAL → SINVAL.VMA x0,x0 → SFENCE.INVAL.IR。前置指令排序已对该 hart 可见的先前存储,后置指令排序后续隐式页表引用;两条边界指令均不选择失效范围、也不写回通用寄存器。
假定 Svinval 可用、S-mode、同一 hart 按序执行 SFENCE.W.INVAL → SINVAL.VMA x0,x0 → SFENCE.INVAL.IR。前置指令排序已对该 hart 可见的先前存储,后置指令排序后续隐式页表引用;两条边界指令均不选择失效范围、也不写回通用寄存器。
它是排序边界,不是按 VA/ASID 选择的失效指令;失效由 SINVAL.VMA 执行,或在实现 H 时由 HINVAL.* 执行。
它描述的是序列排序边界,不是某个地址或 ASID 范围;编码中的相关寄存器字段固定为 x0。