FMAXM.S

RISC-V FMAXM.S 指令详解

指令手册R-type

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

指令语法

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

指令行为说明

FMAXM.S 是 Zfa 的单精度 IEEE 754-2019 maximum 操作:任一输入为 NaN 时结果为规范 NaN;否则返回数值较大的操作数。quiet NaN 不设置 NV,signaling NaN 设置 NV,且 -0.0 小于 +0.0。

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

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

rd
rs1
rs2
fmaxm.s
,
,
执行环境
FLEN=>=32 / fmt=S (00)
funct3: FMAXM(任一 NaN 为规范 NaN)
fflags: 示例 fflags 保持 0
31..27
26..25
24..20
19..15
14..12
11..7
6..0
00101
FMAXM
00
fmt=S
01100
rs2
01011
rs1
011
funct3=011
01010
rd
1010011
OP-FP
执行数据路径
instruction
0x28C5B553
opcode
1010011 -> OP-FP
funct5/fmt
00101 + S(00) -> FMAXM.S
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: 0x28C5B553
syntax : fmaxm.s 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 + F 扩展的 ISA 可见 OP-FP 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。

快速理解与检索要点

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

OP-FP opcode=1010011、funct5=00101、fmt=S(00) 和 funct3=011 共同识别 FMAXM.S;相对 FMAX.S,instruction bit 13 置 1。
任一 NaN 都写入规范 NaN;quiet NaN 不设置 NV,signaling NaN 设置 NV;-0.0 小于 +0.0。
当 FLEN 大于 32 时,S 格式源操作数必须是有效 NaN-boxed 值,否则按规范 S NaN 处理;S 格式写回也进行 NaN-boxing。
该指令不使用 rm;它是选择操作而不是舍入算术。

常见使用场景

浮点比较

结合 «fmaxm.s f10, f11, f12 ; IEEE 754-2019 max» 等实际代码理解该场景。

数值计算

结合 «fmaxm.s f10, f11, f12 ; IEEE 754-2019 max» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

与普通 FMIN/FMAX 不同,FMINM/FMAXM 在任一输入为 NaN 时返回规范 NaN。
quiet NaN 也使 M 形式写入规范 NaN,但不设置 NV;signaling NaN 写入规范 NaN 并设置 NV。
-0.0 被认为小于 +0.0。

常见问题

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

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

FMAXM.S 会舍入吗?

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