Le 24/02/2018 à 03:26, Richard Henderson a écrit : > On 02/23/2018 06:59 AM, Laurent Vivier wrote: >> @@ -4550,8 +4556,8 @@ int64_t floatx80_to_int64(floatx80 a, float_status >> *status) >> if ( shiftCount ) { >> float_raise(float_flag_invalid, status); >> if ( ! aSign >> - || ( ( aExp == 0x7FFF ) >> - && ( aSig != LIT64( 0x8000000000000000 ) ) ) >> + || ((aExp == floatx80_infinity_high) >> + && (aSig != floatx80_infinity_low)) >> ) { > > As long as you're cleaning this up, m68k ignores the explicit integer bit when > considering an infinity. However, Intel doesn't ignore the bit -- it appears > to treat 7fff.0* as a NaN.
According to the comment above the function: "... If `a' is a NaN, the largest positive integer is returned. Otherwise, if the conversion overflows, the largest integer with the same sign as `a' is returned." I think the change should be in fact: @@ -4549,10 +4555,7 @@ int64_t floatx80_to_int64(floatx80 a, float_status *status) if ( shiftCount <= 0 ) { if ( shiftCount ) { float_raise(float_flag_invalid, status); - if ( ! aSign - || ( ( aExp == 0x7FFF ) - && ( aSig != LIT64( 0x8000000000000000 ) ) ) - ) { + if (!aSign || floatx80_is_any_nan(a)) { return LIT64( 0x7FFFFFFFFFFFFFFF ); } return (int64_t) LIT64( 0x8000000000000000 ); Do you agree? Thanks, Laurent