sim: Allow toggling of quiet NaN-bit semantics
authorFaraz Shahbazker <fshahbazker@wavecomp.com>
Wed, 2 Feb 2022 10:17:22 +0000 (11:17 +0100)
committerMike Frysinger <vapier@gentoo.org>
Sat, 5 Feb 2022 00:37:25 +0000 (19:37 -0500)
commitbf484e93483776072291c5cad2e289567d74c818
treec835425923f43be579228b97ca2b5b0688887e54
parenteb06e60a982e3903161252edf8fb8ae0c018c467
sim: Allow toggling of quiet NaN-bit semantics

IEEE754-1985 specifies the top bit of the mantissa as an indicator
of signalling vs. quiet NaN, but does not define the precise semantics.
Most architectures treat this bit as indicating quiet NaN, but legacy
(pre-R6) MIPS goes the other way and treats it as signalling NaN.

This used to be controlled by a macro that was only defined for MIPS.
This patch replaces the macro with a variable to track the current
semantics of the NaN bit and allows differentiation between older
(pre-R6) and and newer MIPS cores.

2022-02-01  Faraz Shahbazker  <fshahbazker@wavecomp.com>

sim/common/ChangeLog:
* sim-fpu.c (_sim_fpu): New.
(pack_fpu, unpack_fpu): Allow reversal of quiet NaN semantics.
* sim-fpu.h (sim_fpu_state): New struct.
(_sim_fpu): New extern.
(sim_fpu_quiet_nan_inverted): New define.

sim/mips/ChangeLog:
* cp1.h (fcsr_NAN2008_mask, fcsr_NAN2008_shift): New.
* mips.igen (check_fpu): Select default quiet NaN mode
for legacy MIPS.
* sim-main.h (SIM_QUIET_NAN_NEGATED): Remove.
sim/common/sim-fpu.c
sim/common/sim-fpu.h
sim/mips/cp1.h
sim/mips/mips.igen
sim/mips/sim-main.h