fsflagsi

RISC-V fsflagsi 伪指令详解

汇编器伪指令

RISC-V fsflagsi 通过 CSRRWI 用五位零扩展立即数写入 fflags。fsflagsi rd, imm 仅在 rd 不是 x0 时读取并返回旧值;rd=x0 时,包括单操作数形式,不读取 fflags。

你写下的是
fsflagsi rd, imm fsflagsi imm
各写法对应的展开
fsflagsi rd, imm
csrrwi rd, fflags, imm
fsflagsi imm
csrrwi x0, fflags, imm

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

fsflagsi rd, imm 仅在 rd 不是 x0 时读取旧 fflags 值并返回到 rd;rd=x0 时,包括单操作数形式,只执行写入,不读取 fflags。

可用性与扩展条件

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

两种写法的区别

形式 1
fsflagsi rd, imm 展开为 csrrwi rd, fflags, imm;仅在 rd 不是 x0 时读取旧 fflags 值并返回到 rd。
形式 2
fsflagsi imm 使用 rd=x0 的 CSRRWI 写入 fflags,且不读取该 CSR。

汇编写法与真实指令

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

官方依据与阅读顺序

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

什么时候优先想到它

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

容易混淆 / 常见误区

CSRRWI 的立即数是五位无符号值,并零扩展到 XLEN。
两操作数形式也可指定 rd=x0;此时 CSRRWI 不读取 fflags,也不产生 CSR 读取副作用。

常见问题

fsflagsi 是独立硬件 opcode 吗?

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

fsflagsi 的官方展开是什么?

RISC-V Assembly Programmer's Manual 列出:csrrwi rd, fflags, imm;csrrwi x0, fflags, imm。

fsflagsi 的两操作数形式总会保留旧值吗?

只有 rd 不是 x0 时,CSRRWI 才读取旧 fflags 值并返回到 rd。两操作数形式指定 rd=x0 时,与单操作数形式一样,不读取 fflags,也不产生 CSR 读取副作用。