1997-11-22 egcs snapshot available

Jeffrey A Law law@cygnus.com
Tue Nov 25 21:48:00 GMT 1997


The reason egcs fails is because it's much better at finding loop
invariants than gcc-2.7.

As a result you end up with an asm like this:

(insn 37 34 39 (asm_operands/v ("movw $(( 1 << 3) - 1),%1
        movw %%ax,%2
        rorl $16,%%eax
        movb %%al,%3
        movb $0x82,%4
        movb $0x00,%5
        movb %%ah,%6
        rorl $16,%%eax") ("") 0[
            (symbol_ref:SI ("default_ldt"))
            (mem:QI (plus:SI (reg:SI 37)
                    (reg:SI 23)))
            (mem/s:QI (reg:SI 42))
            (mem/s:QI (reg:SI 41))
            (mem/s:QI (reg:SI 40))
            (mem/s:QI (reg:SI 39))
            (mem/s:QI (reg:SI 38))
        ]
        [
            (asm_input:SI ("a"))
            (asm_input:QI ("m"))
            (asm_input:QI ("m"))
            (asm_input:QI ("m"))
            (asm_input:QI ("m"))
            (asm_input:QI ("m"))
            (asm_input:QI ("m"))
        ]  ("k.c") 16) -1 (nil)
    (nil))

Note that this asm needs 7 hard registers, which is more than you can
count on being available on the x86.

So while we could probably disable the aggressive loop invariant detection,
it would just be papering over the real bug, which is the asm itself.

jeff




More information about the Gcc mailing list