fscsr

RISC-V fscsr 伪指令详解

汇编器伪指令

fscsr 通过 CSRRW 写入 fcsr。两操作数形式在 rd 非 x0 时读取并返回旧值;rd=x0 时不读取 CSR。单操作数形式使用 x0 作为目的寄存器。

你写下的是
fscsr rd, rs fscsr rs
各写法对应的展开
fscsr rd, rs
csrrw rd, fcsr, rs
fscsr rs
csrrw x0, fcsr, rs

这条伪指令到底在帮你省什么

fscsr rd, rs 在 rd 非 x0 时返回旧 fcsr 值并写入新值;rd=x0 或单操作数形式不读取 fcsr,只写入。

可用性与扩展条件

基础条件
  • 适用于实现所述 fcsr CSR 的环境。

两种写法的区别

形式 1
fscsr rd, rs 使用 CSRRW 写入 fcsr;rd 非 x0 时读取旧 fcsr 并复制到 rd,rd=x0 时不读取 fcsr。
形式 2
fscsr rs 使用 rd=x0 的 CSRRW 写入 fcsr,且不读取该 CSR。

汇编写法与真实指令

本页只记录官方展开;RISC-V Assembly Programmer's Manual 将这些拼写列为伪指令。

官方依据与阅读顺序

本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。

什么时候优先想到它

使用两操作数形式并指定非 x0 的 rd,写入 fcsr 并保留旧值。
使用单操作数形式写入 fcsr。

容易混淆 / 常见误区

CSRRW 的 rd=x0 形式不读取 CSR,也不产生 CSR 读取副作用,但仍写入 CSR。

常见问题

fscsr 是独立硬件 opcode 吗?

不是。RISC-V Assembly Programmer's Manual 将 fscsr 列为汇编器伪指令;行为来自所列 CSR 指令展开。

fscsr 的官方展开是什么?

RISC-V Assembly Programmer's Manual 列出:csrrw rd, fcsr, rs;csrrw x0, fcsr, rs。

fscsr rd, rs 的 rd=x0 时会读取旧值吗?

不会。其 CSRRW 展开在 rd=x0 时不读取 fcsr,也不产生 CSR 读取副作用,但仍写入 fcsr。只有 rd 非 x0 时才读取并返回旧值。