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