> This piece code is wrong for x32: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59929
Though an independent bug ;) > > I am testing: > > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md > index ddc3be6..92e8fd0 100644 > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -2765,7 +2765,20 @@ > "reload_completed" > [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2))) > (set (mem:SF (reg:P SP_REG)) (match_dup 1))] > - "operands[2] = GEN_INT (-<P:MODE_SIZE>);") > +{ > + rtx op = XEXP (operands[0], 0); > + if (GET_CODE (op) == PRE_DEC) > + { > + gcc_assert (!TARGET_64BIT); > + op = GEN_INT (-4); > + } > + else > + { > + op = XEXP (XEXP (op, 1), 1); > + gcc_assert (CONST_INT_P (op)); > + } > + operands[2] = op; > +}) Not pretty, but I can not think of much more compact way, so OK if it passes. > > (define_split > [(set (match_operand:SF 0 "push_operand") > > > -- > H.J.