fsrm

RISC-V fsrm 伪指令详解

汇编器伪指令

fsrm 通过 CSRRW 将 rs 的低三位写入 frm。两操作数形式只有在 rd 非 x0 时读取并返回旧值;rd=x0 或单操作数形式不读取 frm。

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

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

fsrm rd, rs 在 rd 非 x0 时返回旧 frm 值,并将 rs 的低三位写入 frm;rd=x0 或单操作数形式不读取 frm,只写入。

可用性与扩展条件

基础条件
  • 适用于实现所述 fcsr 与 frm 字段的环境。

两种写法的区别

形式 1
fsrm rd, rs 使用 CSRRW 将 rs1 的低三位写入 frm;rd 非 x0 时读取旧 frm 并复制到 rd,rd=x0 时不读取 frm。
形式 2
fsrm rs 使用 rd=x0 的 CSRRW 写入 frm,且不读取该 CSR。

汇编写法与真实指令

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

官方依据与阅读顺序

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

什么时候优先想到它

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

容易混淆 / 常见误区

FSRM 只用 rs1 的低三位写入 frm。
两操作数形式也允许 rd=x0;此时 CSRRW 不读取 frm,也不产生 CSR 读取副作用。

常见问题

fsrm 是独立硬件 opcode 吗?

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

fsrm 的官方展开是什么?

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

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

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