egcs 1.0.2 is broken on x86 and a patch for it.

Jeffrey A Law law@cygnus.com
Mon Apr 20 00:56:00 GMT 1998


  In message < m0yPWgx-00058vC@ocean.lucon.org >you write:
  > egcs 1.0.2 is broken on x86.
I know folks have asked you before, so please use "has a bug" instead
of "is broken".  It seems silly, but using "is broken" makes the
situation sound a lot worse than it really is.


  The test case here is miscompiled by -O2.
Thanks.  I've added it to the testsuite.

  > Basically convert_regs () calls change_stack () with INSN to emit
  > some insn after INSN. But some insn has been added after INSN so
  > that change_stack () will emit some insn at the wrong place. As the
  > result, the floating point is broken on x86.
This is an extremely confusing explanation, primarily because you
use "insn"/INSN to refer to three different things.

Basically is sounds like you have

	insn 1
        insn 2


It sounds like we thought we wanted to insert after insn 1, but
because of other reg-stack actions we really wanted to insert
after insn 2.

  > This patch seems to fix it. Could someone please take a look? Given
  > the bugs we have seen in egcs 1.0.2, I suggest egcs 1.0.3 be made.
I must confess I don't undersatnd reg-stack all that well.  Assuming
your analysis and explanation are correct, then I think your change
is OK, though possibly incomplete.

In particular I worry that we need to pass "new" instead of "insn"
to the call to emit_pop_insn near the end of convert_regs.  I think
the call to goto_block_pat in convert_regs is OK.

I also worry that there may be cases were we need to insert after
insn 1 instead of after insn 2.  But I don't know reg-stack well
enough to know if that can actually happen.

You might ask Bernd Schmidt or Stan Cox to look at the change and
comment.

I'm going to go ahead and hesitantly install the change, but further
comments from folks that understand this code would be greatly
appreciated.

jeff



More information about the Gcc mailing list