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

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

指令手册R-type

将 FP32 窄化为 BF16;按 rm/frm 舍入。

指令语法

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

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

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

RV32/RV64 Zfbfmin 1.0,依赖 F;启用所需扩展与浮点状态。按 rm 舍入,rm=111 使用 frm;可累积 OF/UF/NX/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.BF16.S 使用 opcode 1010011(0x53)、funct7 0100010、rs2 固定 8(BF16.S)。32 位 OP-FP:funct5=01000,fmt=10,rs2=01000,funct3=rm,opcode=1010011;没有立即数。

格式: OP-FP BF16 转换字段(fmt=10,rs2=01000)
opcode: 1010011 (0x53)
funct7: 0100010 (0x22)
rs2: 固定 8(BF16.S)

指令行为说明

FCVT.BF16.S(Zfbfmin,依赖 F)将 f[rs1] 中的单精度 FP32 值窄化转换为 BF16,并按指令 rm 字段选择的 RISC-V 浮点舍入模式舍入,结果作为 BF16 值写入 f[rd](按较窄浮点结果进行 NaN-box)。它只支持 FP32 与 BF16 之间的最小转换,不提供 BF16 加减乘除。可能设置 Overflow、Underflow、Inexact、Invalid 异常标志。

快速理解与检索要点

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

窄化到 BF16 会舍入并可能设置 OF/UF/NX/NV。
BF16 标量结果/输入遵守 RISC-V NaN-boxing 规则。

常见使用场景

FP32 数据的 BF16 交换格式转换

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

使用前检查清单

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

容易混淆 / 常见误区

BF16 是 1 位符号、8 位指数、7 位 fraction(p=8)的 16 位格式;动态范围接近 FP32,但精度远低于 FP16。
按 rm 舍入;不是简单截断高 16 位。
Zfbfmin 只提供 BF16/FP32 转换和复用的 FLH/FSH/FMV.H.X/FMV.X.H,不提供原生 BF16 算术。
BF16 subnormal 被这些扩展完整支持;异常标志按 RISC-V 浮点规则设置。

常见问题

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

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

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

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