softfloat-native: fix *nan()

Fix float64_is_nan()
Fix floatx80_is_signaling_nan()
Add floatx80_is_nan()

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6049 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
aurel32 2008-12-15 17:14:12 +00:00
parent 3b27fc36e3
commit 1b2ad2ec7a
2 changed files with 15 additions and 1 deletions

View file

@ -431,7 +431,7 @@ int float64_is_nan( float64 a1 )
u.f = a1;
a = u.i;
return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );
return ( LIT64( 0xFFF0000000000000 ) < (bits64) ( a<<1 ) );
}
@ -505,6 +505,19 @@ int floatx80_compare_quiet( floatx80 a, floatx80 b STATUS_PARAM )
}
}
int floatx80_is_signaling_nan( floatx80 a1)
{
floatx80u u;
uint64_t aLow;
u.f = a1;
aLow = u.i.low & ~ LIT64( 0x4000000000000000 );
return
( ( u.i.high & 0x7FFF ) == 0x7FFF )
&& (bits64) ( aLow<<1 )
&& ( u.i.low == aLow );
}
int floatx80_is_nan( floatx80 a1 )
{
floatx80u u;
u.f = a1;

View file

@ -425,6 +425,7 @@ INLINE int floatx80_unordered( floatx80 a, floatx80 b STATUS_PARAM)
int floatx80_compare( floatx80, floatx80 STATUS_PARAM );
int floatx80_compare_quiet( floatx80, floatx80 STATUS_PARAM );
int floatx80_is_signaling_nan( floatx80 );
int floatx80_is_nan( floatx80 );
INLINE floatx80 floatx80_abs(floatx80 a)
{