C.FSD

RISC-V C.FSD 指令详解

指令手册CS-format

RV32DC/RV64DC 的 16 位 CS 浮点存储,传输 64 位;基址 x8–x15,源 f8–f15。

指令语法

c.fsd fs2', offset(rs1')

fs2′ 的3位字段映射 f8–f15;rs1′ 的3位字段映射 x8–x15,分属浮点和整数寄存器文件。

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

RV32DC/RV64DC,浮点状态启用,访问获准;存储源的低64位且保留NaN载荷,不改变源和基址。

地址为基址加 offset(按 XLEN 回绕)。自然对齐不会引发地址未对齐异常;非对齐结果由 EEI 定义,异常不显示完整访问成功。

CD压缩指令

指令行为说明

RV32DC/RV64DC:有效地址为 x[rs1'] 加无符号字节偏移(0–248,8 的倍数)。访问成功时将 fs2' 的低 64 位原样存入内存;不改变源寄存器和基址。

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

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

c.fsd,(rs1')
执行环境

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

存储传输 64 位;若 FLEN 更宽,FSW 会忽略 f 寄存器高位并传输低 32 位,FSD 传输低 64 位。传输不修改 NaN 载荷。

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

x10 = 0x0000000000001000;f8 的低 64 位 = 0x3FF0000000000000。 -> 0x0000000000001010 -> M[0x0000000000001010] = 0x3FF0000000000000。
16 位编码字段

rs1'=010 -> x10; fs2'=000 -> f8; uimm=2 × 8 = 16 字节(汇编 offset)

15..13
funct3
101
12..10
uimm[5:3]
010
9..7
rs1'
010
6..5
uimm[7:6]
00
4..2
fs2'
000
1..0
op
00
执行数据路径
x10 = 0x0000000000001000;f8 的低 64 位 = 0x3FF0000000000000。
0x0000000000001010 = (0x0000000000001000 + 16) mod 2^64
M[0x0000000000001010] <- 0x3FF0000000000000
尚未提交架构状态。

快速理解与检索要点

RV32DC/RV64DC:有效地址为 x[rs1'] 加无符号字节偏移(0–248,8 的倍数)。访问成功时将 fs2' 的低 64 位原样存入内存;不改变源寄存器和基址。

C.FSD 是真实的 16 位 CS 编码,语义对应 FSD。
rs1′ 的 3 位字段映射 x8–x15;fs2′ 的 3 位字段映射 f8–f15,二者属于不同寄存器文件。
汇编 offset 为 0–248 字节且必须是 8 的倍数;编码重组后低 3 位为零,不再缩放汇编值。

常见使用场景

浮点内存访问

RV64DC、浮点状态启用,x10=0x1000,f8低64位=0x7ff0000000000001,访问成功:c.fsd f8, 0(x10) 原样存储这64位,源和基址不变。

使用前检查清单

语法检查
  • fs2′ 的3位字段映射 f8–f15;rs1′ 的3位字段映射 x8–x15,分属浮点和整数寄存器文件。
  • offset 已是无符号字节偏移:0–248,必须为 8 的倍数;编码隐含低 3 位为零,不再次缩放。
语义检查
  • RV32DC/RV64DC,浮点状态启用,访问获准;存储源的低64位且保留NaN载荷,不改变源和基址。
  • 地址为基址加 offset(按 XLEN 回绕)。自然对齐不会引发地址未对齐异常;非对齐结果由 EEI 定义,异常不显示完整访问成功。

容易混淆 / 常见误区

本页采用 RV32DC/RV64DC 配置;D 还依赖 F。
汇编 offset 已是 0–248 的字节偏移,必须为 8 的倍数;不要再次缩放。
自然对齐不会引发地址未对齐异常;非对齐访问是否完成或引发异常由 EEI 定义。
传输保留 NaN 载荷;若 FLEN 大于 64,存储忽略高位,仅传输低 64 位。

常见问题

c.fsd 的 offset 如何填写?

填写 0–248 的字节偏移且为 8 的倍数。offset=16 表示基址加 16 字节;它不会修改基址。

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

本页采用 RV32DC/RV64DC 配置,并要求浮点状态启用且内存访问获准。C+D 蕴含 Zcd;Zcd 依赖 Zca 和 D,D 还依赖 F。