FSQ

RISC-V FSQ 指令详解

指令手册S-type

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

指令语法

fsq rs2, offset(rs1)
操作数说明
rs2:源浮点寄存器,提供要写入内存的浮点编码。
rs1:整数基址寄存器。
offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
Q浮点存储

指令编码

31..25
imm[11:5]
24..20
rs2
19..15
rs1
14..12
funct3
11..7
imm[4:0]
6..0
opcode

FSQ 使用 opcode 0100111(0x27)、funct3 100。rs1 字段选择整数基址寄存器,rs2 字段选择源浮点寄存器,立即数字段提供字节偏移。

格式: S-type
opcode: 0100111 (0x27)
funct3: 100 (0x4)

指令行为说明

FSQ 使用 x[rs1] 加 12 位有符号 offset 形成有效地址,把 f[rs2] 中的 16 字节四精度浮点编码存入内存。存储按位写出该格式宽度的数据,不执行数值转换。

快速理解与检索要点

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

访问宽度是 16 字节;是否需要严格对齐以及非对齐处理取决于执行环境。
存储按位写出源浮点寄存器中的该格式编码。

常见使用场景

浮点访存

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

数据加载与存储

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

使用前检查清单

语法检查
  • rs2:源浮点寄存器,提供要写入内存的浮点编码。
  • rs1:整数基址寄存器。
  • offset:12 位有符号字节偏移,与 rs1 相加形成有效地址。
语义检查
  • 确认 offset 是字节偏移,不是元素索引。
  • 确认存储写出的是源浮点寄存器中的该格式编码,不执行格式转换。

容易混淆 / 常见误区

offset 是 12 位有符号字节偏移,不是元素索引。
自然对齐时才有规范的原子性保证;非对齐支持由执行环境定义。
存储写出四精度格式宽度的编码,不检查或转换成其他格式。

常见问题

FSQ 的 offset 单位是什么?

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

FSQ 会转换浮点格式吗?

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