On Mon, Aug 22, 2016 at 06:01:22PM -0400, Michael Meissner wrote:
> > > +static void
> > > +rs6000_split_v4si_init_di_reg (rtx dest, rtx si1, rtx si2, rtx tmp)
> > > +{
> > > + const unsigned HOST_WIDE_INT mask_32bit = HOST_WIDE_INT_C (0xffffffff);
> >
> > Does using that macro buy us anything? Won't the plain number work just
> > as well?
>
> I would imagine you don't want to use a bare 0xffffffff if the compiler is
> being built in a 32-bit environment. Also, using mask_32bit as a const
> allowed
> me to code the following lines without breaking them into smaller lines due to
> the archic 79 character column limit.
HOST_WIDE_INT is always at least 64-bit nowadays. I didn't mean use the
number everywhere, I meant just deleting the HOST_WIDE_INT_C.
> > > + /* Generate RLDIC. */
> > > + rtx si1_di = gen_rtx_REG (DImode, regno_or_subregno (si1));
> > > + rtx shift_rtx = gen_rtx_ASHIFT (DImode, si1_di, GEN_INT (32));
> > > + rtx mask_rtx = GEN_INT (mask_32bit << 32);
> > > + rtx and_rtx = gen_rtx_AND (DImode, shift_rtx, mask_rtx);
> > > + gcc_assert (!reg_overlap_mentioned_p (dest, si1));
> > > + emit_insn (gen_rtx_SET (dest, and_rtx));
> >
> > Maybe gen_rotldi3_mask (after taking the "*" off of that)? Is that too
> > unfriendly to use? We could add another helper.
>
> The problem is rotld3_mask takes a match_operator, and you pretty much would
> have to construct the AND part of the expression,
Ah yes. I'll see if I can do another helper.
Thanks,
Segher