[cfe-dev] Pre-processing assembly sources
Martin J. O'Riordan via cfe-dev
cfe-dev at lists.llvm.org
Thu Aug 11 01:16:17 PDT 2016
Thanks Joerg.
I have another question about pre-processing for assembly sources.
C and C++ do not distinguish newline from any other kind of whitespace, and
the expansion of a macro has no embedded newlines (keeps line tracking
happy).
But assemblers typically process a line at a time, so a macro such as:
#define LOAD_and_ADDI(n) \
LD r1, r2 \
ADDI r1, r1, n
LOAD_and_ADDI(0x20)
expands to:
LD r1, r2 ADDI r1, r1, 0x20
With strict ISO C phases of translation rules there is no way that I can
think of to embed newlines so that the expansion becomes:
LD r1, r2
ADDI r1, r1, 0x20
Is there any trick with CLang (or GCC) that allows a newline to be embedded
in the expansion? Or possibly a "magic" token? (for example '__NL') so that
I could rewrite this as:
#define LOAD_and_ADDI(n) \
LD r1, r2 __NL \
ADDI r1, r1, n
Or if the source is assembly the magic token could expand to something like:
LD r1, r2
.loc <resync the line-numbering>
ADDI r1, r1, 0x20
and for C/C++ it might expand to:
LD r1, r2
# <resync the line-numbering>
ADDI r1, r1, 0x20
Thanks,
MartinO
-----Original Message-----
From: Joerg Sonnenberger [mailto:joerg at bec.de]
Sent: 08 August 2016 22:41
To: Martin J. O'Riordan
Subject: Re: [cfe-dev] Pre-processing assembly sources
On Mon, Aug 08, 2016 at 12:47:11PM +0100, Martin J. O'Riordan wrote:
> I'm assuming that this mode does not have any explicit documentation,
> but I will do some experimentation to see which C dialect it is
> closest to, in particular support for variadic macros.
It should be a superset of normal C99/C11 preprocessor logic. As long as you
don't try too fancy things, legal stuff should work.
Joerg
More information about the cfe-dev
mailing list