FNMSUB.Q 和 FMUL 后接加减有什么不同?
FNMSUB.Q 是融合操作,乘积不会先舍入成中间浮点结果;整个表达式只在最终按 rm 舍入一次。
四精度浮点负融合乘减:rd = -(rs1 * rs2) + rs3,融合操作只在最终按 rm 舍入一次。
FNMSUB.Q 使用 R4 型四寄存器格式执行 四精度浮点负融合乘减。rs1 与 rs2 的乘积不会先舍入或写回中间结果,而是与 rs3 组成一个融合表达式,最终按 rm 舍入一次并写入 rd。
展示 Q 扩展四精度 R4 融合乘加 指令的 ISA 可见流程:解析编码字段,读取浮点寄存器,执行 FNMSUB 语义并写回 rd。
机器码按 R4-type 字段切分;FNMSUB.Q 使用专用 major opcode 1001011,不是普通 OP-FP opcode。
默认示例 -(1.0 * 2.0) + 0.0 = -2.0 可精确核算;融合操作只在最终按 rm 舍入一次,因此示例 fflags 保持 0。
默认示例 -(1.0 * 2.0) + 0.0 = -2.0 可精确核算;融合操作只在最终按 rm 舍入一次,因此示例 fflags 保持 0。
该动画只展示 RISC-V Q 扩展的 ISA 可见 R4 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。
FNMSUB.Q 的学习重点是 R4 编码和 fused 语义:rs3 是真实第三个源寄存器,乘积与加/减项形成一个精确中间表达式,最后只舍入一次。
结合 «fnmsub.q f0, f1, f2, f3, rne # f0 = -(rs1 * rs2) + rs3» 等实际代码理解该场景。
结合 «fnmsub.q f0, f1, f2, f3, rne # f0 = -(rs1 * rs2) + rs3» 等实际代码理解该场景。
FNMSUB.Q 是融合操作,乘积不会先舍入成中间浮点结果;整个表达式只在最终按 rm 舍入一次。
它需要 rd、rs1、rs2、rs3 和 rm 字段,bits 31..27 存放 rs3,而不是普通 R-type 的 funct5。
会在适用情况下按官方浮点规则设置异常标志,例如非精确、上溢、下溢或无效操作;默认动画示例选择精确有限值,因此显示 fflags 保持 0。