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=
[email protected]> 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


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#85293): https://edk2.groups.io/g/devel/message/85293
Mute This Topic: https://groups.io/mt/88223192/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to