--- hatari/src/cpu/softfloat/softfloat_fpsp.c 2019/04/09 08:57:58 1.1 +++ hatari/src/cpu/softfloat/softfloat_fpsp.c 2019/04/09 08:59:13 1.1.1.2 @@ -92,9 +92,7 @@ floatx80 floatx80_acos(floatx80 a, float } } else { // |X| > 1 float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } } // |X| < 1 @@ -152,9 +150,7 @@ floatx80 floatx80_asin(floatx80 a, float return floatx80_move(a, status); } else { // |X| > 1 float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } } // |X| < 1 @@ -369,9 +365,7 @@ floatx80 floatx80_atanh(floatx80 a, floa return packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low); } else { // |X| > 1 float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } } // |X| < 1 @@ -417,9 +411,7 @@ floatx80 floatx80_cos(floatx80 a, float_ if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } if (aExp == 0 && aSig == 0) { @@ -619,7 +611,7 @@ floatx80 floatx80_cosh(floatx80 a, float if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return packFloatx80(0, aExp, aSig); } if (aExp == 0 && aSig == 0) { @@ -687,7 +679,7 @@ floatx80 floatx80_etox(floatx80 a, float if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign) return packFloatx80(0, 0, 0); - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -822,7 +814,7 @@ floatx80 floatx80_etoxm1(floatx80 a, flo if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign) return packFloatx80(aSign, one_exp, one_sig); - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -1003,9 +995,9 @@ floatx80 floatx80_log10(floatx80 a, floa aSign = extractFloatx80Sign(a); if (aExp == 0x7FFF) { - if ((uint64_t) (aSig<<1)) propagateFloatx80NaNOneArg(a, status); + if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign == 0) - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -1015,9 +1007,7 @@ floatx80 floatx80_log10(floatx80 a, floa if (aSign) { float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } SET_PREC; @@ -1051,9 +1041,9 @@ floatx80 floatx80_log2(floatx80 a, float aSign = extractFloatx80Sign(a); if (aExp == 0x7FFF) { - if ((uint64_t) (aSig<<1)) propagateFloatx80NaNOneArg(a, status); + if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign == 0) - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0) { @@ -1066,9 +1056,7 @@ floatx80 floatx80_log2(floatx80 a, float if (aSign) { float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } SET_PREC; @@ -1109,9 +1097,9 @@ floatx80 floatx80_logn(floatx80 a, float aSign = extractFloatx80Sign(a); if (aExp == 0x7FFF) { - if ((uint64_t) (aSig<<1)) propagateFloatx80NaNOneArg(a, status); + if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign == 0) - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } adjk = 0; @@ -1135,9 +1123,7 @@ floatx80 floatx80_logn(floatx80 a, float if (aSign) { float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } SET_PREC; @@ -1244,14 +1230,12 @@ floatx80 floatx80_lognp1(floatx80 a, flo aSign = extractFloatx80Sign(a); if (aExp == 0x7FFF) { - if ((uint64_t) (aSig<<1)) propagateFloatx80NaNOneArg(a, status); + if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign) { float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -1261,12 +1245,10 @@ floatx80 floatx80_lognp1(floatx80 a, flo if (aSign && aExp >= one_exp) { if (aExp == one_exp && aSig == one_sig) { float_raise(float_flag_divbyzero, status); - packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low); + return packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low); } float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } if (aExp < 0x3f99 || (aExp == 0x3f99 && aSig == one_sig)) { // <= min threshold @@ -1409,9 +1391,7 @@ floatx80 floatx80_sin(floatx80 a, float_ if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } if (aExp == 0 && aSig == 0) { @@ -1612,7 +1592,7 @@ floatx80 floatx80_sinh(floatx80 a, float if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); - return packFloatx80(aSign, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -1687,9 +1667,7 @@ floatx80 floatx80_tan(floatx80 a, float_ if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); float_raise(float_flag_invalid, status); - a.low = floatx80_default_nan_low; - a.high = floatx80_default_nan_high; - return a; + return floatx80_default_nan(status); } if (aExp == 0 && aSig == 0) { @@ -1962,7 +1940,7 @@ floatx80 floatx80_tentox(floatx80 a, flo if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign) return packFloatx80(0, 0, 0); - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) { @@ -2079,7 +2057,7 @@ floatx80 floatx80_twotox(floatx80 a, flo if (aExp == 0x7FFF) { if ((uint64_t) (aSig<<1)) return propagateFloatx80NaNOneArg(a, status); if (aSign) return packFloatx80(0, 0, 0); - return packFloatx80(0, 0x7FFF, floatx80_default_infinity_low); + return a; } if (aExp == 0 && aSig == 0) {