msp430 port
DJ Delorie
dj@redhat.com
Tue Jul 30 18:50:00 GMT 2013
> > Index: gcc/cfgexpand.c
> > ===================================================================
> > --- gcc/cfgexpand.c (revision 201184)
> > +++ gcc/cfgexpand.c (working copy)
> I thought I already approved this. Go ahead and install it.
Sorry, I forgot to split out those three patches when I diffed.
> > Index: gcc/simplify-rtx.c
> > ===================================================================
> > --- gcc/simplify-rtx.c (revision 201184)
> > +++ gcc/simplify-rtx.c (working copy)
> Testcase? Explanation? This seems like you're papering over a bug.
Likewise.
> > Index: gcc/dwarf2cfi.c
> So was there a discussion of this patch? Presumably BITS_PER_WORD is 16
> and you've got 20 bit pointers which causes this problem, right?
I don't recall any discussion. Right, pointers are bigger than words.
> I think you should go ahead and install this patch as well.
Ok.
> > +; Note: using POPM.A #1 is two bytes smaller than using POPX.A....
> > +
> > +(define_insn "movsipsi2"
> > + [(set (match_operand:PSI 0 "register_operand" "=r")
> > + (subreg:PSI (match_operand:SI 1 "register_operand" "r") 0))]
> > + "TARGET_LARGE"
> > + "PUSH.W %H1 { PUSH.W %1 { POPM.A #1, %0"
> > +)
> So how is this different fram
> (set (psi) (truncate:psi (si)))?
It should be the same, of course. I typically look at what gcc *is*
generating, not what it *should* be generating, though ;-)
GCC does a lot of silly things these days.
> > +; This pattern is needed in order to avoid reload problems.
> > +; It takes an SI pair of registers, adds a value to them, and
> > +; then converts them into a single PSI register.
> > +
> > +(define_insn "addsipsi3"
> > + [(set (subreg:SI (match_operand:PSI 0 "register_operand" "=&r") 0)
> > + (plus:SI (match_operand:SI 1 "register_operand" "0")
> > + (match_operand 2 "general_operand" "rmi")))
> > + (clobber (reg:CC CARRY))
> > + ]
> > + ""
> > + "ADD.W\t%L2, %L0 { ADDC.W\t%H2, %H0 { PUSH.W %H0 { PUSH.W %L0 { POPM.A #1, %0"
> > +
> Is it possible the insns which resulted in adding this pattern came from
> trying to zero/sign extend the frame pointer, then the frame pointer
> gets eliminated and turns into a (plus (sp) (const_int)?
It's possible that's one case, but *all* pointer math happens in
SImode since the pointer_plus change went in. So this pattern happens
a lot.
More information about the Gcc-patches
mailing list