]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Softfloat FNEG, FABS infinity fix.
authorToni Wilen <twilen@winuae.net>
Sun, 10 Jun 2018 20:37:01 +0000 (23:37 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 10 Jun 2018 20:37:01 +0000 (23:37 +0300)
softfloat/softfloat.cpp

index 8f8e0197b6b2abd6a313ec575c0a2d27e055d5ca..a460dd2150eecc59407a55ff86f56d19bd517974 100644 (file)
@@ -3291,8 +3291,10 @@ floatx80 floatx80_abs(floatx80 a, float_status *status)
     aSig = extractFloatx80Frac(a);
     aExp = extractFloatx80Exp(a);
     
-    if ( aExp == 0x7FFF && (uint64_t) ( aSig<<1 ) ) {
-        return propagateFloatx80NaNOneArg( a, status );
+    if ( aExp == 0x7FFF ) {
+        if ( (uint64_t) ( aSig<<1 ) )
+            return propagateFloatx80NaNOneArg( a, status );
+        return packFloatx80( 0, 0x7FFF, floatx80_default_infinity_low );
     }
     
     if ( aExp == 0 ) {
@@ -3321,13 +3323,15 @@ floatx80 floatx80_neg(floatx80 a, float_status *status)
     aExp = extractFloatx80Exp(a);
     aSign = extractFloatx80Sign(a);
     
-    if ( aExp == 0x7FFF && (uint64_t) ( aSig<<1 ) ) {
-        return propagateFloatx80NaNOneArg( a, status );
+    if ( aExp == 0x7FFF ) {
+        if ( (uint64_t) ( aSig<<1 ) )
+            return propagateFloatx80NaNOneArg( a, status );
+        return packFloatx80 ( !aSign, 0x7FFF, floatx80_default_infinity_low );
     }
     
-    aSign = !aSign;
-    
-    if ( aExp == 0 ) {
+       aSign = !aSign;
+
+       if ( aExp == 0 ) {
         if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );
         normalizeFloatx80Subnormal( aSig, &aExp, &aSig );
     }