@ -41,6 +41,13 @@ these four paragraphs for those parts of this code that are retained.
# define SNAN_BIT_IS_ONE 0
# endif
# if defined(TARGET_XTENSA)
/* Define for architectures which deviate from IEEE in not supporting
* signaling NaNs ( so all NaNs are treated as quiet ) .
*/
# define NO_SIGNALING_NANS 1
# endif
/*----------------------------------------------------------------------------
| The pattern for a default generated half - precision NaN .
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
@ -127,6 +134,17 @@ typedef struct {
uint64_t high , low ;
} commonNaNT ;
# ifdef NO_SIGNALING_NANS
int float16_is_quiet_nan ( float16 a_ )
{
return float16_is_any_nan ( a_ ) ;
}
int float16_is_signaling_nan ( float16 a_ )
{
return 0 ;
}
# else
/*----------------------------------------------------------------------------
| Returns 1 if the half - precision floating - point value ` a ' is a quiet
| NaN ; otherwise returns 0.
@ -156,6 +174,7 @@ int float16_is_signaling_nan(float16 a_)
return ( ( ( a > > 9 ) & 0x3F ) = = 0x3E ) & & ( a & 0x1FF ) ;
# endif
}
# endif
/*----------------------------------------------------------------------------
| Returns a quiet NaN if the half - precision floating point value ` a ' is a
@ -217,6 +236,17 @@ static float16 commonNaNToFloat16(commonNaNT a STATUS_PARAM)
}
}
# ifdef NO_SIGNALING_NANS
int float32_is_quiet_nan ( float32 a_ )
{
return float32_is_any_nan ( a_ ) ;
}
int float32_is_signaling_nan ( float32 a_ )
{
return 0 ;
}
# else
/*----------------------------------------------------------------------------
| Returns 1 if the single - precision floating - point value ` a ' is a quiet
| NaN ; otherwise returns 0.
@ -246,6 +276,7 @@ int float32_is_signaling_nan( float32 a_ )
return ( ( ( a > > 22 ) & 0x1FF ) = = 0x1FE ) & & ( a & 0x003FFFFF ) ;
# endif
}
# endif
/*----------------------------------------------------------------------------
| Returns a quiet NaN if the single - precision floating point value ` a ' is a
@ -586,6 +617,17 @@ static float32 propagateFloat32MulAddNaN(float32 a, float32 b,
}
}
# ifdef NO_SIGNALING_NANS
int float64_is_quiet_nan ( float64 a_ )
{
return float64_is_any_nan ( a_ ) ;
}
int float64_is_signaling_nan ( float64 a_ )
{
return 0 ;
}
# else
/*----------------------------------------------------------------------------
| Returns 1 if the double - precision floating - point value ` a ' is a quiet
| NaN ; otherwise returns 0.
@ -619,6 +661,7 @@ int float64_is_signaling_nan( float64 a_ )
& & ( a & LIT64 ( 0x0007FFFFFFFFFFFF ) ) ;
# endif
}
# endif
/*----------------------------------------------------------------------------
| Returns a quiet NaN if the double - precision floating point value ` a ' is a
@ -773,6 +816,17 @@ static float64 propagateFloat64MulAddNaN(float64 a, float64 b,
}
}
# ifdef NO_SIGNALING_NANS
int floatx80_is_quiet_nan ( floatx80 a_ )
{
return floatx80_is_any_nan ( a_ ) ;
}
int floatx80_is_signaling_nan ( floatx80 a_ )
{
return 0 ;
}
# else
/*----------------------------------------------------------------------------
| Returns 1 if the extended double - precision floating - point value ` a ' is a
| quiet NaN ; otherwise returns 0. This slightly differs from the same
@ -816,6 +870,7 @@ int floatx80_is_signaling_nan( floatx80 a )
& & ( a . low = = aLow ) ;
# endif
}
# endif
/*----------------------------------------------------------------------------
| Returns a quiet NaN if the extended double - precision floating point value
@ -929,6 +984,17 @@ static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b STATUS_PARAM)
}
}
# ifdef NO_SIGNALING_NANS
int float128_is_quiet_nan ( float128 a_ )
{
return float128_is_any_nan ( a_ ) ;
}
int float128_is_signaling_nan ( float128 a_ )
{
return 0 ;
}
# else
/*----------------------------------------------------------------------------
| Returns 1 if the quadruple - precision floating - point value ` a ' is a quiet
| NaN ; otherwise returns 0.
@ -964,6 +1030,7 @@ int float128_is_signaling_nan( float128 a )
& & ( a . low | | ( a . high & LIT64 ( 0x00007FFFFFFFFFFF ) ) ) ;
# endif
}
# endif
/*----------------------------------------------------------------------------
| Returns a quiet NaN if the quadruple - precision floating point value ` a ' is