FLQ

RISC-V FLQ 指令详解

指令手册I-type

从内存加载 16 字节四精度浮点值。

指令语法

flq rd, offset(rs1)
操作数说明
rd:目标浮点寄存器。
rs1:整数基址寄存器。
offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
Q浮点加载

指令编码

31..20
imm[11:0]
19..15
rs1
14..12
funct3
11..7
rd
6..0
opcode

FLQ 使用 opcode 0000111(0x07)、funct3 100。rs1 字段选择整数基址寄存器,立即数字段提供字节偏移,rd 字段选择目标浮点寄存器。

格式: I-type
opcode: 0000111 (0x07)
funct3: 100 (0x4)

指令行为说明

FLQ 使用 x[rs1] 加 12 位有符号 offset 形成有效地址,从内存加载 16 字节四精度浮点编码到 f[rd]。自然对齐访问具有规范定义的原子性保证;非对齐行为取决于执行环境。

快速理解与检索要点

FLQ 是浮点寄存器和内存之间的四精度格式访存指令。地址计算和整数 load/store 一样使用基址加 12 位有符号字节偏移。

访问宽度是 16 字节;是否需要严格对齐以及非对齐处理取决于执行环境。
加载结果在浮点寄存器中按该格式表示,并在更宽 FLEN 中 NaN-box。

常见使用场景

浮点访存

结合 «flq f0, 0(x10) # load quad from [x10+0]» 等实际代码理解该场景。

数据加载与存储

结合 «flq f0, 0(x10) # load quad from [x10+0]» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd:目标浮点寄存器。
  • rs1:整数基址寄存器。
  • offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
语义检查
  • 确认 offset 是字节偏移,不是元素索引。
  • 确认目标地址的自然对齐和执行环境的非对齐访问规则。

容易混淆 / 常见误区

offset 是 12 位有符号字节偏移,不是元素索引。
自然对齐时才有规范的原子性保证;非对齐支持由执行环境定义。
加载结果按四精度格式写入浮点寄存器;如果实现支持更宽 FLEN,则遵守 NaN-boxing 规则。

常见问题

FLQ 的 offset 单位是什么?

offset 是字节偏移,由 12 位有符号立即数字段编码。

FLQ 会转换浮点格式吗?

不会。访存指令搬移该格式的编码位;格式转换应使用 FCVT。