frrm
RISC-V frrm 伪指令详解
汇编器伪指令读取 frm 伪指令,展开为 csrrs rd, frm, x0。frm 保存动态浮点舍入模式编码。
你写下的是
frrm rd
常见真实展开
csrrs rd, frm, x0
这条伪指令到底在帮你省什么
浮点状态本质上通过 CSR 指令访问;这些伪指令把 fcsr/frm/fflags 的常见读写写法命名出来,便于阅读浮点环境代码。
frrm 的核心作用是“读取浮点舍入模式”。它是汇编器层面的简写;调试、审计或阅读机器码时,应回到页面列出的真实展开指令和相关重定位语义来判断行为。
官方语义核对重点
官方汇编手册把 frrm 作为汇编器层面的伪指令/别名处理,硬件执行的是展开后的真实指令序列。
真实语义以 CSRRS 等展开指令的 ISA 定义为准;本页不把 frrm 当作独立硬件 opcode。
CSR 读写、置位、清位和立即数字段行为以 Zicsr 的 CSRRW/CSRRS/CSRRC 及立即数变体语义为准。
可用性与扩展条件
基础条件
- 需要实现相关浮点状态 CSR
- 通过 Zicsr 指令访问 fflags/frm/fcsr
单指令/标准写法条件
- 目标 ISA/ABI 环境支持相应浮点扩展和 CSR 访问
回退/边界
没有相应浮点状态或 CSR 访问权限时,不应假定这些伪指令可用。备注
- 写 frm、fflags 或 fcsr 可能影响后续浮点指令结果或异常标志。
展开过程怎么理解
步骤 1
CSRRS 读取 frm;rs1=x0 表示不修改 CSR。
在 objdump / 反汇编里可能看到什么
工具可能显示 frcsr/fscsr/frrm/fsrm/frflags/fsflags 等伪指令,也可能显示底层 CSRRS/CSRRW/CSRRWI。
官方依据与阅读顺序
本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。
什么时候优先想到它
保存或恢复浮点环境
读取浮点异常标志进行诊断
切换动态舍入模式
编写运行库、数学库或低层测试代码
容易混淆 / 常见误区
这些伪指令要求目标实现支持相关浮点状态;没有相应扩展时不可假定可用
写 frm/fflags/fcsr 可能影响后续浮点指令结果或异常标志
立即数形式仍受 5 位 CSR 立即数字段限制
常见问题
frrm 是真实 RISC-V 指令吗?
frrm 是汇编器伪指令或别名,不是单独硬件 opcode。页面中的“常见真实展开”列出官方展开,真实行为由展开后的 ISA 指令决定。
使用 frrm 时最容易误解什么?
这些伪指令要求目标实现支持相关浮点状态;没有相应扩展时不可假定可用