首页/指令库/BF16 转单精度
FCVT.S.BF16

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

指令手册R-type

将 BF16 精确加宽为 FP32。

指令语法

fcvt.s.bf16 rd, rs1[, rm]

语法 fcvt.s.bf16 rd, rs1[, rm];rd、rs1 均选择浮点 f0–f31,f0 可读写;rs2 是固定格式选择子,不是第二源。

32 位 OP-FP:funct5=01000,fmt=00,rs2=00110,funct3=rm,opcode=1010011;没有立即数。

RV32/RV64 Zfbfmin 1.0,依赖 F;启用所需扩展与浮点状态。精确加宽,数值不受 rm 影响;软件应编码 RNE(000);仅可能新增 NV。rm 可省略,汇编默认 dyn;静态 rm=101/110 与动态 frm=101–111 按保留编码处理。

支持 subnormal;源格式窄于 FLEN 时检查 NaN-boxing,错误装箱按 canonical quiet NaN;较窄结果高位填 1。sNaN 新增 NV、NaN 结果规范化;fflags 累积而非清零,设置标志本身不产生浮点陷阱。

Zfbfmin浮点转换

指令编码

31..25
funct7
24..20
rs2
19..15
rs1
14..12
funct3
11..7
rd
6..0
opcode

FCVT.S.BF16 使用 opcode 1010011(0x53)、funct7 0100000、rs2 固定 6(BF16)。32 位 OP-FP:funct5=01000,fmt=00,rs2=00110,funct3=rm,opcode=1010011;没有立即数。

格式: OP-FP BF16 转换字段(fmt=00,rs2=00110)
opcode: 1010011 (0x53)
funct7: 0100000 (0x20)
rs2: 固定 6(BF16)

指令行为说明

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 数据加宽为 FP32

fcvt.s.bf16 f0, f1, rne # boxed BF16 0x3FC0 (1.5) -> FP32 0x3FC00000 (1.5)。预置示例源值并启用所需扩展与相关状态。

使用前检查清单

语法检查
  • 语法 fcvt.s.bf16 rd, rs1[, rm];rd、rs1 均选择浮点 f0–f31,f0 可读写;rs2 是固定格式选择子,不是第二源。
  • 32 位 OP-FP:funct5=01000,fmt=00,rs2=00110,funct3=rm,opcode=1010011;没有立即数。
语义检查
  • RV32/RV64 Zfbfmin 1.0,依赖 F;启用所需扩展与浮点状态。精确加宽,数值不受 rm 影响;软件应编码 RNE(000);仅可能新增 NV。rm 可省略,汇编默认 dyn;静态 rm=101/110 与动态 frm=101–111 按保留编码处理。
  • 支持 subnormal;源格式窄于 FLEN 时检查 NaN-boxing,错误装箱按 canonical quiet NaN;较窄结果高位填 1。sNaN 新增 NV、NaN 结果规范化;fflags 累积而非清零,设置标志本身不产生浮点陷阱。

容易混淆 / 常见误区

转换精确,数值结果不受舍入模式影响;rm 字段仍存在,软件应编码 RNE(000),合法/保留编码按通常规则处理。
源 BF16 标量必须按较窄浮点值正确 NaN-box;否则作为规范 NaN 输入处理。
结果是 FP32,并在 FLEN>32 时 NaN-box 到浮点寄存器。

常见问题

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

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

源和目标使用哪些寄存器?

rd 和 rs1 均选择浮点寄存器 f0–f31;f0 可以正常读写。源格式窄于 FLEN 时检查 NaN-boxing,错误装箱按规范 quiet NaN 处理;较窄结果的高位全部写 1。