[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 00/19] softfloat: Clean up NaN handling
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 00/19] softfloat: Clean up NaN handling |
Date: |
Thu, 10 May 2018 17:43:26 -0700 |
This is intended to address Peter's comments wrt Alex's float-to-float
conversion patches. In particular, the handling of NaNs therein, where
some SNaN get converted to Inf instead of the appropriate QNaN.
I canonicalize NaNs within FloatParts much like we do with the original
softfpu commonNaNT. With this, a couple of new specialize functions
allows me to remove the float_class_dnan/float_class_msnan placeholders.
This is based on some of Alex's work, which includes both the check-tcg
and the float-to-float patches. My guess is that in the end we should
order this first. But writing it this way was easier, for testing.
The full tree is
git://github.com/rth7680/qemu.git fpu-snan
with these patches beginning at the merge at 537ab46101f5.
r~
Richard Henderson (19):
fpu/softfloat: Merge NO_SIGNALING_NANS definitions
fpu/softfloat: Split floatXX_silence_nan from floatXX_maybe_silence_nan
fpu/softfloat: Move softfloat-specialize.h below FloatParts definition
fpu/softfloat: Canonicalize NaN fraction
fpu/softfloat: Introduce parts_is_snan_frac
fpu/softfloat: Replace float_class_dnan with parts_default_nan
fpu/softfloat: Replace float_class_msnan with parts_silence_nan
target/arm: Use floatX_silence_nan when we have already checked for SNaN
target/arm: Remove floatX_maybe_silence_nan from conversions
target/hppa: Remove floatX_maybe_silence_nan from conversions
target/m68k: Use floatX_silence_nan when we have already checked for SNaN
target/mips: Remove floatX_maybe_silence_nan from conversions
target/riscv: Remove floatX_maybe_silence_nan from conversions
target/s390x: Remove floatX_maybe_silence_nan from conversions
fpu/softfloat: Use float*_silence_nan in propagateFloat*NaN
fpu/softfloat: Remove floatX_maybe_silence_nan
fpu/softfloat: Introduce SNAN_BIT_IS_ONE
fpu/softfloat: Pass FloatClass to pickNaN
fpu/softfloat: Pass FloatClass to pickNaNMulAdd
fpu/softfloat-specialize.h | 621 +++++++++++++++++++---------------
include/fpu/softfloat-types.h | 1 +
include/fpu/softfloat.h | 14 +-
target/mips/cpu.h | 4 +-
fpu/softfloat.c | 162 ++++-----
target/arm/helper-a64.c | 7 +-
target/arm/helper.c | 24 +-
target/hppa/cpu.c | 1 -
target/hppa/op_helper.c | 2 -
target/m68k/softfloat.c | 3 +-
target/mips/msa_helper.c | 4 -
target/mips/op_helper.c | 2 -
target/mips/translate_init.c | 4 +-
target/ppc/fpu_helper.c | 1 -
target/riscv/fpu_helper.c | 6 +-
target/s390x/fpu_helper.c | 12 +-
target/sh4/cpu.c | 1 -
target/unicore32/cpu.c | 2 -
18 files changed, 430 insertions(+), 441 deletions(-)
--
2.17.0