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 读取副作用。