C.FLWSP

RISC-V C.FLWSP 指令详解

指令手册CI-format

RV32FC 的 16 位 CI 浮点加载,传输 32 位;基址固定为 x2/sp。

指令语法

c.flwsp fd, offset(sp)

fd 的5位字段选择 f0–f31,基址固定 x2/sp;f0 不是整数零寄存器。

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

RV32FC,浮点状态启用,访问获准;加载32位原始位模式,FLEN更宽时高位全1。

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

CF压缩指令

指令行为说明

RV32FC:有效地址为 x2/sp 加无符号字节偏移(0–252,4 的倍数)。访问成功时将 32 位内存位模式加载到 fd。

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

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

c.flwsp,(sp)
执行环境

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

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

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

x2/sp = 0x00001000;内存 32 位模式 = 0x3F800000。 -> 0x00001010 -> f0 = 0x3F800000。
16 位编码字段

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

15..13
funct3
011
12
uimm[5]
0
11..7
fd
00000
6..4
uimm[4:2]
100
3..2
uimm[7:6]
00
1..0
op
10
执行数据路径
x2/sp = 0x00001000;内存 32 位模式 = 0x3F800000。
0x00001010 = (0x00001000 + 16) mod 2^32
f0 <- 0x3F800000
尚未提交架构状态。

快速理解与检索要点

RV32FC:有效地址为 x2/sp 加无符号字节偏移(0–252,4 的倍数)。访问成功时将 32 位内存位模式加载到 fd。

C.FLWSP 是真实的 16 位 CI 编码,语义对应 FLW。
fd 的 5 位字段可选 f0–f31;f0 不是整数零寄存器。基址固定为 x2/sp。
汇编 offset 为 0–252 字节且必须是 4 的倍数;编码重组后低 2 位为零,不再缩放汇编值。

常见使用场景

浮点内存访问

RV32FC、FLEN=32、浮点状态启用,sp=0x1000,mem32[0x1010]=0x7f800001,访问成功:c.flwsp f0, 16(sp) 将原始模式写入 f0,sp 不变。若 FLEN=64,高32位全1。

使用前检查清单

语法检查
  • fd 的5位字段选择 f0–f31,基址固定 x2/sp;f0 不是整数零寄存器。
  • offset 已是无符号字节偏移:0–252,必须为 4 的倍数;编码隐含低 2 位为零,不再次缩放。
语义检查
  • RV32FC,浮点状态启用,访问获准;加载32位原始位模式,FLEN更宽时高位全1。
  • 地址为基址加 offset(按 XLEN 回绕)。自然对齐不会引发地址未对齐异常;非对齐结果由 EEI 定义,异常不显示完整访问成功。

容易混淆 / 常见误区

C.FLWSP 仅 RV32FC;RV64C 中相同编码用于 C.LDSP。
汇编 offset 已是 0–252 的字节偏移,必须为 4 的倍数;不要再次缩放。
自然对齐不会引发地址未对齐异常;非对齐访问是否完成或引发异常由 EEI 定义。
若 FLEN 大于 32,加载还会将目标浮点寄存器高位写为全 1,形成有效 NaN box。

常见问题

c.flwsp 的 offset 如何填写?

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

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

本页采用 RV32FC 配置,并要求浮点状态启用且内存访问获准。C+F 在 RV32 上蕴含 Zcf;Zcf 依赖 Zca 和 F。