From 9214c2cbe0675b5f37290df7a51c05f6863cdaa0 Mon Sep 17 00:00:00 2001 From: rearnsha Date: Sat, 4 Oct 2003 10:18:33 +0000 Subject: [PATCH] * doc/extend.texi: Document how GCC estimates and relies on the size of an asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72089 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/doc/extend.texi | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 187375d2b83..ebc9864beff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-10-04 Richard Earnshaw + + * doc/extend.texi: Document how GCC estimates and relies on the size + of an asm. + 2003-10-04 Richard Sandiford * config/mips/mips.c (mips_pad_arg_upward): Pad floating-point diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index ce3171388b4..36fbd2653ba 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -4136,6 +4136,26 @@ If you are writing a header file that should be includable in ISO C programs, write @code{__asm__} instead of @code{asm}. @xref{Alternate Keywords}. +@subsection Size of an @code{asm} + +Some targets require that GCC track the size of each instruction used in +order to generate correct code. Because the final length of an +@code{asm} is only known by the assembler, GCC must make an estimate as +to how big it will be. The estimate is formed by counting the number of +statements in the pattern of the @code{asm} and multiplying that by the +length of the longest instruction on that processor. Statements in the +@code{asm} are identified by newline characters and whatever statement +separator characters are supported by the assembler; on most processors +this is the `@code{;}' character. + +Normally, GCC's estimate is perfectly adequate to ensure that correct +code is generated, but it is possible to confuse the compiler if you use +pseudo instructions or assembler macros that expand into multiple real +instructions or if you use assembler directives that expand to more +space in the object file than would be needed for a single instruction. +If this happens then the assembler will produce a diagnostic saying that +a label is unreachable. + @subsection i386 floating point asm operands There are several rules on the usage of stack-like regs in -- 2.11.4.GIT