]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
CPU tester fixes: FREM and FMOD use current rounding mode. FSCALE didn't round if...
authorToni Wilen <twilen@winuae.net>
Sun, 3 May 2020 16:00:27 +0000 (19:00 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 3 May 2020 16:00:27 +0000 (19:00 +0300)
softfloat/softfloat.cpp
softfloat/softfloat_fpsp.cpp

index cb12b9731b876fdf0e87b6cd9e10e9a948574108..801261d9107ef77346a2d1b1d1a67794b467d48b 100644 (file)
@@ -2976,8 +2976,8 @@ floatx80 floatx80_rem( floatx80 a, floatx80 b, uint64_t *q, flag *s, float_statu
         ++*q;
     }
     return
-    normalizeRoundAndPackFloatx80(
-                                  80, zSign, bExp + expDiff, aSig0, aSig1, status );
+    normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
+                                  zSign, bExp + expDiff, aSig0, aSig1, status );
     
 }
 #endif // End of modification
@@ -3070,8 +3070,8 @@ floatx80 floatx80_mod( floatx80 a, floatx80 b, uint64_t *q, flag *s, float_statu
         *q += qTemp;
     }
     return
-        normalizeRoundAndPackFloatx80(
-            80, zSign, bExp + expDiff, aSig0, aSig1, status );
+        normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
+            zSign, bExp + expDiff, aSig0, aSig1, status );
     
 }
 #endif // end of addition for Previous
@@ -3246,7 +3246,10 @@ floatx80 floatx80_scale(floatx80 a, floatx80 b, float_status *status)
         normalizeFloatx80Subnormal( aSig, &aExp, &aSig );
     }
     
-    if ( bExp < 0x3FFF ) return a;
+    if (bExp < 0x3FFF) {
+        return roundAndPackFloatx80(
+            status->floatx80_rounding_precision, aSign, aExp, aSig, 0, status);
+    }
     
     if ( 0x400F < bExp ) {
         aExp = bSign ? -0x6001 : 0xE000;
index 7753cf01dbf3d757dd2b085746f95e09c64c3f9e..d28111852e623b3297b5f0f50d4425745464556a 100644 (file)
@@ -625,7 +625,9 @@ floatx80 floatx80_cosh(floatx80 a, float_status *status)
        if (compact > 0x400CB167) {
                if (compact > 0x400CB2B3) {
                        RESET_PREC;
-                       return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, 0x8000, one_sig, 0, status);
+                       a =  roundAndPackFloatx80(status->floatx80_rounding_precision, 0, 0x8000, one_sig, 0, status);
+                       float_raise(float_flag_inexact, status);
+                       return a;
                } else {
                        fp0 = packFloatx80(0, aExp, aSig);
                        fp0 = floatx80_sub(fp0, float64_to_floatx80(LIT64(0x40C62D38D3D64634), status), status);
@@ -1608,7 +1610,9 @@ floatx80 floatx80_sinh(floatx80 a, float_status *status)
                if (compact > 0x400CB2B3) {
                        RESET_PREC;
                        
-                       return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, 0x8000, aSig, 0, status);
+                       a = roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, 0x8000, aSig, 0, status);
+                       float_raise(float_flag_inexact, status);
+                       return a;
                } else {
                        fp0 = floatx80_abs(a, status); // Y = |X|
                        fp0 = floatx80_sub(fp0, float64_to_floatx80(LIT64(0x40C62D38D3D64634), status), status); // (|X|-16381LOG2_LEAD)