fp: add floatXX_is_infinity(), floatXX_is_neg(), floatXX_is_zero()
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6050 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
1b2ad2ec7a
commit
c52ab6f585
@ -258,6 +258,21 @@ INLINE float32 float32_chs(float32 a)
|
||||
return -a;
|
||||
}
|
||||
|
||||
INLINE float32 float32_is_infinity(float32 a)
|
||||
{
|
||||
return fpclassify(a) == FP_INFINITE;
|
||||
}
|
||||
|
||||
INLINE float32 float32_is_neg(float32 a)
|
||||
{
|
||||
return a < 0.0;
|
||||
}
|
||||
|
||||
INLINE float32 float32_is_zero(float32 a)
|
||||
{
|
||||
return fpclassify(a) == FP_ZERO;
|
||||
}
|
||||
|
||||
INLINE float32 float32_scalbn(float32 a, int n)
|
||||
{
|
||||
return scalbnf(a, n);
|
||||
@ -350,6 +365,21 @@ INLINE float64 float64_chs(float64 a)
|
||||
return -a;
|
||||
}
|
||||
|
||||
INLINE float64 float64_is_infinity(float64 a)
|
||||
{
|
||||
return fpclassify(a) == FP_INFINITE;
|
||||
}
|
||||
|
||||
INLINE float64 float64_is_neg(float64 a)
|
||||
{
|
||||
return a < 0.0;
|
||||
}
|
||||
|
||||
INLINE float64 float64_is_zero(float64 a)
|
||||
{
|
||||
return fpclassify(a) == FP_ZERO;
|
||||
}
|
||||
|
||||
INLINE float64 float64_scalbn(float64 a, int n)
|
||||
{
|
||||
return scalbn(a, n);
|
||||
@ -437,6 +467,21 @@ INLINE floatx80 floatx80_chs(floatx80 a)
|
||||
return -a;
|
||||
}
|
||||
|
||||
INLINE floatx80 floatx80_is_infinity(floatx80 a)
|
||||
{
|
||||
return fpclassify(a) == FP_INFINITE;
|
||||
}
|
||||
|
||||
INLINE floatx80 floatx80_is_neg(floatx80 a)
|
||||
{
|
||||
return a < 0.0;
|
||||
}
|
||||
|
||||
INLINE floatx80 floatx80_is_zero(floatx80 a)
|
||||
{
|
||||
return fpclassify(a) == FP_ZERO;
|
||||
}
|
||||
|
||||
INLINE floatx80 floatx80_scalbn(floatx80 a, int n)
|
||||
{
|
||||
return scalbnl(a, n);
|
||||
|
@ -281,6 +281,21 @@ INLINE float32 float32_chs(float32 a)
|
||||
return make_float32(float32_val(a) ^ 0x80000000);
|
||||
}
|
||||
|
||||
INLINE int float32_is_infinity(float32 a)
|
||||
{
|
||||
return (float32_val(a) & 0x7fffffff) == 0x7ff80000;
|
||||
}
|
||||
|
||||
INLINE int float32_is_neg(float32 a)
|
||||
{
|
||||
return float32_val(a) >> 31;
|
||||
}
|
||||
|
||||
INLINE int float32_is_zero(float32 a)
|
||||
{
|
||||
return (float32_val(a) & 0x7fffffff) == 0;
|
||||
}
|
||||
|
||||
#define float32_zero make_float32(0)
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
@ -335,6 +350,21 @@ INLINE float64 float64_chs(float64 a)
|
||||
return make_float64(float64_val(a) ^ 0x8000000000000000LL);
|
||||
}
|
||||
|
||||
INLINE int float64_is_infinity(float64 a)
|
||||
{
|
||||
return (float64_val(a) & 0x7fffffffffffffffLL ) == 0x7ff0000000000000LL;
|
||||
}
|
||||
|
||||
INLINE int float64_is_neg(float64 a)
|
||||
{
|
||||
return float64_val(a) >> 63;
|
||||
}
|
||||
|
||||
INLINE int float64_is_zero(float64 a)
|
||||
{
|
||||
return (float64_val(a) & 0x7fffffffffffffffLL) == 0;
|
||||
}
|
||||
|
||||
#define float64_zero make_float64(0)
|
||||
|
||||
#ifdef FLOATX80
|
||||
@ -384,6 +414,21 @@ INLINE floatx80 floatx80_chs(floatx80 a)
|
||||
return a;
|
||||
}
|
||||
|
||||
INLINE int floatx80_is_infinity(floatx80 a)
|
||||
{
|
||||
return (a.high & 0x7fff) == 0x7fff && a.low == 0;
|
||||
}
|
||||
|
||||
INLINE int floatx80_is_neg(floatx80 a)
|
||||
{
|
||||
return a.high >> 15;
|
||||
}
|
||||
|
||||
INLINE int floatx80_is_zero(floatx80 a)
|
||||
{
|
||||
return (a.high & 0x7fff) == 0 && a.low == 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef FLOAT128
|
||||
@ -435,6 +480,21 @@ INLINE float128 float128_chs(float128 a)
|
||||
return a;
|
||||
}
|
||||
|
||||
INLINE int float128_is_infinity(float128 a)
|
||||
{
|
||||
return (a.high & 0x7fffffffffffffffLL) == 0x7fff000000000000LL && a.low == 0;
|
||||
}
|
||||
|
||||
INLINE int float128_is_neg(float128 a)
|
||||
{
|
||||
return a.high >> 63;
|
||||
}
|
||||
|
||||
INLINE int float128_is_zero(float128 a)
|
||||
{
|
||||
return (a.high & 0x7fffffffffffffffLL) == 0 && a.low == 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_SOFTFLOAT */
|
||||
|
Loading…
Reference in New Issue
Block a user