首页/指令库/VFSQRT-V
VFSQRT.V

RISC-V VFSQRT.V 指令详解

指令手册OP-V / OPFVV VFUNARY1

VFSQRT.V 是 RVV 单宽一元浮点平方根指令,语法为 vfsqrt.v vd, vs2[, v0.t];每个活动元素计算 vd[i] = sqrt(vs2[i])。

指令语法

vfsqrt.v vd, vs2[, v0.t]
操作数说明
32 位 OP-V 编码:funct6=010011、funct3=001、opcode=1010111。vs1=00000 是 VFUNARY1 选择子,不读取第二源寄存器。
只读取 vs2[i],向 vd[i] 写入按动态 frm 舍入的 sqrt(vs2[i])。活动元素的浮点异常累积到 fflags;vxrm 不参与。
向量操作数和结果为 SEW 位、EMUL=LMUL。同宽目标/源重叠合法;同名源须给出相同初始位模式。普通 masked 目标不能与 v0 重叠;同一源寄存器不能同时作为 EEW=1 掩码和 SEW 数据读取。
可选的汇编操作数 v0.t 对应 vm=0,省略为 vm=1。活动元素满足 vstart≤i<vl 且掩码允许;prestart 不更新、不产生异常。vstart≥vl 或 vl=0 时包括 tail 在内的所有目标元素均不更新。其余非活动/尾部由 vma/vta 决定,ta/ma 不保证清零。
V 提供 FP32/FP64 并依赖 F/D;SEW=16 的本页操作需要 Zvfh。要求所需扩展、支持的宽度、合法 vtype 和 VS/FS 已启用;H 且虚拟化 V=1 时,vsstatus.VS/FS 也须启用。所有向量浮点指令都要求有效 frm,即使不舍入或 vl=0;无效 frm 的使用保留。
教学动画固定 VLEN=4096、LMUL=m1、vstart=0、有效 frm=RNE、合法 vtype 和 VS/FS 已启用;VF 标量在 FLEN=64 下读取,SEW=32 时假定有效 NaN-box。动画展示教学步骤而非处理器周期,输入和异常范围见动画说明。
V向量运算浮点

指令行为说明

VFSQRT.V 使用 OP-V 的 VFUNARY1 形式,只读取 vs2 和 vm 语法操作数;编码中的 vs1 字段选择平方根操作,不是用户可写的源寄存器。活动元素的有限负数(不含 -0)产生规范 NaN 并设置 NV;结果、舍入、NaN、无穷和其它异常标志遵循官方 RVV 浮点规则;定点 vxrm 不控制这条指令。V 本身定义 SEW=32 和 SEW=64;只有在 SEW=16 时才需要 Zvfh。

VFSQRT.V 指令解析与执行动画

从 OP-V 编码解码到 VFUNARY1 平方根:每个活动元素计算 sqrt(vs2[i])。

输入的指令
vfsqrt.v
执行环境
LMULm1本动画固定的寄存器组倍数
VLEN4096固定向量寄存器长度(bits)
VLMAX128m1 下的最大元素数
vstart0本动画不展示 prestart 元素
frmRNE固定 RNE 的有限教学环境;真实指令使用动态 frm
FP stateFS enabledFS=Off 会触发非法指令;本动画固定展示 FS 已启用的架构路径
vta/vmata, ma尾部/非活动元素策略
opcode1010111OP-V 主操作码
vs100000VFUNARY1 平方根选择字段
编码字段
0x4c801257
31..26
25
24..20
19..15
14..12
11..7
6..0
010011
funct6
0
vm
01000
vs2
00000
vs1
001
funct3
00100
vd
1010111
OP-V
执行数据路径

lane 0: sqrt(1) -> 0x3f800000 (1)

显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。

步骤 1 / 15
读取 OP-V 编码字段

V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。

逐元素结果
长向量在模块内部横向滚动,不造成页面溢出。
i=0活动
sqrt(1)
0x3f800000 (1)
i=1活动
sqrt(4)
0x40000000 (2)
i=2跳过
v0.t=0,不执行
--
i=3活动
sqrt(16)
0x40800000 (4)
i=4活动
sqrt(25)
0x40a00000 (5)
i=5活动
sqrt(36)
0x40c00000 (6)
i=6跳过
v0.t=0,不执行
--
i=7活动
sqrt(64)
0x41000000 (8)
动画按当前 SEW 对源值和结果执行 RNE 示例量化:SEW=32 使用 binary32,SEW=64 使用 binary64。NaN、无穷和异常标志仍以官方 RVV 浮点规则为准,不在此处当作完整浮点异常模拟器展开。

教学环境固定 VLEN=4096、LMUL=m1、vstart=0、合法 vtype、VS/FS 已启用及有效 frm=RNE,支持所选 binary32/64。同名源寄存器必须给出相同初始位模式;同宽目标/源重叠合法。VL=0 时包括 tail 在内的目标元素均不更新;非活动和尾部按 ma/ta 处理,不显示确定值。本动画接受有限输入,按 RNE 演示平方根;负数(不含 -0)返回 canonical NaN 并显示本次执行的 NV,-0 保留符号。NaN/无穷输入及 NX、完整 fflags 累积不在模型展开。

快速理解与检索要点

VFSQRT.V 是一元向量浮点平方根:只从 vs2 读取元素并把 sqrt(vs2[i]) 写入 vd[i];vs1 编码字段是操作选择,不是语法源操作数。

OP-V 编码中 funct6=010011、funct3=001,vs1 字段为 00000 选择 VFUNARY1 平方根。
语义是 vd[i] = sqrt(vs2[i]),只对 vl 范围内的活动元素执行。
vm=0 使用 v0.t 作为执行掩码;vm=1 表示不使用执行掩码。
舍入、负数输入、NaN、无穷和 fflags 遵循官方 RVV 浮点规则,vxrm 不参与。
普通 masked vector 指令的目标向量寄存器组不能与 v0 掩码源重叠;动画在 vm=0 且 vd=v0 时会报错。
汇编中可选的 v0.t 对应 vm=0;省略掩码操作数对应 vm=1。活动元素满足 vstart ≤ i < vl 且掩码允许;VL=0 时不更新任何目标元素(包括 tail)。
所有向量浮点指令均要求有效 frm,即使本指令无需舍入或 VL=0;使用无效 frm 的行为保留。

向量执行上下文

32 位 OP-V 编码:funct6=010011、funct3=001、opcode=1010111。vs1=00000 是 VFUNARY1 选择子,不读取第二源寄存器。

只读取 vs2[i],向 vd[i] 写入按动态 frm 舍入的 sqrt(vs2[i])。活动元素的浮点异常累积到 fflags;vxrm 不参与。

向量操作数和结果为 SEW 位、EMUL=LMUL。同宽目标/源重叠合法;同名源须给出相同初始位模式。普通 masked 目标不能与 v0 重叠;同一源寄存器不能同时作为 EEW=1 掩码和 SEW 数据读取。

可选的汇编操作数 v0.t 对应 vm=0,省略为 vm=1。活动元素满足 vstart≤i<vl 且掩码允许;prestart 不更新、不产生异常。vstart≥vl 或 vl=0 时包括 tail 在内的所有目标元素均不更新。其余非活动/尾部由 vma/vta 决定,ta/ma 不保证清零。

V 提供 FP32/FP64 并依赖 F/D;SEW=16 的本页操作需要 Zvfh。要求所需扩展、支持的宽度、合法 vtype 和 VS/FS 已启用;H 且虚拟化 V=1 时,vsstatus.VS/FS 也须启用。所有向量浮点指令都要求有效 frm,即使不舍入或 vl=0;无效 frm 的使用保留。

教学动画固定 VLEN=4096、LMUL=m1、vstart=0、有效 frm=RNE、合法 vtype 和 VS/FS 已启用;VF 标量在 FLEN=64 下读取,SEW=32 时假定有效 NaN-box。动画展示教学步骤而非处理器周期,输入和异常范围见动画说明。

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

常见使用场景

逐元素平方根

