FLI.D

RISC-V FLI.D 指令详解

指令手册I-type

从 Zfa 32 项常量表加载一个双精度浮点常量。

指令语法

fli.d rd, constant
操作数说明
rd:目标浮点寄存器。
constant:汇编层面的 Zfa FLI 表项常量;机器编码使用 rs1 字段选择 0-31 表项。
ZfaD浮点转换

指令行为说明

FLI.D 从指令 rs1 字段编码的 32 项 Zfa 浮点常量表中选择一个双精度常量写入 f[rd]。它不是任意立即数编码;entry 1 是目标格式的最小正规正数,entry 30 是 +inf,entry 31 是规范 NaN。加载常量不设置浮点异常标志。

快速理解与检索要点

FLI.D 解决的是“常见浮点常量能否不用内存池加载”。它只能加载官方 32 项表中的常量,不能表达任意二进制浮点字面量。

entry 1 随目标格式变化;H/S/D/Q 分别使用该格式的最小正规正数。
entry 30 和 31 分别表示 +inf 与规范 NaN;加载它们不产生异常标志。

常见使用场景

浮点常量

结合 «fli.d f0, 1.0 # f0 = 1.0 (uses rs1=16)» 等实际代码理解该场景。

代码尺寸优化

结合 «fli.d f0, 1.0 # f0 = 1.0 (uses rs1=16)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

constant 必须是官方 FLI 常量表可表示的值,不是任意浮点立即数。
rs1 字段实际编码 0-31 的表项索引。
加载 +inf 或规范 NaN 也不会设置浮点异常标志。

常见问题

FLI.D 可以加载任意浮点常量吗?

不可以。它只能选择 Zfa 规定的 32 个表项。

FLI.D 的 constant 是怎么编码的?

汇编器把可接受的常量名或数值映射到 rs1 字段中的 0-31 表项索引。