static inline floatx80 commonNaNToFloatx80(commonNaNT a, float_status *status)
{
floatx80 z;
+#ifdef SOFTFLOAT_68K
+ z.low = LIT64( 0x4000000000000000 ) | ( a.high>>1 );
+#else
z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );
- z.high = ( ( (int16_t) a.sign )<<15 ) | 0x7FFF;
+#endif z.high = ( ( (int16_t) a.sign )<<15 ) | 0x7FFF;
return z;
}
static inline floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b, float_status *status )
{
- flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;
+ flag aIsNaN, aIsSignalingNaN, bIsSignalingNaN;
+#ifndef SOFTFLOAT_68K
+ flag bIsNaN;
+#endif
- aIsNaN = floatx80_is_nan( a );
+ aIsNaN = floatx80_is_nan( a );
aIsSignalingNaN = floatx80_is_signaling_nan( a );
- bIsNaN = floatx80_is_nan( b );
bIsSignalingNaN = floatx80_is_signaling_nan( b );
#ifdef SOFTFLOAT_68K
a.low |= LIT64( 0x4000000000000000 );
if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_signaling, status );
return aIsNaN ? a : b;
#else
+ bIsNaN = floatx80_is_nan( b );
a.low |= LIT64( 0xC000000000000000 );
b.low |= LIT64( 0xC000000000000000 );
if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_signaling, status );
aExp = extractFloat32Exp(a);
aSign = extractFloat32Sign(a);
if (aExp == 0xFF) {
- aSig |= 0x00800000;
return packFloatx80( aSign, 0x7FFF, ( (uint64_t) aSig )<<40 );
}
if (aExp == 0) {
aExp = extractFloat64Exp( a );
aSign = extractFloat64Sign( a );
if ( aExp == 0x7FF ) {
- return packFloatx80( aSign, 0x7FFF, ( aSig | LIT64( 0x0010000000000000 ) )<<11 );
+ return packFloatx80( aSign, 0x7FFF, aSig<<11 );
}
if ( aExp == 0 ) {
if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );
- return packFloatx80( aSign, 0x3C01, aSig<<11);
+ return packFloatx80( aSign, 0x3C01, aSig<<11 );
}
return
packFloatx80(