[cfe-dev] Aarch64 ASM quirk

Martin Storsjö via cfe-dev cfe-dev at lists.llvm.org
Fri Nov 8 05:43:28 PST 2019


On Fri, 8 Nov 2019, Peter Smith via cfe-dev wrote:

> Hello Joel,
>
> The root cause is that the AArch64 target is using ';' as a comment
> character, whereas in GNU as (and many other llvm MC backends),  the
> ';' is used as a statement separator. In your example only the text up
> to ';' is being parsed.
>
> Looking at AArch64MCAsmInfo.cpp
>  SeparatorString = "%%";
>  CommentString = ";";
>
> I think that this is likely to have been derived from Darwin as I
> can't get the "%%" to work as a statement separator for
> aarch64-linux-gnu targets.

I don't know about the separator string, but if you look in 
AArch64MCAsmInfoELF (and AArch64MCAsmInfoGNUCOFF), the comment string is 
set to "//" instead.

I suggested changing this for the GNUCOFF (aka MinGW) target, as mingw-w64 
contains a number of assembler files that uses this pattern of piling up a 
few directives on one line.

As there's very little predecent for GNU style .s assembler for 
aarch64-windows-msvc targets (as the official tool from microsoft, 
armasm64, uses a totally different syntax), I'm guess it would be fine to 
change the comment string to "//" there as well, as there apparently is a 
demand for it?

With a target that doesn't treat ";" as a comment char, your assembler 
example errors out due to issues with the section and type directives 
though, now that they actually are interpreted and not stripped out as 
comments.

// Martin




More information about the cfe-dev mailing list