[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