假定 V/VS/FS 已启用、合法 vtype、有效 frm=RNE、e32,m1 可用、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。输入为 binary32,ft0 若使用则在 FLEN=64 下有效 NaN-boxed。省略 v0.t,未掩码:v2=[1,4,9,16] → v1=[1,2,3,4]。尾部按 ta 处理,不假定清零。

向量范数

假定 V/VS/FS 已启用、合法 vtype、有效 frm=RNE、e32,m1 可用、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。输入为 binary32,ft0 若使用则在 FLEN=64 下有效 NaN-boxed。省略 v0.t,未掩码:v2=[1,4,9,16] → v1=[1,2,3,4]。尾部按 ta 处理,不假定清零。

数值计算

假定 V/VS/FS 已启用、合法 vtype、有效 frm=RNE、e32,m1 可用、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。输入为 binary32,ft0 若使用则在 FLEN=64 下有效 NaN-boxed。省略 v0.t,未掩码:v2=[1,4,9,16] → v1=[1,2,3,4]。尾部按 ta 处理,不假定清零。

使用前检查清单

语法检查
  • 32 位 OP-V 编码:funct6=010011、funct3=001、opcode=1010111。vs1=00000 是 VFUNARY1 选择子,不读取第二源寄存器。
  • 只读取 vs2[i],向 vd[i] 写入按动态 frm 舍入的 sqrt(vs2[i])。活动元素的浮点异常累积到 fflags;vxrm 不参与。
语义检查
  • 向量操作数和结果为 SEW 位、EMUL=LMUL。同宽目标/源重叠合法;同名源须给出相同初始位模式。普通 masked 目标不能与 v0 重叠;同一源寄存器不能同时作为 EEW=1 掩码和 SEW 数据读取。
  • 可选的汇编操作数 v0.t 对应 vm=0,省略为 vm=1。活动元素满足 vstart≤i<vl 且掩码允许;prestart 不更新、不产生异常。vstart≥vl 或 vl=0 时包括 tail 在内的所有目标元素均不更新。其余非活动/尾部由 vma/vta 决定,ta/ma 不保证清零。
  • V 提供 FP32/FP64 并依赖 F/D;SEW=16 的本页操作需要 Zvfh。要求所需扩展、支持的宽度、合法 vtype 和 VS/FS 已启用;H 且虚拟化 V=1 时,vsstatus.VS/FS 也须启用。所有向量浮点指令都要求有效 frm,即使不舍入或 vl=0;无效 frm 的使用保留。
  • 教学动画固定 VLEN=4096、LMUL=m1、vstart=0、有效 frm=RNE、合法 vtype 和 VS/FS 已启用;VF 标量在 FLEN=64 下读取,SEW=32 时假定有效 NaN-box。动画展示教学步骤而非处理器周期,输入和异常范围见动画说明。

容易混淆 / 常见误区

语法是 vfsqrt.v vd, vs2[, v0.t];不要添加 vs1 或 rs1 操作数。
编码中的 vs1=00000 是 VFUNARY1 平方根选择字段,不表示读取 v0 作为普通源向量。
负输入、NaN、无穷、舍入和 fflags 按官方浮点规则处理;不要加入 ISA 未规定的实现细节。
当 vm=0 使用 v0.t 作为执行掩码时,普通目标向量寄存器组不能与 v0 掩码寄存器重叠。

常见问题

VFSQRT.V 的 vm 操作数控制什么?

vm=0 时只执行 v0.t 为 1 的活动元素;vm=1 表示不使用执行掩码。本页公式是 vd[i] = sqrt(vs2[i])。

这些向量浮点指令使用 vxrm 吗?

不使用。VFSQRT.V 需要舍入时使用动态 frm;活动元素产生的浮点异常累积到 fflags。vxrm 用于定点舍入。

VFSQRT.V 如何处理 NaN、无穷或负数输入?

负数输入、NaN 操作数和无穷输入都属于浮点规则范围。结果、舍入和 fflags 按官方 RVV 浮点规则处理,本页不把它简化为整数式固定结果。