qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 3/4] softfloat: use floatx80_infinity in soft


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH v3 3/4] softfloat: use floatx80_infinity in softfloat
Date: Sat, 24 Feb 2018 18:21:11 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]