C.FLDSP

RISC-V C.FLDSP 指令详解

指令手册CI-format

RV32DC/RV64DC 压缩64位浮点加载;固定 x2/sp 基址,fd 为 f0–f31。

指令语法

c.fldsp fd, offset(sp)

fd 选择全部 f0–f31;f0 不是整数零寄存器 x0。基址固定为 x2/sp。

offset 已是无符号字节偏移:0–504,必须为8的倍数;编码隐含低3位为零。

RV32DC/RV64DC,启用浮点状态;成功访问加载64位原始位模式,FLEN更宽时高位全1。

有效地址为基址加 offset;自然对齐不会产生地址未对齐异常,非对齐结果由EEI定义,故障不提交普通浮点目标写回。

CD压缩指令

指令行为说明

RV32DC/RV64DC 的 16 位CI 格式:地址为 x2/sp 加无符号字节偏移(0–504,8 的倍数),访问成功后将 64 位内存位模式原样加载到 fd。

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

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

c.fldsp,(sp)
执行环境

RV32DC/RV64DC;浮点状态已启用,普通地址计算环境(无地址变换扩展),内存位模式已按环境字节序组装。

本加载教学环境固定 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 位编码字段

base = x2/sp; fd=00000 -> f0; uimm=2 × 8 = 16 字节(汇编 offset)

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) mod 2^64
f0 <- 0x3FF0000000000000
尚未提交架构状态。

快速理解与检索要点

RV32DC/RV64DC 的 16 位CI 格式:地址为 x2/sp 加无符号字节偏移(0–504,8 的倍数),访问成功后将 64 位内存位模式原样加载到 fd。

C.FLDSP 采用真实 16 位 CI 编码,语义对应 FLD。
本页采用 RV32DC/RV64DC 配置;固定基址 x2/sp,fd 可选 f0–f31,f0 不是硬连零寄存器。
汇编 offset 已是字节偏移,范围 0–504 且为 8 的倍数;编码隐含低 3 位为零,不再对汇编值乘 8。

常见使用场景

浮点内存访问

RV64DC、FLEN=64、浮点状态启用,sp=0x1000,地址0x1010的已组装64位内存模式为0x3ff0000000000000,访问成功:c.fldsp f0, 16(sp) 写 f0 为该模式,sp 不变。

使用前检查清单

语法检查
  • fd 选择全部 f0–f31;f0 不是整数零寄存器 x0。基址固定为 x2/sp。
  • offset 已是无符号字节偏移:0–504,必须为8的倍数;编码隐含低3位为零。
语义检查
  • RV32DC/RV64DC,启用浮点状态;成功访问加载64位原始位模式,FLEN更宽时高位全1。
  • 有效地址为基址加 offset;自然对齐不会产生地址未对齐异常,非对齐结果由EEI定义,故障不提交普通浮点目标写回。

容易混淆 / 常见误区

基址固定为 x2/sp,目标可为浮点寄存器;需要 D 与 C。
汇编 offset 为 0–504 字节且必须是 8 的倍数;不要再次缩放。
自然对齐地址不会引发地址未对齐异常;未对齐访问是否完成或引发异常由执行环境定义。
若 FLEN 大于 64,较窄的 FLD 传输会把目标浮点寄存器的高位写为全 1,形成有效的 NaN-boxed 双精度值。

常见问题

c.fldsp 的 offset 如何填写?

填写 0–504 的字节偏移,且必须为 8 的倍数。例如 offset=16 表示地址加 16 字节。

c.fldsp 的适用条件是什么?

本页采用 RV32DC/RV64DC 配置。还须启用浮点状态并满足内存访问条件;访问异常时不进行普通浮点目标写回。