首页/指令库/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 + D 扩展 FCVTMOD 的 ISA 可见流程:解析 OP-FP 编码、fmt/rs2 转换选择、固定 rm=001 (RTZ),读取浮点源并写回整数目标。

rd
rs1
fcvtmod.w.d
,
执行环境
fmt=D (01)
rs2=8 (modular W)
舍入: 固定 RTZ (001)
fflags: NX
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11000
FCVTMOD
01
fmt=D
01000
rs2=8 (modular W)
01011
rs1
001
rm=001 RTZ
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xC2859553
opcode
1010011 -> OP-FP
funct5/fmt
11000 + 01 -> FCVTMOD.W.D
rs2
01000 -> 8 (modular W) target
rm
001 -> fixed RTZ; other rm encodings are reserved
rd/rs1
a0(x10) / fa1(f11)
read
fa1(f11) = -42.75
convert
-42.75 -> int32 -42
write
a0(x10) = 0xFFFFFFD6 (-42); NX
当前步骤

Fetch:展示 32-bit OP-FP 编码

机器码按 R-type OP-FP 字段切分;FCVTMOD 使用 opcode 1010011。

encoding: 0xC2859553
syntax : fcvtmod.w.d a0(x10), fa1(f11), rtz
result : a0(x10) = 0xFFFFFFD6 (-42); NX

当前示例固定向零取整,取无界二进制补码结果的低 32 位并符号扩展;fflags 按同一输入的 FCVT.W.D 显示 NX。

FCVTMOD Conversion View
D FP source
-42.75
conversion
-42.75 -> int32 -42
writeback
a0(x10) = 0xFFFFFFD6 (-42)

当前示例固定向零取整,取无界二进制补码结果的低 32 位并符号扩展;fflags 按同一输入的 FCVT.W.D 显示 NX。

该动画只展示 RISC-V Zfa + D 扩展 FCVTMOD 的 ISA 可见编码、源/目标寄存器方向、舍入字段与示例 fflags;不模拟具体 FPU 流水线、异常处理机制、NaN payload 或微架构实现。

快速理解与检索要点

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 指令的专门规则。
fflags 与同一输入的 FCVT.W.D 相同;无效转换会设置 NV。

常见使用场景

JavaScript 引擎

结合 «fcvtmod.w.d x10, f0, rtz # RTZ, take low 32 bits, then sign-extend to XLEN» 等实际代码理解该场景。

WebAssembly

结合 «fcvtmod.w.d x10, f0, rtz # RTZ, take low 32 bits, then sign-extend to XLEN» 等实际代码理解该场景。

模运算

结合 «fcvtmod.w.d x10, f0, rtz # RTZ, take low 32 bits, then sign-extend to XLEN» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 rd、rs1、rs2(及 rs3)是合法 GPR。
  • 确认 funct3 与 funct7 字段编码正确。
语义检查
  • 确认结果是否会影响后续分支或地址计算。
  • 确认 rd 寄存器不会被其他指令覆盖。

容易混淆 / 常见误区

汇编语法必须显式写 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 编码保留。