softfloat: add float{x80,128}_maybe_silence_nan()
Add float{x80,128}_maybe_silence_nan() functions, they will be need by propagateFloat{x80,128}NaN(). Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
93ae1c6fea
commit
f6a7d92aed
|
@ -479,6 +479,29 @@ int floatx80_is_signaling_nan( floatx80 a )
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns a quiet NaN if the extended double-precision floating point value
|
||||||
|
| `a' is a signaling NaN; otherwise returns `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
floatx80 floatx80_maybe_silence_nan( floatx80 a )
|
||||||
|
{
|
||||||
|
if (floatx80_is_signaling_nan(a)) {
|
||||||
|
#if SNAN_BIT_IS_ONE
|
||||||
|
# if defined(TARGET_MIPS)
|
||||||
|
a.low = floatx80_default_nan_low;
|
||||||
|
a.high = floatx80_default_nan_high;
|
||||||
|
# else
|
||||||
|
# error Rules for silencing a signaling NaN are target-specific
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
a.low |= LIT64( 0xC000000000000000 );
|
||||||
|
return a;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns the result of converting the extended double-precision floating-
|
| Returns the result of converting the extended double-precision floating-
|
||||||
| point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the
|
| point NaN `a' to the canonical NaN format. If `a' is a signaling NaN, the
|
||||||
|
@ -611,6 +634,29 @@ int float128_is_signaling_nan( float128 a )
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
| Returns a quiet NaN if the quadruple-precision floating point value `a' is
|
||||||
|
| a signaling NaN; otherwise returns `a'.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
float128 float128_maybe_silence_nan( float128 a )
|
||||||
|
{
|
||||||
|
if (float128_is_signaling_nan(a)) {
|
||||||
|
#if SNAN_BIT_IS_ONE
|
||||||
|
# if defined(TARGET_MIPS)
|
||||||
|
a.low = float128_default_nan_low;
|
||||||
|
a.high = float128_default_nan_high;
|
||||||
|
# else
|
||||||
|
# error Rules for silencing a signaling NaN are target-specific
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
a.high |= LIT64( 0x0000800000000000 );
|
||||||
|
return a;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Returns the result of converting the quadruple-precision floating-point NaN
|
| Returns the result of converting the quadruple-precision floating-point NaN
|
||||||
| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
|
| `a' to the canonical NaN format. If `a' is a signaling NaN, the invalid
|
||||||
|
|
|
@ -439,6 +439,7 @@ int floatx80_le_quiet( floatx80, floatx80 STATUS_PARAM );
|
||||||
int floatx80_lt_quiet( floatx80, floatx80 STATUS_PARAM );
|
int floatx80_lt_quiet( floatx80, floatx80 STATUS_PARAM );
|
||||||
int floatx80_is_quiet_nan( floatx80 );
|
int floatx80_is_quiet_nan( floatx80 );
|
||||||
int floatx80_is_signaling_nan( floatx80 );
|
int floatx80_is_signaling_nan( floatx80 );
|
||||||
|
floatx80 floatx80_maybe_silence_nan( floatx80 );
|
||||||
floatx80 floatx80_scalbn( floatx80, int STATUS_PARAM );
|
floatx80 floatx80_scalbn( floatx80, int STATUS_PARAM );
|
||||||
|
|
||||||
INLINE floatx80 floatx80_abs(floatx80 a)
|
INLINE floatx80 floatx80_abs(floatx80 a)
|
||||||
|
@ -505,6 +506,7 @@ int float128_compare( float128, float128 STATUS_PARAM );
|
||||||
int float128_compare_quiet( float128, float128 STATUS_PARAM );
|
int float128_compare_quiet( float128, float128 STATUS_PARAM );
|
||||||
int float128_is_quiet_nan( float128 );
|
int float128_is_quiet_nan( float128 );
|
||||||
int float128_is_signaling_nan( float128 );
|
int float128_is_signaling_nan( float128 );
|
||||||
|
float128 float128_maybe_silence_nan( float128 );
|
||||||
float128 float128_scalbn( float128, int STATUS_PARAM );
|
float128 float128_scalbn( float128, int STATUS_PARAM );
|
||||||
|
|
||||||
INLINE float128 float128_abs(float128 a)
|
INLINE float128 float128_abs(float128 a)
|
||||||
|
|
Loading…
Reference in New Issue