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

RISC-V VFREC7.V 指令详解

指令手册OPFVV

计算vs2每个浮点元素的倒数近似值(7位精度),写入vd。

指令语法

vfrec7.v vd, vs2, vm
操作数说明
vd 与 vs2 是 SEW 宽向量寄存器组;同宽源/目标可重叠。普通掩码目标不能与 v0 重叠。
这是单源查表倒数估算;编码 vs1=00101 是固定选择子,不是第二个向量源。普通结果不依赖 frm,极小输入溢出时依赖 frm。
vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。
活动元素满足 vstart≤i<vl 且掩码开启;vstart≥vl 或 vl=0 时所有目标元素均不更新。其他非活动/尾部目标按 vma/vta,不保证清零。
V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。
V向量运算浮点

指令行为说明

VFREC7.V 对每个活动元素产生规范定义的 7 位倒数估算。普通结果由查表与指数调整确定;极小非零输入溢出时,结果才依赖动态 frm。±0 返回同号无穷并置 DZ;±∞ 返回同号零;qNaN 返回 canonical NaN,sNaN 还置 NV。V 支持 FP32/FP64;SEW=16 算术需要 Zvfh。

VFREC7.V 倒数估算动画

定性编码演示:固定 SEW=32、LMUL=m1、VLEN=4096、vl=1、vstart=0、frm=RNE、合法 vtype 与 VS/FS 已启用。输入按有限非零 FP32 表示;不计算查表数值或异常标志。

步骤 1/5

VFUNARY1 OP-V 编码:vs1=00101,funct3=001,vm=1。

v0-v31; vm=1

v0-v31; vm=1

finite nonzero demo value

funct6
010011
vm
1
vs2
01000
vs1
00101
funct3
001
vd
00100
opcode
1010111
完整特殊值表和 7 位查表结果请以官方手册为准;本动画只验证字段、约束和状态边界。

快速理解与检索要点

每个活动元素查表得到约 1/x 的 7 位估算;结果规则由规范确定。

只对 vl 范围内的活动元素执行;非活动元素和尾部元素受当前 vma/vta 策略影响。
vm=0 使用 v0 作为执行掩码,vm=1 表示不使用掩码。
特殊值结果和异常标志应按官方估算指令表处理。
V 包含 FP32/FP64 支持及 F/D 依赖;SEW=16 算术需要 Zvfh。
funct6=010011、funct3=001、vs1=00101;vm 是掩码控制位。

向量执行上下文

vd 与 vs2 是 SEW 宽向量寄存器组;同宽源/目标可重叠。普通掩码目标不能与 v0 重叠。

这是单源查表倒数估算;编码 vs1=00101 是固定选择子,不是第二个向量源。普通结果不依赖 frm,极小输入溢出时依赖 frm。

vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。

活动元素满足 vstart≤i<vl 且掩码开启;vstart≥vl 或 vl=0 时所有目标元素均不更新。其他非活动/尾部目标按 vma/vta,不保证清零。

V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。

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

常见使用场景

除法优化

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

Newton-Raphson

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

使用前检查清单

语法检查
  • vd 与 vs2 是 SEW 宽向量寄存器组;同宽源/目标可重叠。普通掩码目标不能与 v0 重叠。
  • 这是单源查表倒数估算;编码 vs1=00101 是固定选择子,不是第二个向量源。普通结果不依赖 frm,极小输入溢出时依赖 frm。
语义检查
  • vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。
  • 活动元素满足 vstart≤i<vl 且掩码开启;vstart≥vl 或 vl=0 时所有目标元素均不更新。其他非活动/尾部目标按 vma/vta,不保证清零。
  • V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。

容易混淆 / 常见误区

这是表定义的估算,不是精确的 1/x;可用后续 Newton-Raphson 迭代提高精度。
普通估算不依赖 frm,但溢出结果依赖 frm;所有执行仍要求有效 frm。
掩码关闭的元素不设置异常标志;普通掩码目标不能与 v0 重叠。

常见问题

估算结果是 implementation-defined 吗?

不是按实现随意决定。官方 V 扩展定义了 7 位估算和特殊输入处理规则。