> 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.