首页/指令库/存储双精度浮点数
FSD

RISC-V FSD 指令详解

指令手册S-type

将64位双精度浮点值从f寄存器存储到内存。

指令语法

fsd rs2, offset(rs1)
操作数说明
源寄存器 rs2:要写入内存的数据寄存器。
基址寄存器 rs1:内存访问的基地址。
立即数偏移:12 位有符号偏移量,与 rs1 相加得到最终地址。
D浮点存储

指令行为说明

FSD 使用 S-type STORE-FP 编码,将浮点寄存器 f[rs2] 中的 64 位双精度浮点位模式存储到 x[rs1] 加 12 位有符号字节偏移形成的有效地址。传输不会执行浮点舍入,也不会修改或规范化 NaN payload。仅当有效地址自然对齐且 XLEN 不小于 64 时,FSD 的访问原子性由官方 D 扩展规则保证;非对齐访问由执行环境约束。

FSD 指令解析与执行动画

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

rs2
offset
rs1
fsd
,
,
执行环境
fmt=D / width=64
基址寄存器是整数 x 寄存器
fflags 不改变
31..25
24..20
19..15
14..12
11..7
6..0
0000000
imm[11:5]
01011
rs2
01010
rs1
011
FSD
10000
imm[4:0]
0100111
STORE-FP
执行数据路径
instruction
0x00B53827
opcode
0100111 -> STORE-FP
funct3
011 -> 64-bit store
offset
000000010000 -> 16
rs2/rs1
fa1(f11) / a0(x10)
read
a0(x10) = 0x0000000000001000, fa1(f11) = 0x400921FB54442D18
address
0x0000000000001000 + (16) = 0x0000000000001010
memory
memory[0x0000000000001010] = 0x400921FB54442D18
当前步骤

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

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

encoding: 0x00B53827
syntax : fsd fa1(f11), 16(a0(x10))
result : memory[0x0000000000001010] = 0x400921FB54442D18
地址与位模式传输
base
0x0000000000001000
offset
16
address
0x0000000000001010
stored bits
0x400921FB54442D18

FSD 传输 64 位双精度位模式;自然对齐访问的原子性与非对齐处理按官方规范和执行环境约束。

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

快速理解与检索要点

FSD 是 D 扩展双精度浮点存储。它用整数基址和 12 位字节偏移计算地址,把 f[rs2] 的 64 位双精度位模式写入内存;它不是浮点算术,因此没有 rm 舍入步骤。

S-type STORE-FP:imm[11:5]、rs2、rs1、funct3=011、imm[4:0]、opcode=0100111。
有效地址 = x[rs1] + sign_extend(offset),偏移单位是字节。
FSD 传输 64 位位模式;自然对齐且 XLEN≥64 时有访问原子性保证。

常见使用场景

浮点基本运算

结合 «fsd f0, 0(x10)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

rs1 是整数基址寄存器;rs2 是浮点源寄存器。
offset 是 12 位有符号字节偏移,范围 -2048 到 2047。
FSD 存储 64 位双精度位模式,不执行浮点舍入或 NaN 规范化。
原子性保证要求自然对齐且 XLEN≥64;非对齐处理由执行环境决定。

常见问题

FSD 会按浮点格式转换数据吗?

不会。FSD 只是把源浮点寄存器中的 64 位位模式写入内存,不执行舍入或格式转换。

FSD 的地址寄存器是浮点寄存器吗?

不是。rs1 是整数寄存器,rs2 才是提供数据的浮点寄存器。