首页/指令库/FSGNJX-S
FSGNJX.S

RISC-V FSGNJX.S 指令详解

指令手册R-type

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

指令语法

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

指令行为说明

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

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

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

rd
rs1
rs2
fsgnjx.s
,
,
执行环境
FLEN=32 / fmt=S (00)
funct3: rs1/rs2 符号异或
fflags: 不会设置 fflags
31..27
26..25
24..20
19..15
14..12
11..7
6..0
00100
FSGNJX
00
fmt=S
01100
rs2
01011
rs1
010
funct3=010
01010
rd
1010011
OP-FP
执行数据路径
instruction
0x20C5A553
opcode
1010011 -> OP-FP
funct5/fmt
00100 + S(00) -> FSGNJX.S
funct3
010 -> rs1/rs2 符号异或
rd/rs
fa0(f10) / fa1(f11) / fa2(f12)
read
3.5, -2.0
FP op
sign=sign(rs1)^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: 0x20C5A553
syntax : fsgnjx.s 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(rs1)^sign(rs2), magnitude=rs1 -> -3.5
rs1 sign
0
rs2 sign
1
结果符号
0 xor 1 = 1
其余位
指数/尾数来自 rs1

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

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

快速理解与检索要点

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

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

常见使用场景

符号操作

结合 «fsgnjx.s f0, f1, f1 # FABS.S: f0 = |f1|» 等实际代码理解该场景。

浮点位操作

结合 «fsgnjx.s f0, f1, f1 # FABS.S: f0 = |f1|» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

FSGNJX.S 会改变 NaN payload 吗?

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

FSGNJX.S 会设置 fflags 吗?

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