首页/指令库/向量-标量按位与非
VANDN.VX

RISC-V VANDN.VX 指令详解

指令手册V-type

向量-标量按位 AND-NOT:vd[i] = vs2[i] & ~x[rs1]

指令语法

vandn.vx vd, vs2, rs1[, v0.t]

vd、vs2 选择 v0–v31;rs1 选择 x0–x31,x0 恒为零。末尾可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。

32 位 OP-V:funct6=000001,vm[25],vs2[24:20],rs1[19:15],funct3=100,vd[11:7],opcode=1010111。

Zvbb 或 Zvkb:Zve32x 支持 SEW=8/16/32,Zve64x 还支持 64。x[rs1] 按 SEW 符号扩展或截断,结果为 vs2[i]&~x[rs1]。

启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。

处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

ZvbbZvkb向量位操作

指令行为说明

vandn.vx 将 x[rs1] 按 SEW 符号扩展/截断后取反,再与 vs2[i] 相与:vd[i] = vs2[i] & ~x[rs1]。

VANDN.VX 指令解析与执行动画

此有界模型只展示 lane 0 的 ISA 可见状态;不表示流水线、密码协议或未指定的非活跃/尾部值。

执行环境:启用本页扩展与向量状态,合法支持的 vtype,LMUL=1、VLEN≥64×SEW,仅展开 lane 0;vl=32/64 不复制 lane 0 到其他元素。SEW=64 要求 Zve64x。非零 vstart 假设实现支持,否则可产生非法指令异常。

有界执行环境
32 位 OP-V 编码字段
31..26
funct6
000001
25
vm
1
24..20
vs2
01000
19..15
rs1
01011
14..12
funct3
100
11..7
vd
00100
6..0
OP-V
1010111
执行数据路径

funct6=000001, funct3=100, Zvbb/Zvkb

v4[0] <- pending

快速理解与检索要点

vandn.vx 由 Zvbb/Zvkb 提供,执行向量-标量按位与非。元素宽度由当前支持的 vtype.SEW 决定。

vandn.vx 将 x[rs1] 按 SEW 符号扩展/截断后取反,再与 vs2[i] 相与:vd[i] = vs2[i] & ~x[rs1]。
仅处理 vstart≤i<vl 且掩码启用的活动元素。前置元素保持;掩码关闭元素按 vma、尾部按 vta 处理,agnostic 可保持或写全 1。vstart≥vl(包括 vl=0)时全部目标元素保持。成功结束将 vstart 置零;某些实现可拒绝非零 vstart。
同宽源/目的寄存器组可重叠并读取原源值;寄存器组须按 LMUL 对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。

向量执行上下文

vd、vs2 选择 v0–v31;rs1 选择 x0–x31,x0 恒为零。末尾可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。

32 位 OP-V:funct6=000001,vm[25],vs2[24:20],rs1[19:15],funct3=100,vd[11:7],opcode=1010111。

Zvbb 或 Zvkb:Zve32x 支持 SEW=8/16/32,Zve64x 还支持 64。x[rs1] 按 SEW 符号扩展或截断,结果为 vs2[i]&~x[rs1]。

启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。

处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 33

常见使用场景

对活动向量元素执行向量-标量按位与非。

启用本页扩展与向量状态,合法 vtype、LMUL=1、VLEN≥128、vl=1、vstart=0、无掩码;SEW=8, x11=0xCC, v8[0]=0xF0: 0xF0 & ~0xCC = 0x30,写入 v4[0]。

使用前检查清单

语法检查
  • vd、vs2 选择 v0–v31;rs1 选择 x0–x31,x0 恒为零。末尾可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。
  • 32 位 OP-V:funct6=000001,vm[25],vs2[24:20],rs1[19:15],funct3=100,vd[11:7],opcode=1010111。
语义检查
  • Zvbb 或 Zvkb:Zve32x 支持 SEW=8/16/32,Zve64x 还支持 64。x[rs1] 按 SEW 符号扩展或截断,结果为 vs2[i]&~x[rs1]。
  • 启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。
  • 处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

容易混淆 / 常见误区

rs1 按 SEW 截断/扩展后广播并被取反;vs2 保持不取反。
结果为 vd[i] = vs2[i] & ~x[rs1]。

常见问题

VANDN.VX 如何使用掩码?

汇编末尾可选写 v0.t,对应 vm=0;省略时 vm=1。vm 是编码字段,不是需要写出的汇编寄存器。掩码与寄存器组重叠限制仍适用。

VANDN.VX 支持哪些元素宽度?

支持 Zve32x 的实现提供 8、16、32 位;支持 Zve64x 时还提供 64 位。必须使用实现支持的 vtype 设置。