On Jan 16, 2014, at 2:55 AM, Richard Sandiford <rsand...@linux.vnet.ibm.com> 
wrote:
>>> Why did you need the <real_int>?  It was supposed to work without.
>> 
>> The code in question needs something that is max int + max significand
>> real in size, we made the max int smaller (smaller than this quantity on
>> x86) so, this code needs a special wide int that is bigger.  The type is
>> free as vrp uses the same type.  As for why Kenny choose this method,
>> I'd defer to him.
> 
> To be clear, I was only talking about the <real_int> in
> "wi::lrshift<real_int>".  Just "wi::lrshift" should be fine.
> 
> Tested on x86_64-linux-gnu.  OK to install?

Ah, yes, I was trying to get it to compile at one point and added that; I now 
see what you mean. Yes, this is fine.

> Index: gcc/real.c
> ===================================================================
> --- gcc/real.c        2014-01-15 16:39:39.883276568 +0000
> +++ gcc/real.c        2014-01-15 16:39:40.376274546 +0000
> @@ -1444,7 +1444,7 @@ real_to_integer (const REAL_VALUE_TYPE *
>       w = SIGSZ * HOST_BITS_PER_LONG + words * HOST_BITS_PER_WIDE_INT;
>       tmp = real_int::from_array
>       (val, (w + HOST_BITS_PER_WIDE_INT - 1) / HOST_BITS_PER_WIDE_INT, w);
> -      tmp = wi::lrshift<real_int> (tmp, (words * HOST_BITS_PER_WIDE_INT) - 
> exp);
> +      tmp = wi::lrshift (tmp, (words * HOST_BITS_PER_WIDE_INT) - exp);
>       result = wide_int::from (tmp, precision, UNSIGNED);
> 
>       if (r->sign)

Reply via email to