NetBSD-Bugs archive

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

Re: toolchain/45310: some mixed int/float computations are wrong on mips64



The following reply was made to PR port-mips/45310; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: toolchain/45310: some mixed int/float computations are wrong on
 mips64
Date: Tue, 30 Aug 2011 18:49:36 +0000

 Not sent to gnats.
 
    ------
 
 From: Manuel Bouyer <bouyer%antioche.eu.org@localhost>
 To: toolchain-manager%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost,
        netbsd-bugs%NetBSD.org@localhost
 Subject: Re: toolchain/45310: some mixed int/float computations are wrong on
        mips64
 Date: Tue, 30 Aug 2011 13:52:30 +0200
 
 On Mon, Aug 29, 2011 at 09:55:00PM +0000, Manuel.Bouyer%lip6.fr@localhost 
wrote:
 > >Description:
 >      I first noticed that ftp(1) and progress(1) reported speeds of 0b/s.
 >      I tracked it down to ptransfer() in ftp and finally ended up with this
 >      test program:
 > 
 > #include <stdio.h>
 > #include <stdlib.h>
 > #include <sys/types.h>
 > 
 > main()
 > {
 >      float a;
 >      off_t b;
 > 
 >      a = 0.544355;
 >      b = 4866695;
 > 
 >      printf("a %f b %d\n",a, (int)b);
 >      b /= a;
 >      printf("now b %d\n", (int)b);
 > }
 >      On i386 this gives:
 > a 0.544355 b 4866695
 > now b 8940297
 >      on mips64el:
 > a 0.544355 b 4866695
 > now b 0
 
 Here's a second test that could allow to narrow down the issue:
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
 
 main()
 {
         float a;
         int64_t b;
 
         a = 33.000000;
         b = a;
 
         printf("a %f b %d\n",a, (int)b);
 }
 
 cuba:/home/bouyer>./test3
 a 33.000000 b 0
 
 looks like the problem could be in __fixsfdi() (or one of the functions used by
 __fixsfdi()).
 When compiled -O2 the above test shows the expected result, but then the
 compiler does the float -> int64_t conversion at compile time.
 
 Replacing the int64_t with uint64_t results in a core dump.
 I can't get more details because of PR port-mips/45309
 
 -- 
 Manuel Bouyer <bouyer%antioche.eu.org@localhost>
      NetBSD: 26 ans d'experience feront toujours la difference
 --
 


Home | Main Index | Thread Index | Old Index