Subject: Re: toolchain/21414: double to unsigned int conversion broken
To: David Laight <david@l8s.co.uk>
From: Andrey Petrov <petrov@netbsd.org>
List: netbsd-bugs
Date: 05/01/2003 19:47:02
On Thu, May 01, 2003 at 08:22:36PM +0100, David Laight wrote:
> > > 
> > > So 0x7fffffff is fine...
> > 
> > Duh, you are right.
> 
> No, I'm wrong...
> 
> For some reason best known to itself, gcc calls _Qp_dtoq then _Qp_qtoui
> when converting double to unsigned int (ie it converts the value
> to a 128bit float first!).

Yeah, and I worked on this with gcc3.2.x which now don't overpromote
quad in this case.

> 
> _Qp_qtoui (quad to unsigned) is implemented in
>     src/lib/libc/arch/sparc64/softfloat/qp.c
> as
>     return (unsigned int)float128_to_int32(*a);
> which is just plain wrong...

And as you said this operation is undefined by K&R2.

	Andrey

> 
> In particular an unsigned version of roundAndPackInt32 (and Int64)
> is needed.
> 
> 	David
> 
> -- 
> David Laight: david@l8s.co.uk