首页/指令库/FCVT-S-BF16
FCVT.S.BF16

RISC-V FCVT.S.BF16 指令详解

指令手册R-type

将 BF16 精确加宽为 FP32。

指令语法

fcvt.s.bf16 rd, rs1
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
Zfbfmin浮点转换

指令行为说明

FCVT.S.BF16(Zfbfmin,依赖 F)将 f[rs1] 中 NaN-boxed 的 BF16 值精确加宽转换为单精度 FP32 并写入 f[rd]。对普通数或无穷,BF16 编码左移 16 位形成 FP32 高 16 位,低 16 位 fraction 补零;结果按 FP32 在更宽 FLEN 中 NaN-box。该转换不需要舍入,但遇到 signaling NaN 等输入时可能设置 Invalid。

快速理解与检索要点

FCVT.S.BF16 属于 RISC-V BF16 扩展;BF16 是 1 位符号、8 位指数、7 位 fraction 的 16 位浮点格式。

加宽到 FP32 是精确转换,普通/无穷输入通过左移 BF16 编码并补零形成 FP32。
BF16 标量结果/输入遵守 RISC-V NaN-boxing 规则。

常见使用场景

BF16推理时类型提升

结合 «fcvt.s.bf16 f0, f1 # f0 = fp32(f1[bf16]), exact» 等实际代码理解该场景。

BF16↔FP32互操作

结合 «fcvt.s.bf16 f0, f1 # f0 = fp32(f1[bf16]), exact» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

转换是精确加宽,不使用舍入模式;汇编中通常不写 rm。
源 BF16 标量必须按较窄浮点值正确 NaN-box;否则作为规范 NaN 输入处理。
结果是 FP32,并在 FLEN>32 时 NaN-box 到浮点寄存器。
加宽 BF16 到 FP32 是精确转换,不使用舍入模式。

常见问题

FCVT.S.BF16 是否提供 BF16 加减乘除?

不。Zfbfmin/Zvfbfmin 主要提供 BF16 与 FP32 转换;Zvfbfwma 提供拓宽乘加。

FCVT.S.BF16 的 SEW 限制是什么?

标量形式不使用 V 的 SEW;它在浮点寄存器中处理 BF16/FP32 标量值。