]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Softfloat fix.
authorToni Wilen <twilen@winuae.net>
Sun, 7 May 2017 12:00:53 +0000 (15:00 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 7 May 2017 12:00:53 +0000 (15:00 +0300)
softfloat/softfloat-specialize.h
softfloat/softfloat.cpp

index 391e8a84bc28c5c087dfe4cbd2d4e8b596dbb492..4dd65a205c271eddd12f02ca5bdf3cefaa491919 100644 (file)
@@ -303,8 +303,11 @@ static inline commonNaNT floatx80ToCommonNaN( floatx80 a, float_status *status )
 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;
 }
 
@@ -316,11 +319,13 @@ static inline floatx80 commonNaNToFloatx80(commonNaNT a, float_status *status)
 
 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 );
@@ -328,6 +333,7 @@ static inline floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b, float_statu
     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 );
index ed717cadcbfd508153a3b204c32795664d091c48..ae7b9d84397ea434a264af26168080fbd6b675e5 100644 (file)
@@ -1679,7 +1679,6 @@ floatx80 float32_to_floatx80_allowunnormal(float32 a , float_status *status)
     aExp = extractFloat32Exp(a);
     aSign = extractFloat32Sign(a);
     if (aExp == 0xFF) {
-               aSig |= 0x00800000;
         return packFloatx80( aSign, 0x7FFF, ( (uint64_t) aSig )<<40 );
     }
     if (aExp == 0) {
@@ -1733,11 +1732,11 @@ floatx80 float64_to_floatx80_allowunnormal( float64 a, float_status *status )
     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(