FLI.D

RISC-V FLI.D 指令详解

指令手册R-type

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

指令语法

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

指令行为说明

FLI.D 使用 OP-FP 的 R-type 字段布局:rs1 编码 32 项 Zfa 浮点常量表索引,funct5=11110、fmt=D、rs2=1、funct3=000,并将所选双精度常量写入 f[rd]。它不是任意立即数编码;entry 1 是双精度的最小正规正数,entry 30 是 +inf,entry 31 是规范 NaN。加载常量不设置浮点异常标志。

FLI.D 指令解析与执行动画

展示 Zfa FLI 的 OP-FP 固定字段、rs1 常量表索引和浮点寄存器写回;它不是任意浮点立即数或舍入操作。

rd
constant
fli.d
,
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11110
FLI
01
fmt
00001
fixed 1
10000
table index
000
fixed
01010
FP rd
1010011
OP-FP
执行数据路径
instruction
0xF2180553
opcode
1010011 -> OP-FP
funct5 / fmt
11110 / 01 -> FLI.D
fixed fields
rs2=00001, funct3=000
constant index
rs1=16 -> 1.0
destination
rd=fa0(f10)
writeback
fa0(f10) = 1.0; fflags unchanged
当前步骤

Fetch:展示 32 位 OP-FP FLI 编码

FLI 使用 OP-FP 字段布局;它不把任意浮点字面量放入普通 I-type 立即数字段。

等待浮点寄存器写回

该动画只展示 Zfa FLI 的 ISA 可见字段选择、官方常量表选择和寄存器结果;不模拟汇编器实现、FPU 流水线、异常处理或微架构时序。

快速理解与检索要点

FLI.D 通过指令 rs1 字段选择官方 32 项表中的一个双精度常量写入 rd;它不能表达任意二进制浮点字面量。

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

常见使用场景

浮点常量

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

使用前检查清单

语法检查
  • rd:目标浮点寄存器。
  • constant:汇编层面的 Zfa FLI 表项常量;机器编码使用 rs1 字段选择 0-31 表项。
语义检查
  • 确认常量属于官方 Zfa FLI 32 项表。
  • 确认该指令不会加载任意浮点立即数,也不会设置浮点异常标志。

容易混淆 / 常见误区

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

常见问题

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

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

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

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