首页/指令库/HINVAL-VVMA
HINVAL.VVMA

RISC-V HINVAL.VVMA 指令详解

指令手册R-type

Svinval/H 的 VS-stage 失效指令:按 guest virtual address 与 ASID 失效,排序由分离围栏提供。

指令语法

hinval.vvma rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
HSvinval内存管理

指令行为说明

HINVAL.VVMA 是 Hypervisor + Svinval 扩展的 VS-stage 地址转换缓存失效指令。它失效与 rs1 指定 guest virtual address 和 rs2 指定 ASID 匹配的 VS-stage 转换缓存条目;rs1=x0 表示所有 guest virtual addresses,rs2=x0 表示所有 ASID。当前 VMID 来自虚拟化上下文而不是 rs2。它本身只执行失效,排序由 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 提供。

快速理解与检索要点

HINVAL.VVMA 是 Svinval/H 的 VS-stage 地址转换失效,只执行失效;排序由 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 分离围栏提供。

该指令影响地址转换或失效排序,不是普通数据 cache 刷新指令。
H 扩展访存/栅栏指令涉及 VS-stage 与 G-stage 两阶段地址转换。

常见使用场景

内存管理

结合 «hinval.vvma a1, a2» 等实际代码理解该场景。

虚拟化

结合 «hinval.vvma a1, a2» 等实际代码理解该场景。

TLB shootdown

结合 «hinval.vvma a1, a2» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

需要 H 加 Svinval,权限/异常行为与 HFENCE.VVMA 对应。
rs1 指定 guest virtual address;rs2 指定 ASID,不是 VMID。
VS-mode 或 VU-mode 执行会触发 virtual-instruction 异常。
与 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 配合使用以获得分离围栏排序。

常见问题

它是用户态普通指令吗?

不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。

它是否替代普通内存 fence?

不能简单替代。地址转换、指令获取和数据内存排序分别有不同的 fence/失效指令。