C.FLDSP

RISC-V C.FLDSP 指令详解

指令手册CI-format

从栈指针+偏移加载双精度浮点。CI格式,RV32DC/RV64DC。

指令语法

c.fldsp fd, offset(sp)
操作数说明
本指令为 CI-format 格式,请根据汇编语法确认各操作数位置。
CD压缩指令

指令行为说明

c.fldsp 从 sp + 零扩展的 8 字节缩放偏移加载 64 位双精度值到浮点 fd。

C.FLDSP 指令解析与执行动画

只展示手册定义的 16 位字段、操作数和 ISA 可见结果;不模拟流水线、缓存、时序或实现的内存异常处理。

c.fldsp,(sp)
执行环境

本加载教学环境固定 FLEN=64。若 FLEN 更宽,64 位传输会将目标 f 寄存器高位写为全 1,形成有效 NaN-boxed 值。

自然对齐访问不会引发 address-misaligned exception;非自然对齐访问是否完成或发生 address-misaligned/access-fault exception 由 EEI 定义。此控件只显示所选结果分支。

x2/sp = 0x0000000000001000;内存 64 位模式 = 0x3FF0000000000000。 -> 0x0000000000001010 -> f0 = 0x3FF0000000000000。
16 位编码字段
15..13
funct3
001
12
uimm[5]
0
11..7
fd
00000
6..5
uimm[4:3]
10
4..2
uimm[8:6]
000
1..0
op
10
执行数据路径
x2/sp = 0x0000000000001000;内存 64 位模式 = 0x3FF0000000000000。
0x0000000000001010 = 0x0000000000001000 + 16
f0 <- 0x3FF0000000000000
尚未提交架构状态。

快速理解与检索要点

c.fldsp 从 sp + 零扩展的 8 字节缩放偏移加载 64 位双精度值到浮点 fd。

这是 C 扩展真实 16 位访存编码,语义对应 FLD/FLW/FSD/FSW 族的浮点访存。
基址固定为 x2/sp,目标可为浮点寄存器;需要 D 与 C。
偏移量是零扩展并按访问宽度缩放编码,不是任意字节立即数。

常见使用场景

浮点内存访问

结合 «c.fldsp f0, 16(sp) # f0 = *(sp+16)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

基址固定为 x2/sp,目标可为浮点寄存器;需要 D 与 C。
偏移量是零扩展并按访问宽度缩放编码,不是任意字节立即数。
自然对齐地址不会引发地址未对齐异常;未对齐访问是否完成或引发异常由执行环境定义。
若 FLEN 大于 64,较窄的 FLD 传输会把目标浮点寄存器的高位写为全 1,形成有效的 NaN-boxed 双精度值。

常见问题

c.fldsp 的偏移单位是什么?

编码中的立即数按访问宽度缩放:双精度按 8 字节,单精度按 4 字节。

c.fldsp 是否需要浮点扩展?

需要相应浮点扩展:双精度形式需要 D,单精度形式需要 F,并且都需要 C。