Does FSGNJ.H change the NaN payload?
It does not canonicalize NaNs; except for the sign bit rule, the remaining rs1 bits are preserved.
The result keeps rs1 magnitude bits and takes its sign from the rs2 sign.
FSGNJ.H only recombines the sign bit of a half-precision floating-point encoding: exponent and significand fields come from rs1, while the sign is produced from the rs2 sign. It performs no floating-point arithmetic, does not round, sets no floating-point exception flags, and does not canonicalize NaNs.
FSGNJ.H answers searches such as why floating negate/absolute/copy does not raise exceptions. It only manipulates sign-bit information and leaves rs1 exponent and significand bits unchanged.
Understand this scenario with real code like «fsgnj.h f10, f11, f12 ; f10 = |f11| with sign of f12».
Understand this scenario with real code like «fsgnj.h f10, f11, f12 ; f10 = |f11| with sign of f12».
It does not canonicalize NaNs; except for the sign bit rule, the remaining rs1 bits are preserved.
No. It is a bit-level sign operation inside floating-point registers.