On Fri, Feb 23, 2024 at 9:51 AM Richard Sandiford <richard.sandif...@arm.com> wrote: > > Evgeny Karpov <evgeny.kar...@microsoft.com> writes: > > The calling ABI enum definition has been done following a similar > > convention in > > https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/i386/i386-opts.h;h=ef2825803b32001b9632769bdff196d1e43d27ba;hb=refs/heads/master#l41 > > > > MS_ABI is used in gcc/config/i386/mingw32.h and gcc/config/i386/winnt-d.cc > > https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/i386/mingw32.h;h=58304fc55f629648e47490fd3c0f3db3858e4fd8;hb=refs/heads/master#l22 > > > > These files are moved to the mingw folder in the patch series. > > https://gcc.gnu.org/pipermail/gcc-patches/attachments/20240221/5e75c464/attachment.txt > > > > What do you think about this change for v2? > > > > +/* Available call ABIs. */ > > +enum aarch64_calling_abi > > +{ > > + AARCH64_CALLING_ABI_EABI, > > + AARCH64_CALLING_ABI_MS, > > + MS_ABI = AARCH64_CALLING_ABI_MS > > +}; > > + > > How is MS_ABI used in practice? When I apply locally, it looks like > the two non-x86 uses are in: > > gcc/config/mingw/mingw32.h: if (TARGET_64BIT && ix86_abi == MS_ABI) > \ > gcc/config/mingw/winnt-d.cc: if (TARGET_64BIT && ix86_abi == MS_ABI) > > But these should fail to build if used, because AFAICT there's no > definition of ix86_abi on aarch64. > > The first match is in EXTRA_OS_CPP_BUILTINS, but I couldn't see any uses > of that in aarch64 code, which would explain why everything builds OK. > The winnt-d.cc occurence looks like it would break the build with the > D frontend enabled though. > > Are there two distinct ABIs for aarch64-*-mingw*? Or are these > distinctions ignored on aarch64 and just retained for compatibility?
There is arm64ec ABI defined for aarch64 windows which is a different ABI from the standard windows aarch64 ABI, though I am not sure if it supported with the patches here. It is documented at https://learn.microsoft.com/en-us/cpp/build/arm64ec-windows-abi-conventions?view=msvc-170 . Thanks, Andrew > > If there are two distinct ABIs then we should probably add them to > aarch64_arm_pcs. But if there is only a single ABI, we should probably > avoid adding calling_abi altogether and instead provide a macro like > TARGET_IS_MS_ABI that aarch64 and x86 can define differently. > > (To be clear, I don't think the different handling of x18 matters > for the PCS classification. That's an orthogonal platform property > that applies to all PCS variants equally. No-one had suggested > otherwise, just wanted to say in case. :-) ) > > Thanks, > Richard > > > > > Regards, > > Evgeny > > > > > > Thursday, February 22, 2024 12:40 PM > > Richard Earnshaw (lists) wrote: > > > >> > > +/* Available call ABIs. */ > > +enum calling_abi > > +{ > > + AARCH64_EABI = 0, > > + MS_ABI = 1 > > +}; > > + > > > > The convention in this file seems to be that all enum types to start with > > aarch64. Also, the enumeration values should start with the name of the > > enumeration type in upper case, so: > > > > enum aarch64_calling_abi > > { > > AARCH64_CALLING_ABI_EABI, > > AARCH64_CALLING_ABI_MS > > }; > > > > or something very much like that. > > > > R.