fpu/softfloat: Replace float_class_msnan with parts_silence_nan
With a canonical representation of NaNs, we can silence an SNaN immediately rather than delay until the final format is known. Tested-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
f7e598e264
commit
0bcfbcbea5
2 changed files with 33 additions and 30 deletions
|
|
@ -138,6 +138,29 @@ static FloatParts parts_default_nan(float_status *status)
|
|||
};
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Returns a quiet NaN from a signalling NaN for the deconstructed
|
||||
| floating-point parts.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
static FloatParts parts_silence_nan(FloatParts a, float_status *status)
|
||||
{
|
||||
#ifdef NO_SIGNALING_NANS
|
||||
g_assert_not_reached();
|
||||
#elif defined(TARGET_HPPA)
|
||||
a.frac &= ~(1ULL << (DECOMPOSED_BINARY_POINT - 1));
|
||||
a.frac |= 1ULL << (DECOMPOSED_BINARY_POINT - 2);
|
||||
#else
|
||||
if (status->snan_bit_is_one) {
|
||||
return parts_default_nan(status);
|
||||
} else {
|
||||
a.frac |= 1ULL << (DECOMPOSED_BINARY_POINT - 1);
|
||||
}
|
||||
#endif
|
||||
a.cls = float_class_qnan;
|
||||
return a;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| The pattern for a default generated half-precision NaN.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue