On Tue, Apr 5, 2011 at 2:35 AM, Andreas Schwab <[email protected]> wrote: > Peter Bigot <[email protected]> writes: > >> I have a target that supports a "push.b x" operation that puts a byte onto >> the stack but pre-decrements the stack pointer by 2 to maintain alignment. > > That looks like the same as what m68k does, see PUSH_ROUNDING.
Thanks. In my existing machine description, PUSH_ROUNDING is already set. m68k is one of the three machine descriptions that explicitly uses pushm1 instructions rather than mov expanders, regardless of PUSH_ROUNDING. Perhaps that's the magic; in fact, pushqi1 seems to be the only the only variant ever implemented. It's not that push isn't working, it's that I'm surprised that the tree-to-rtl translation generates a RTL expression that passes push_operand() but not the "<" constraint, but only in a case where PUSH_ROUNDING has an effect. I'll try to look into pushqi1 sometime, but for now using =X seems to work fine. Peter
