首页/指令库/FCVTMOD-W-D
FCVTMOD.W.D

RISC-V FCVTMOD.W.D 指令详解

指令手册R-type

双精度浮点模转换到有符号字(截断后取模2^32)

指令语法

fcvtmod.w.d rd, rs1, rtz
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
ZfaD浮点转换

指令行为说明

fcvtmod.w.d 是 Zfa 指令,将双精度浮点数按 RTZ 转换为无界二进制补码整数,取低 32 位后符号扩展到 XLEN;NaN 和正负无穷转换为 0。

快速理解与检索要点

fcvtmod.w.d 是 Zfa 指令,将双精度浮点数按 RTZ 转换为无界二进制补码整数,取低 32 位后符号扩展到 XLEN;NaN 和正负无穷转换为 0。

编码类似 FCVT.W.D,但 rs2=8 且 rm=RTZ。
汇编语法必须显式写 rtz;其他 rm 编码为保留。
它是模 2^32 转换,不是 FCVT.W.D 那样的饱和/夹取转换。
NaN 和正负无穷结果为 0,这是该 Zfa 指令的专门规则。

常见使用场景

JavaScript 引擎

结合 «fcvtmod.w.d x10, f0, rtz # x10 = (int32_t)(f0) mod 2^32, always RTZ» 等实际代码理解该场景。

WebAssembly

结合 «fcvtmod.w.d x10, f0, rtz # x10 = (int32_t)(f0) mod 2^32, always RTZ» 等实际代码理解该场景。

模运算

结合 «fcvtmod.w.d x10, f0, rtz # x10 = (int32_t)(f0) mod 2^32, always RTZ» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

汇编语法必须显式写 rtz;其他 rm 编码为保留。
它是模 2^32 转换,不是 FCVT.W.D 那样的饱和/夹取转换。
NaN 和正负无穷结果为 0,这是该 Zfa 指令的专门规则。

常见问题

fcvtmod.w.d 和 fcvt.w.d 有什么区别?

fcvtmod.w.d 取无界 RTZ 转换结果的低 32 位并模 2^32;fcvt.w.d 对越界整数转换使用官方无效转换结果。

fcvtmod.w.d 为什么要求 rtz?

Zfa 规定汇编语法必须显式指定 RTZ,其他 rm 编码保留。