FADD.Q

RISC-V FADD.Q 指令详解

指令手册R-type

四精度浮点加法,OP-FP fmt=Q(11)。

指令语法

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

指令行为说明

FADD.Q 对两个四精度浮点源操作数执行加法,按 rm 字段选择的舍入模式或动态 frm 舍入,结果写入浮点寄存器 rd,并按 RISC-V 浮点规则记录 fflags。

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

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

rd
rs1
rs2
rm
fadd.q
,
,
,
执行环境
FLEN=128 / fmt=Q (11)
舍入: RNE 最近偶数
fflags: 示例 fflags 保持 0
31..27
26..25
24..20
19..15
14..12
11..7
6..0
00000
FADD
11
fmt=Q
01100
rs2
01011
rs1
000
rm
01010
rd
1010011
OP-FP
执行数据路径
instruction
0x06C58553
opcode
1010011 -> OP-FP
funct5/fmt
00000 + Q(11) -> FADD.Q
rm
000 -> RNE 最近偶数
rd/rs
fa0(f10) / fa1(f11) / fa2(f12)
read
1.5, 1.5
FP op
1.5 + 1.5 = 3.0
write
fa0(f10) = 3.0; 示例 fflags 保持 0
当前步骤

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

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

encoding: 0x06C58553
syntax : fadd.q fa0(f10), fa1(f11), fa2(f12), rne
result : fa0(f10) = 3.0; 示例 fflags 保持 0

H/Q 动画仅接受输入和结果都可精确核算的有限白名单示例;当前示例无需舍入,不设置浮点异常标志。NaN、inf、溢出、下溢或非精确路径见静态说明。

四精度计算视图
rs1
fa1(f11) = 1.5
rs2
fa2(f12) = 1.5
结果
1.5 + 1.5 = 3.0

H/Q 动画仅接受输入和结果都可精确核算的有限白名单示例;当前示例无需舍入,不设置浮点异常标志。NaN、inf、溢出、下溢或非精确路径见静态说明。

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

快速理解与检索要点

FADD.Q 属于 Q 扩展的四精度 OP-FP 算术指令。它解析 funct5=00000 与 fmt=Q(11),读取 f[rs1] 和 f[rs2],执行加法,按 rm/frm 舍入后写回 f[rd]。

fmt=Q(11) 选择四精度浮点格式;opcode 仍是 OP-FP 1010011。
rm 字段选择静态舍入模式,rm=111 时使用 frm 动态舍入模式;精确示例不改变数值,但字段仍参与编码。
非精确、上溢、下溢、无效操作等适用情况通过 fflags 累积记录;不要把它当作整数运算或条件码更新。
Q 扩展提供四精度格式;本页动画只演示 Q 格式操作数和结果在浮点寄存器中的 ISA 可见读写,不混入较窄格式转换。

常见使用场景

浮点算术

结合 «fadd.q f0, f1, f2, rne # f0 = f1+f2» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

结果和异常标志遵循 RISC-V 浮点/IEEE 754 规则;不要假设 NaN、无穷或舍入边界按整数加法处理。
源操作数必须满足对应浮点格式在 FLEN 寄存器中的 NaN-boxing 要求。

常见问题

FADD.Q 的 rm 操作数有什么作用?

rm 选择浮点舍入模式;rm=111 使用 frm 动态舍入。若结果可精确表示,舍入模式不会改变示例数值,但编码字段仍必须正确。

FADD.Q 会写整数寄存器或条件码吗?

FADD.Q 写回浮点寄存器 f[rd]。RISC-V 浮点异常通过 fflags 累积记录,不通过整数条件码报告。