首页/指令库/VZEXT.VF2
VZEXT.VF2

RISC-V VZEXT.VF2 指令详解

指令手册OPMVV

VZEXT.VF2 把 EEW=SEW/2 源元素零扩展为 SEW 宽目标元素。

指令语法

vzext.vf2 vd, vs2, vm
操作数说明
vd:EEW=SEW、EMUL=LMUL;vs2:唯一数据源,EEW=SEW/2、EMUL=LMUL/2。源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时编码保留。
32 位 OP-V:opcode=1010111, funct6=010010, funct3=010 (OPMVV)。vm 为 bit25,vs2 为 bits24:20,VXUNARY0 selector=00110 为 bits19:15,vd 为 bits11:7。vm 不是数值汇编操作数:可选 v0.t 表示 vm=0,省略为 vm=1。
逐活动元素把源的 SEW/2 位复制到目标低位,目标其余高位填0;没有 vs1 数据操作数,也不是浮点转换。
宽目标仅可与 EMUL≥1 且位于目标组最高端的窄源重叠;合法不同 EEW 重叠强制 mask/tail-agnostic。动画 LMUL=m1 时源 EMUL<1,因此 vd 与 vs2 不可同名。寄存器组按 EMUL 对齐;普通 masked vd 不可包含 v0,v0 也不可同时提供 EEW=1 掩码和数据源。
要求 V 1.0、向量状态已启用、vill=0、支持所选 SEW/EEW 与 EMUL。活动元素满足 vstart≤i<vl 且掩码开启。prestart 保持;inactive/tail 按 vma/vta 保留旧值或允许全1。vstart≥vl(含vl=0)不更新任何目标元素;正常完成后 vstart=0。动画固定 VLEN=4096、LMUL=m1、vstart=0,步骤不是处理器周期。
V向量运算

指令行为说明

vzext.vf2 是 RISC-V V 扩展向量整数零扩展指令。语法为 `vzext.vf2 vd, vs2, vm`:活动 vs2 元素以 EEW=SEW/2 读取,并写入 SEW 宽 vd 元素。源 EMUL 为 (EEW/SEW)*LMUL;源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时,编码保留。

VZEXT.VF2 指令解析与执行动画

官方 V 扩展的 EEW 到 SEW 整数零/符号扩展。

当前步骤

显示 OP-V 编码

编码条显示 opcode、funct6、VXUNARY0 选择器、寄存器字段和 vm。

实时数据路径encoding
OP-V
32-bit instruction fields
等待读取/执行
等待结果
语法:vd, vs2, vm
EEW
8 (SEW/2)
LMUL
m1 (固定)
VLEN
4096 bits
vstart
0
funct6
010010
vm
0
vs2 [24:20]
01100
vs1 / VXUNARY0
00110
funct3
010
vd [11:7]
01000
opcode
1010111
lane 0
vs2: 0x01
等待
lane 1
vs2: 0x83
掩码关闭
lane 2
vs2: 0x07
等待
lane 3
vs2: 0x7F
等待

依据 The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture。教学环境假定 V 与所需向量状态已启用、合法 vtype、所选 SEW/EEW 由实现支持,并固定 VLEN=4096、LMUL=m1、vstart=0;VLMAX=4096/SEW,因此本动画的 VL 最高 64 不超过 VLMAX。源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时,编码保留;本动画对每个选项均假定所需 SEW/EEW 和分数 LMUL 受支持。步骤用于讲解,不代表硬件周期。

快速理解与检索要点

vzext.vf2 仅处理当前 vl 内的活动元素:把 EEW=SEW/2 的 vs2 元素零扩展为 SEW 宽 vd 元素;可选 v0.t 只允许掩码选中的 body 元素执行。

官方语法是 `vzext.vf2 vd, vs2, vm`。它没有第二个向量算术源;编码中的 VXUNARY0 selector 不属于汇编语法操作数。
源 EEW=SEW/2,源 EMUL=(EEW/SEW)*LMUL;目标 EEW=SEW、目标 EMUL=LMUL。源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时编码保留。
每个活动结果把源位模式放入低 EEW 位并将其余高位填 0。

向量执行上下文

vd:EEW=SEW、EMUL=LMUL;vs2:唯一数据源,EEW=SEW/2、EMUL=LMUL/2。源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时编码保留。

32 位 OP-V:opcode=1010111, funct6=010010, funct3=010 (OPMVV)。vm 为 bit25,vs2 为 bits24:20,VXUNARY0 selector=00110 为 bits19:15,vd 为 bits11:7。vm 不是数值汇编操作数:可选 v0.t 表示 vm=0,省略为 vm=1。

