This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: MIPS gas relaxation still doesn't work
On Tue, Oct 15, 2002 at 03:58:57PM -0400, Jim Wilson wrote:
> >Can gcc not to emit nop nor noreorder when it tries to fill the delay
> >slot with nop?
>
> You never want the assembler to try to fill delay slots. Consider a compiler
> optimization like software pipelining. The compiler will schedule instructions
> inside a loop with full knowledge of the target pipeline to give maximum
> performance. Then the assembler picks a random instruction from the loop,
> puts it in a branch delay slot, and now your code runs twice as slow because
> the assembler introduced pipeline stalls. Of course, gcc isn't good enough
> yet to have this problem yet, but we will get there eventually. Meanwhile, we
> need to get out of the habit of relying on assembler optimizations. In the
> long run, assembler optimizations are bad, and we need to stop using them as
> soon as possible. Gcc should emit .set nomacro/noreorder/noat/etc at the
> begining of its assembly output, and never turn them on.
While I agree with you in theory, how would GCC handle user-written
asm("") blocks without an assemble-time jump relaxation of some sort?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer