whither fix for bogus x86 pushi?
Robert Lipe
robertl@dgii.com
Mon Jan 19 02:25:00 GMT 1998
On Jan 9, Richard Henderson asked me to try the following patch. It
cured a number of testcase failures on the g77/pic and caused no other
testcase failures.
I don't see this in the current EGCS CVS tree. Is it awaiting further
feedback from one of us, or does it need additional work, or is it just
in the queue to be committed?
Thanx,
RJL
> Fri Jan 9 00:48:09 1998 Richard Henderson <rth@cygnus.com>
>
> * i386.md (push): Delete identical !TARGET_MOVE pattern. Add
> patterns to prohibit symbolic constants if flag_pic.
>
>
> Index: i386.md
> ===================================================================
> RCS file: /cvs/cvsfiles/egcs/gcc/config/i386/i386.md,v
> retrieving revision 1.4
> diff -u -p -d -r1.4 i386.md
> --- i386.md 1997/11/05 19:29:37 1.4
> +++ i386.md 1998/01/09 08:45:36
> @@ -835,7 +835,13 @@
> (define_insn ""
> [(set (match_operand:SI 0 "push_operand" "=<")
> (match_operand:SI 1 "general_operand" "g"))]
> - "TARGET_PUSH_MEMORY"
> + "TARGET_PUSH_MEMORY && !flag_pic"
> + "push%L0 %1")
> +
> +(define_insn ""
> + [(set (match_operand:SI 0 "push_operand" "=<")
> + (match_operand:SI 1 "general_operand" "rmn"))]
> + "TARGET_PUSH_MEMORY && flag_pic"
> "push%L0 %1")
>
> ;; If not a 386, it is faster to move MEM to a REG and then push, rather than
> @@ -844,13 +850,13 @@
> (define_insn ""
> [(set (match_operand:SI 0 "push_operand" "=<")
> (match_operand:SI 1 "nonmemory_operand" "ri"))]
> - "!TARGET_PUSH_MEMORY && TARGET_MOVE"
> + "!TARGET_PUSH_MEMORY && !flag_pic"
> "push%L0 %1")
>
> (define_insn ""
> [(set (match_operand:SI 0 "push_operand" "=<")
> - (match_operand:SI 1 "nonmemory_operand" "ri"))]
> - "!TARGET_PUSH_MEMORY && !TARGET_MOVE"
> + (match_operand:SI 1 "nonmemory_operand" "rn"))]
> + "!TARGET_PUSH_MEMORY && flag_pic"
> "push%L0 %1")
>
> ;; General case of fullword move.
>
>
--
Robert Lipe http://www.dgii.com/people/robertl robertl@dgii.com
More information about the Gcc
mailing list