FLQ

RISC-V FLQ 指令详解

指令手册I-type

从内存加载 128 位四精度浮点位模式到浮点寄存器。

指令语法

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

指令行为说明

FLQ 使用 I-type LOAD-FP 编码,从 x[rs1] 加 12 位有符号字节偏移形成的有效地址加载 128 位四精度浮点位模式,并写入浮点寄存器 f[rd]。传输不会执行浮点舍入、格式转换或 NaN payload 规范化。官方 Q 扩展只在有效地址自然对齐且 XLEN=128 时保证 FLQ 访问原子性;非对齐访问由执行环境约束。

FLQ 指令解析与执行动画

展示 Q 扩展浮点加载的 ISA 可见流程:解析 I-type 编码,用整数基址加 12 位偏移形成地址,并传输 128 位浮点位模式。

rd
offset
rs1
flq
,
,
执行环境
fmt=Q / width=128
基址寄存器是整数 x 寄存器
fflags 不改变
31..20
19..15
14..12
11..7
6..0
000000100000
imm[11:0]
01010
rs1
100
FLQ
01010
rd
0000111
LOAD-FP
执行数据路径
instruction
0x02054507
opcode
0000111 -> LOAD-FP
funct3
100 -> 128-bit load
offset
000000100000 -> 32
rd/rs1
fa0(f10) / a0(x10)
read
a0(x10) = 0x0000000000001000
address
0x0000000000001000 + (32) = 0x0000000000001020
write
fa0(f10) = 0x3FFF8000000000000000000000000000
当前步骤

Fetch:展示 32-bit I-type 编码

机器码按 I-type 字段切分;浮点访存不是 OP-FP 算术编码。

encoding: 0x02054507
syntax : flq fa0(f10), 32(a0(x10))
result : fa0(f10) = 0x3FFF8000000000000000000000000000
地址与位模式传输
base
0x0000000000001000
offset
32
address
0x0000000000001020
loaded bits
0x3FFF8000000000000000000000000000

FLQ 传输 128 位四精度位模式;只有有效地址自然对齐且 XLEN=128 时,官方 Q 扩展保证访问原子性。

该动画只展示 RISC-V Q 扩展浮点加载/存储的 ISA 可见地址计算和位模式传输;不模拟 cache、总线、异常处理器、FPU 流水线或微架构时序。

快速理解与检索要点

FLQ 是 Q 扩展四精度浮点加载。它用整数寄存器 rs1 加 12 位有符号字节偏移形成地址,从内存取 128 位四精度位模式写入浮点寄存器 rd;这不是浮点算术,也不使用 rm 舍入。

I-type LOAD-FP:imm[11:0]、rs1、funct3=100、rd、opcode=0000111。
有效地址 = x[rs1] + sign_extend(offset),偏移单位是字节。
FLQ 传输 128 位四精度位模式;自然对齐且 XLEN=128 时有访问原子性保证。

常见使用场景

浮点访存

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

数据加载与存储

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

使用前检查清单

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

容易混淆 / 常见误区

rs1 是整数基址寄存器,不是浮点寄存器;rd 是四精度浮点目标寄存器。
offset 是 12 位有符号字节偏移,范围 -2048 到 2047,不是 16 字节倍数编码。
FLQ 传输 128 位位模式,不执行浮点舍入、格式转换或 NaN payload 规范化。
访问原子性保证要求自然对齐且 XLEN=128;不要把非对齐 FLQ 当作可移植同步原语。

常见问题

FLQ 的 offset 是 16 字节倍数吗?

不是。offset 是 12 位有符号字节偏移;自然对齐是访问地址属性,不是编码单位。

FLQ 会改变 NaN payload 吗?

不会。FLQ 是位模式加载,传输不会规范化 NaN payload。