This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: The current egcs is broken on x86
- To: hjl at lucon dot org (H.J. Lu)
- Subject: Re: The current egcs is broken on x86
- From: Joern Rennecke <amylaar at cygnus dot co dot uk>
- Date: Tue, 16 Jun 1998 00:09:09 +0100 (BST)
- Cc: mark at markmitchell dot com, wilson at cygnus dot com, egcs at cygnus dot com, meissner at cygnus dot com
> regmove.c itself may have bugs. In my test case, there is
>
> (insn 50 48 52 (set (reg:SI 30)
> (minus:SI (reg/v:SI 22)
> (reg:SI 29))) 154 {subsi3+1} (insn_list 48 (nil))
> (nil))
>
> which is turned into
>
> (insn 50 48 52 (set (reg:SI 30)
> (minus:SI (reg:SI 30)
> (reg:SI 29))) 154 {subsi3+1} (insn_list 48 (nil))
> (nil))
>
> It is completely wrong. It seems that regmove.c only handles PLUS, not
> MINUS. Is that the case?
No, this is not completely wrong, if reg:SI 30 is set before to the
correct value. We would have to see the context in order to determine
if the transformation was carried out correctly.
No, regmove handles all sorts of operations. However, there are
special cases for PLUS of a register with a constant.
handles all sorts of operations. However, there are
special cases for PLUS of a register with a constant.