[wide-int] resolve bootstrap issue
Fri Jan 17 20:29:00 GMT 2014
On Jan 16, 2014, at 2:55 AM, Richard Sandiford <firstname.lastname@example.org> 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)
More information about the Gcc-patches