Hi,

GNU Assembler and the clang assembler support more complex macros natively (using the .macro and.endm directives), without the need for the C preprocessor.
This completely sidesteps the need for explicit ";" as the GAS macros respect newlines inside the macro.

See https://godbolt.org/z/6zzqoeKE4 for a very simple example.
Of course, you can also pass arguments, see https://sourceware.org/binutils/docs/as/Macro.html for the full documentation.

Best regards,
Pedro

On Wed, Jan 5, 2022 at 8:36 PM Andrew Fish via groups.io <afish=apple.com@groups.io> wrote:
I was playing around with getting Xcode to compile AArch64 code and I hit an interesting compatibility issue. The assembler line continuation token for GCC (;) is a comment for the Xcode clang assembler. For Xcode clang you need to use %%. Yikes [1]

I was wondering if any one else has hit this in another project and if there was any cool workaround?

The only thing I can think of is the “big hammer” on both (well you only need one) ends. We could replace ; with a #define that matches the assembler. It looks like this issue mostly hits in Code that is using C pre-processor macros so we could refactor the code. I’m a little concerned that the C pre processor is getting used since the macro languages of the assembler might also have some compatibility issues?

Looking for ideas and opinions on the best way to fix this if we want to add Xcode as an ARM compiler in the future. 


[1] https://github.com/tianocore/edk2/blob/master/MdePkg/Library/BaseLib/AArch64/SetJumpLongJump.S#L13

#define GPR_LAYOUT \
REG_PAIR (x19, x20, 0); \
REG_PAIR (x21, x22, 16); \
REG_PAIR (x23, x24, 32); \
REG_PAIR (x25, x26, 48); \
REG_PAIR (x27, x28, 64); \
REG_PAIR (x29, x30, 80);/*FP, LR*/ \
REG_ONE (x16, 96) /*IP0*/
I had to change it to:

#define GPR_LAYOUT \
REG_PAIR (x19, x20, 0)%% \
REG_PAIR (x21, x22, 16)%% \
REG_PAIR (x23, x24, 32)%% \
REG_PAIR (x25, x26, 48)%% \
REG_PAIR (x27, x28, 64)%% \
REG_PAIR (x29, x30, 80)%%/*FP, LR*/ \
REG_ONE (x16, 96) /*IP0*/
Thanks,

Andrew Fish



--
Pedro Falcato