逐活动元素把源的 SEW/2 位复制到目标低位,目标其余高位填0;没有 vs1 数据操作数,也不是浮点转换。

宽目标仅可与 EMUL≥1 且位于目标组最高端的窄源重叠;合法不同 EEW 重叠强制 mask/tail-agnostic。动画 LMUL=m1 时源 EMUL<1,因此 vd 与 vs2 不可同名。寄存器组按 EMUL 对齐;普通 masked vd 不可包含 v0,v0 也不可同时提供 EEW=1 掩码和数据源。

要求 V 1.0、向量状态已启用、vill=0、支持所选 SEW/EEW 与 EMUL。活动元素满足 vstart≤i<vl 且掩码开启。prestart 保持;inactive/tail 按 vma/vta 保留旧值或允许全1。vstart≥vl(含vl=0)不更新任何目标元素;正常完成后 vstart=0。动画固定 VLEN=4096、LMUL=m1、vstart=0,步骤不是处理器周期。

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

常见使用场景

向量整数扩展

示例假定 V 1.0 与向量状态已启用、合法受支持 e16,m1,tu,mu、VLEN=4096、vstart=0,源8位EEW和分数EMUL受支持,源寄存器与 v0 已初始化。vsetivli 请求 AVL=4,因此 vl=4;v0.mask[0..3]=1011。vs2[0]=0x83 → vd[0]=0x0083;lane1不执行且保持旧目标,tail保持旧值。

EEW 到 SEW 扩展

示例假定 V 1.0 与向量状态已启用、合法受支持 e16,m1,tu,mu、VLEN=4096、vstart=0,源8位EEW和分数EMUL受支持,源寄存器与 v0 已初始化。vsetivli 请求 AVL=4,因此 vl=4;v0.mask[0..3]=1011。vs2[0]=0x83 → vd[0]=0x0083;lane1不执行且保持旧目标,tail保持旧值。

V 标准向量扩展

示例假定 V 1.0 与向量状态已启用、合法受支持 e16,m1,tu,mu、VLEN=4096、vstart=0,源8位EEW和分数EMUL受支持,源寄存器与 v0 已初始化。vsetivli 请求 AVL=4,因此 vl=4;v0.mask[0..3]=1011。vs2[0]=0x83 → vd[0]=0x0083;lane1不执行且保持旧目标,tail保持旧值。

使用前检查清单

语法检查
  • vd:EEW=SEW、EMUL=LMUL;vs2:唯一数据源,EEW=SEW/2、EMUL=LMUL/2。源 EEW 不受支持或源 EMUL 低于最小合法 LMUL 时编码保留。
  • 32 位 OP-V:opcode=1010111, funct6=010010, funct3=010 (OPMVV)。vm 为 bit25,vs2 为 bits24:20,VXUNARY0 selector=00110 为 bits19:15,vd 为 bits11:7。vm 不是数值汇编操作数:可选 v0.t 表示 vm=0,省略为 vm=1。
语义检查
  • 逐活动元素把源的 SEW/2 位复制到目标低位,目标其余高位填0;没有 vs1 数据操作数,也不是浮点转换。
  • 宽目标仅可与 EMUL≥1 且位于目标组最高端的窄源重叠;合法不同 EEW 重叠强制 mask/tail-agnostic。动画 LMUL=m1 时源 EMUL<1,因此 vd 与 vs2 不可同名。寄存器组按 EMUL 对齐;普通 masked vd 不可包含 v0,v0 也不可同时提供 EEW=1 掩码和数据源。
  • 要求 V 1.0、向量状态已启用、vill=0、支持所选 SEW/EEW 与 EMUL。活动元素满足 vstart≤i<vl 且掩码开启。prestart 保持;inactive/tail 按 vma/vta 保留旧值或允许全1。vstart≥vl(含vl=0)不更新任何目标元素;正常完成后 vstart=0。动画固定 VLEN=4096、LMUL=m1、vstart=0,步骤不是处理器周期。

容易混淆 / 常见误区

本形式的源元素宽度是 EEW=SEW/2,不是 SEW;目标元素才是 SEW 宽。
零扩展把源元素高位补 0;若需要保留源符号位,应使用同倍率 vsext 形式。
掩码关闭和尾部元素的值由当前 vtype 的 mask/tail policy 决定,助记符本身不表示固定清零。

常见问题

vzext.vf2 的元素个数由什么决定?

body 元素满足 vstart≤i<vl,只有掩码开启的元素进行扩展。SEW 与 LMUL 决定元素宽度和寄存器组大小;vma/vta 决定 inactive/tail 的允许结果。

vzext.vf2 会固定处理整个向量寄存器吗?

不会。V 扩展指令按活动元素执行,寄存器组大小和未活动元素行为由 vtype 与策略位决定。