[cfe-dev] Inline Assembly Comments

Nirav Davé via cfe-dev cfe-dev at lists.llvm.org
Mon Jul 17 06:41:16 PDT 2017


Seems reasonable. Some variation in comments between gcc and llvm is
fundamental as the integrated assembler will not output preprocessor
comments (e.g. /**/ and //) though it accepts them while gcc just passes
the inline assembly string through with appropriate replacements. Some
minor comment shifting should be fine.

-Nirav

On Mon, Jul 17, 2017 at 4:39 AM, Manuel Rigger <rigger.manuel at gmail.com>
wrote:

> Ah, okay. Locally, I only tested Clang versions up to 3.9.
>
> Should we close the bug report? Having slightly different conventions than
> GCC here is probably not an issue.
>
> - Manuel
>
> 2017-07-13 17:46 GMT+02:00 Nirav Davé <niravd at google.com>:
>
>> It looks like godbolt's comment filtering is removing the line if it gets
>> placed on a separate line. The comments do appear for 4.0 and later.
>>
>> -Nirav
>>
>> On Thu, Jul 13, 2017 at 10:59 AM, Manuel Rigger <rigger.manuel at gmail.com>
>> wrote:
>>
>>> I filed a bug (see https://bugs.llvm.org/show_bug.cgi?id=33770).
>>>
>>> It seems the comment is swallowed (i.e., it is also not on the next
>>> line). I verified this locally and using Compiler Explorer (see
>>> https://godbolt.org/). Removing the trailing semicolon lets the comment
>>> appear when using Clang 4.0, but not on versions below it.
>>>
>>> - Manuel
>>>
>>> 2017-07-13 16:36 GMT+02:00 Nirav Davé <niravd at google.com>:
>>>
>>>> AFAIK we retain all assembly comments by default. I just tried this
>>>> locally and it seems to work as expected with inline assembly comments
>>>> should be preserved by default.
>>>>
>>>> I suspect the comment does exist, but is on the next line. Currently,
>>>> the trailing semicolon at the end of your instruction is interpreted as an
>>>> EOL so the following comment is interpreted as a full line comment (We may
>>>> want to change that). If you remove the semicolon you should find it on the
>>>> same line.
>>>>
>>>> -Nirav
>>>>
>>>>
>>>> On Thu, Jul 13, 2017 at 7:51 AM, Manuel Rigger via cfe-dev <
>>>> cfe-dev at lists.llvm.org> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I'm investigating how inline assembly is used in C projects. While
>>>>> doing so, I found that a number of projects include comments as part of
>>>>> their inline assembly snippets. The code snippet below is an example:
>>>>>
>>>>> #include <stdint.h>
>>>>>
>>>>> uint64_t atomic_swap_long(volatile uint64_t *p, uint64_t v) {
>>>>>   __asm __volatile(
>>>>>     "xchgq %1,%0; # atomic_swap_long"
>>>>> : "+r" (v),   /* 0 */
>>>>>  "+m" (*p)); /* 1 */
>>>>>   return v;
>>>>> }
>>>>>
>>>>>
>>>>> When compiling with GCC (gcc -O1 -S) the following code is produced
>>>>> for the inline assembly snippet on my system:
>>>>>
>>>>>  #APP
>>>>> # 4 "inline-assembly-comment.c" 1
>>>>> xchgq (%rdi),%rax; # atomic_swap_long
>>>>> # 0 "" 2
>>>>> #NO_APP
>>>>>
>>>>>
>>>>> With Clang 3.8 and below, an empty line is inserted instead of the
>>>>> comment:
>>>>>
>>>>> #APP
>>>>> xchgq %rsi, (%rdi)
>>>>> #NO_APP
>>>>>
>>>>>
>>>>> With Clang 3.9 and 4.0, the newline disappeared but the comment is
>>>>> still not part of the assembly code.
>>>>>
>>>>> The comment is retained on the LLVM IR level:
>>>>>
>>>>> %5 = call i64 asm sideeffect "xchgq\09$1,$0; # atomic_swap_long",
>>>>> "=r,=*m,0,*m,~{dirflag},~{fpsr},~{flags}"(i64* %4, i64 %3, i64* %4)
>>>>>
>>>>>
>>>>> Is this intended? Should I open a bug report?
>>>>>
>>>>> - Manuel
>>>>>
>>>>> _______________________________________________
>>>>> cfe-dev mailing list
>>>>> cfe-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170717/8c37e496/attachment.html>


More information about the cfe-dev mailing list