首页/指令库/FSGNJN-D
FSGNJN.D

RISC-V FSGNJN.D 指令详解

指令手册R-type

结果的指数和尾数字段来自 rs1,符号位来自 rs2 符号的反。

指令语法

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

指令行为说明

FSGNJN.D 只重组 双精度 浮点编码的符号位:指数和尾数字段来自 rs1,符号位来自 rs2 符号的反。它不执行浮点算术、不舍入、不设置浮点异常标志,也不规范化 NaN。

FSGNJN.D 指令解析与执行动画

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

rd
rs1
rs2
fsgnjn.d
,
,
执行环境
FLEN=64 / fmt=D (01)
funct3: 反转 rs2 符号
fflags: 不会设置 fflags
31..27
26..25
24..20
19..15
14..12
11..7
6..0
00100
FSGNJN
01
fmt=D
01100
rs2
01011
rs1
001
funct3=001
01010
rd
1010011
OP-FP
执行数据路径
instruction
0x22C59553
opcode
1010011 -> OP-FP
funct5/fmt
00100 + D(01) -> FSGNJN.D
funct3
001 -> 反转 rs2 符号
rd/rs
fa0(f10) / fa1(f11) / fa2(f12)
read
3.5, -2.0
FP op
sign=~sign(rs2), magnitude=rs1 -> 3.5
write
fa0(f10) = 3.5; 不会设置 fflags
当前步骤

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

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

encoding: 0x22C59553
syntax : fsgnjn.d fa0(f10), fa1(f11), fa2(f12)
result : fa0(f10) = 3.5; 不会设置 fflags

符号注入只重组浮点编码的符号位:结果的指数和尾数字段来自 rs1,符号位按当前指令规则来自 rs2 或 rs1/rs2 符号关系;不舍入、不规范化 NaN。

双精度计算视图
rs1
fa1(f11) = 3.5
rs2
fa2(f12) = -2.0
结果
sign=~sign(rs2), magnitude=rs1 -> 3.5
rs1 sign
0
rs2 sign
1
结果符号
~1 = 0
其余位
指数/尾数来自 rs1

符号注入只重组浮点编码的符号位:结果的指数和尾数字段来自 rs1,符号位按当前指令规则来自 rs2 或 rs1/rs2 符号关系;不舍入、不规范化 NaN。

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

快速理解与检索要点

FSGNJN.D 是 D 扩展的 OP-FP 符号注入指令。学习重点是 funct5/fmt/funct3 如何识别 FSGNJN.D,以及结果只替换符号位、不触发舍入或 fflags。

OP-FP opcode=1010011,funct5=00100,fmt=D,funct3=001 共同识别 FSGNJN.D。
结果的指数和尾数字段来自 rs1;符号位按当前指令规则由 rs2 或 rs1/rs2 符号关系产生。
该类指令不使用 rm,不设置 fflags,也不会规范化 NaN。
rs2=rs1 时可表达常见 FNEG 伪指令语义;页面动画只展示官方位级规则。

常见使用场景

符号操作

结合 «fsgnjn.d f0, f1, f1 # FNEG.D: f0 = -f1 (sign flip only)» 等实际代码理解该场景。

浮点位操作

结合 «fsgnjn.d f0, f1, f1 # FNEG.D: f0 = -f1 (sign flip only)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

这是位级符号操作,不是浮点加减、比较或数值转换。
结果的指数和尾数字段来自 rs1;不要把 rs2 当作完整数值源操作数。
不会设置 fflags,也不会把 NaN 规范化或改写 payload。
rs2=rs1 常用于 FNEG 伪指令语义。

常见问题

FSGNJN.D 会改变 NaN payload 吗?

不会。除符号位按规则变化外,rs1 的指数和尾数字段保持;该指令不会规范化 NaN。

FSGNJN.D 会设置 fflags 吗?

不会。它是浮点寄存器中的位级符号操作,不执行舍入算术或异常路径。