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 时才读取并返回旧值。