Kenneth Zadeck <[email protected]> writes:
> There is no place for exactly two HWIs in the machine independent parts
> of the compiler,
I totally agree. In fact I was taking that so much for granted that
I didn't even think to add a rider about it, sorry. I didn't mean
to imply that we should keep double_int around.
I think the reason for doing this is to prove that it can be done
(so that the wide_int code isn't too big a change for the tree level)
and to make it easier to merge the wide-int patches into trunk piecemeal
if we need to.
> ==== small bugs below this line.
> bottom of frag 3 of gcc/cp/init.c is wrong: you replaced
> rshift...lshift with lshift...lshift.
Do you mean this bit:
unsigned shift = (max_outer_nelts.get_precision ()) - 7
- - max_outer_nelts.clz ().to_shwi ();
- max_outer_nelts = max_outer_nelts.rshiftu (shift).lshift (shift);
+ - wi::clz (max_outer_nelts);
+ max_outer_nelts = wi::lshift (wi::lrshift (max_outer_nelts, shift),
+ shift);
? That's lrshift (logical right shift). I ended up using the double-int
names for right shifts.
That does remind me of another thing though. I notice some of the wide-int
code assumes that shifting a signed HWI right gives an arithmetic shift,
but the language doesn't guarantee that. We probably need to go through
and fix those.
> i will finish reading this tomorrow, but i wanted to get some comments
> in for the early shift. i stopped reading at line 1275.
Thanks. TBH I've not really been through the third part myself to
double-check. Will try to do that while waiting for comments on the
first part.
Richard