On Sat, Jan 18, 2025, 10:46 PM Andi Kleen <a...@firstfloor.org> wrote:
> From: Andi Kleen <a...@gcc.gnu.org> > > Correct the description of inline assembler to say that gcc does > limited assembler parsing to estimate the length of inline assembler > statements, and document that certain assembler primitives can confuse > it. > > gcc/ChangeLog: > > * doc/extend.texi: Document assembler parsing heuristics. > --- > gcc/doc/extend.texi | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index b0bb0d47230..4c7c9120863 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -10911,9 +10911,16 @@ of an asm}). > @item AssemblerInstructions > This is a literal string that specifies the assembler code. The string > can > contain any instructions recognized by the assembler, including > directives. > -GCC does not parse the assembler instructions themselves and > + > +GCC only does minimal parsing of the assembler instructions to determine > +how many there are for an conservative estimate of the maximum size of > +the assembler statement for some optimizations, but otherwise > does not know what they mean or even whether they are valid assembler > input. This is already described in details in size of an asm section: https://gcc.gnu.org/onlinedocs/gcc/Size-of-an-asm.html Maybe just a link to that section is needed here. > > +Assembler primitives that change the number of instructions like > @code{.rept} or > +expanding @code{.macro} macros might confuse these heuristics and should > +be avoided inside functions. For top level assembler they are generally > fine. > + > You may place multiple assembler instructions together in a single > @code{asm} > string, separated by the characters normally used in assembly code for the > system. A combination that works in most places is a newline to break the > -- > 2.47.1 > >