From defdec6ed9ddf74ad4656a1d99b32dd8edac75c5 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Mon, 6 Feb 2017 18:08:45 +0000 Subject: [PATCH] [LangRef] Document some LLVM inline asm special escapes As discussed on llvm-dev: http://lists.llvm.org/pipermail/llvm-dev/2017-February/109862.html llvm-svn: 294204 --- docs/LangRef.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/LangRef.rst b/docs/LangRef.rst index 47d96290e6e..94a896f421f 100644 --- a/docs/LangRef.rst +++ b/docs/LangRef.rst @@ -3199,6 +3199,22 @@ resulting assembly string is parsed by LLVM's integrated assembler unless it is disabled -- even when emitting a ``.s`` file -- and thus must contain assembly syntax known to LLVM. +LLVM also supports a few more substitions useful for writing inline assembly: + +- ``${:uid}``: Expands to a decimal integer unique to this inline assembly blob. + This substitution is useful when declaring a local label. Many standard + compiler optimizations, such as inlining, may duplicate an inline asm blob. + Adding a blob-unique identifier ensures that the two labels will not conflict + during assembly. This is used to implement `GCC's %= special format + string `_. +- ``${:comment}``: Expands to the comment character of the current target's + assembly dialect. This is usually ``#``, but many targets use other strings, + such as ``;``, ``//``, or ``!``. +- ``${:private}``: Expands to the assembler private label prefix. Labels with + this prefix will not appear in the symbol table of the assembled object. + Typically the prefix is ``L``, but targets may use other strings. ``.L`` is + relatively popular. + LLVM's support for inline asm is modeled closely on the requirements of Clang's GCC-compatible inline-asm support. Thus, the feature-set and the constraint and modifier codes listed here are similar or identical to those in GCC's inline asm