FMADD.H 和 FMUL 后接加减有什么不同?
FMADD.H 是融合操作,乘积不会先舍入成中间浮点结果;整个表达式只在最终按 rm 舍入一次。
半精度浮点融合乘加:rd = (rs1 * rs2) + rs3,融合操作只在最终按 rm 舍入一次。
FMADD.H 使用 R4 型四寄存器格式执行 半精度浮点融合乘加。rs1 与 rs2 的乘积不会先舍入或写回中间结果,而是与 rs3 组成一个融合表达式,最终按 rm 舍入一次并写入 rd。
展示 Zfh 扩展半精度 R4 融合乘加 指令的 ISA 可见流程:解析编码字段,读取浮点寄存器,执行 FMADD 语义并写回 rd。
rm 可留空:按汇编默认 dyn 编码,并使用下方 fcsr.frm。
机器码按 R4-type 字段切分;FMADD.H 使用专用 major opcode 1000011,不是普通 OP-FP opcode。
默认示例 (1.5 * 2.0) + 0.5 = 3.5 可精确核算;融合操作只在最终按 rm 舍入一次,因此示例 fflags 保持 0。
默认示例 (1.5 * 2.0) + 0.5 = 3.5 可精确核算;融合操作只在最终按 rm 舍入一次,因此示例 fflags 保持 0。
假定扩展可用、FS 已启用、输入已正确 NaN-boxed、初始 fflags=0。仅接受非零有限精确白名单输入和非零白名单结果;零与舍入/异常边界不在动画范围内。同一源寄存器须有同一初始值;rd 可与源重叠,f0 可正常写回。步骤是教学视图。
该动画只展示 RISC-V Zfh 扩展的 ISA 可见 R4 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。
FMADD.H 将 rs1×rs2 与 rs3 相加,整个表达式仅在最后舍入一次;rs3 是独立编码的第三个源寄存器。
结合 «fmadd.h f0, f1, f2, f3, rne # f1=1.5, f2=2, f3=0.5 -> f0=3.5» 等实际代码理解该场景。
结合 «fmadd.h f0, f1, f2, f3, rne # f1=1.5, f2=2, f3=0.5 -> f0=3.5» 等实际代码理解该场景。
FMADD.H 是融合操作,乘积不会先舍入成中间浮点结果;整个表达式只在最终按 rm 舍入一次。
它需要 rd、rs1、rs2、rs3 和 rm 字段,bits 31..27 存放 rs3,而不是普通 R-type 的 funct5。
适用的 NV、OF、UF、NX 会累积到 fflags;精确教学示例假定初始 fflags=0,因此不新增标志。