FMAXM.Q

RISC-V FMAXM.Q 指令详解

指令手册R-type

返回两个四精度浮点操作数的最大值。

指令语法

fmaxm.q rd, rs1, rs2
操作数说明
rd:目标浮点寄存器,接收该格式的浮点结果。
rs1/rs2:源浮点寄存器;带 rm 的算术/舍入指令由 rm 或动态 frm 选择舍入模式。
ZfaQ浮点运算

指令行为说明

FMAXM.Q 是 Zfa 的四精度 IEEE 754-2019 maximum 操作:如果任一输入是 NaN,结果为规范 NaN;否则返回数值较大的操作数,并按规范处理 -0.0 与 +0.0。

FMAXM.Q 指令解析与执行动画

展示 Zfa + Q 扩展四精度 OP-FP 指令的 ISA 可见流程:解析编码字段,读取浮点寄存器,执行 FMAXM 语义并写回 rd。

rd
rs1
rs2
fmaxm.q
,
,
执行环境
FLEN=128 / fmt=Q (11)
funct3: FMAXM(任一 NaN 为规范 NaN)
fflags: 示例 fflags 保持 0
31..27
26..25
24..20
19..15
14..12
11..7
6..0
00101
FMAXM
11
fmt=Q
01100
rs2
01011
rs1
011
funct3=011
01010
rd
1010011
OP-FP
执行数据路径
instruction
0x2EC5B553
opcode
1010011 -> OP-FP
funct5/fmt
00101 + Q(11) -> FMAXM.Q
funct3
011 -> FMAXM(任一 NaN 为规范 NaN)
rd/rs
fa0(f10) / fa1(f11) / fa2(f12)
read
-0.0, 0.0
FP op
FMAXM(-0.0, 0.0) = 0.0
write
fa0(f10) = 0.0; 示例 fflags 保持 0
当前步骤

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

机器码按 R-type OP-FP 字段切分;四精度浮点 OP-FP 指令使用 opcode 1010011。

encoding: 0x2EC5B553
syntax : fmaxm.q fa0(f10), fa1(f11), fa2(f12)
result : fa0(f10) = 0.0; 示例 fflags 保持 0

默认示例展示官方规定的有符号零排序:-0.0 小于 +0.0。若任一输入为 NaN,Zfa FMINM/FMAXM 返回规范 NaN;信号 NaN 会设置 NV。

四精度计算视图
rs1
fa1(f11) = -0.0
rs2
fa2(f12) = 0.0
结果
FMAXM(-0.0, 0.0) = 0.0

默认示例展示官方规定的有符号零排序:-0.0 小于 +0.0。若任一输入为 NaN,Zfa FMINM/FMAXM 返回规范 NaN;信号 NaN 会设置 NV。

该动画只展示 RISC-V Zfa + Q 扩展的 ISA 可见 OP-FP 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。

快速理解与检索要点

FMAXM.Q 的核心搜索点是 NaN 处理。M 形式是 Zfa 版本,任一 NaN 都返回规范 NaN。

-0.0 与 +0.0 不相等地排序:-0.0 小于 +0.0。
该指令不使用 rm;它是选择操作而不是舍入算术。

常见使用场景

浮点比较

结合 «fmaxm.q f0, f1, f2 # f0 = IEEE 754-2019 max(f1,f2)» 等实际代码理解该场景。

数值计算

结合 «fmaxm.q f0, f1, f2 # f0 = IEEE 754-2019 max(f1,f2)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd:目标浮点寄存器,接收该格式的浮点结果。
  • rs1/rs2:源浮点寄存器;带 rm 的算术/舍入指令由 rm 或动态 frm 选择舍入模式。
语义检查
  • 确认操作数的浮点格式后缀(.H/.S/.D/.Q)符合数据宽度。
  • 确认是否需要检查 fflags 中的 NV、DZ、OF、UF、NX 等标志。

容易混淆 / 常见误区

与普通 FMIN/FMAX 不同,FMINM/FMAXM 在任一输入为 NaN 时返回规范 NaN。
信号 NaN 会设置 NV;quiet NaN 的处理取决于普通形式还是 M 形式。
-0.0 被认为小于 +0.0。

常见问题

FMAXM.Q 和 FMAX.Q 的主要差异是什么?

M 形式在任一输入为 NaN 时返回规范 NaN;普通形式在只有一个 NaN 时返回另一个非 NaN 操作数。

FMAXM.Q 会舍入吗?

不会。它从两个操作数中选择结果,不带 rm 舍入字段。