[PATCH v1 0/3] aarch64: mingw: Add more support for ABI
Saurabh Jha via Sourceware Forge
forge-bot@forge-stage.sourceware.org
Tue Oct 28 13:06:03 GMT 2025
Hi gcc-patches mailing list,
Saurabh Jha <saurabhjha@sourceware.org> has requested that the following forgejo pull request
be published on the mailing list.
Created on: 2025-10-28 12:52:52+00:00
Latest update: 2025-10-28 13:06:05+00:00
Changes: 16 changed files, 716 additions, 23 deletions
Head revision: saurabh.jha/gcc-TEST ref mingw-data-types-abi commit 350a5e6f20a26298de8ae24ec3de798d1bdb46b1
Base revision: gcc/gcc-TEST ref trunk commit f6eb93dec5d355933cd0478db6bf43dfdb3aad06 r16-4692-gf6eb93dec5d355
Merge base: f6eb93dec5d355933cd0478db6bf43dfdb3aad06
Full diff url: https://forge.sourceware.org/gcc/gcc-TEST/pulls/118.diff
Discussion: https://forge.sourceware.org/gcc/gcc-TEST/pulls/118
Requested Reviewers:
Hey,
This work is done on top of this patch:
https://gcc.gnu.org/pipermail/gcc-patches/2025-July/691216.html.
This patch series makes two changes specific to the aarch64-w64-mingw32 target:
1. Make long double 8 bytes. This is done in the second commit.
2. Add support for variadic ABI. This is done in the third commit.
The documentation for ARM64 Windows ABI is here:
https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions.
In order to test changes for this target, we need to add support for the
new target in check-function-bodies function in scanasm.exp. This is
done in the first commit.
Regression tested on two targets:
1. aarch64-unknown-linux-gnu
2. aarch64-w64-mingw32
Built aarch64-unknown-linux-gnu natively and found no regressions.
For aarch64-w64-mingw32, I built a cross compiler with host and build
aarch64-unknown-linux-gnu and target aarch64-w64-mingw32. I built the
compiler in two stages using the following steps:
1. Build binutils for aarch64-w64-mingw32 target using the native
aarch64-unknown-linux-gnu compiler.
2. Build mingw headers, which just involves placing header files in the
right directories.
3. Build gcc using binutils from step 1 and the native
aarch64-unknown-linux-gnu compiler.
4. Build mingw-crt using gcc from step 3.
5. Build mingw-winpthreads using gcc from step 3.
6. Build gcc that uses mingw-crt and mingw-winpthreads from previous
steps and using native gcc.
7. Build mingw using gcc from step 6.
For master, it fails on step 4 because mingw-crt needs long double to be
8 bytes. So I couldn't run regression tests for aarch64-w64-mingw32 on
master. After these commits are applied, the test summary looks like
this.
# of expected passes 312151
# of unexpected failures 55879
# of unexpected successes 6
# of expected failures 1667
# of unresolved testcases 1413
# of unsupported tests 7384
We have some way to go to achieve parity with aarch64-unknown-linux-gnu
and the future work should make these numbers better.
Ok for master?
Thanks,
Saurabh
Saurabh Jha (3):
mingw: emit end of procedure directive as comment
aarch64: mingw: Make long double 64 bit
aarch64: mingw: Implement support for variadic ABI
gcc/config/aarch64/aarch64-builtins.cc | 33 ++
gcc/config/aarch64/aarch64-coff.h | 17 +-
gcc/config/aarch64/aarch64-protos.h | 1 +
gcc/config/aarch64/aarch64.cc | 354 +++++++++++++++++-
gcc/config/aarch64/aarch64.h | 11 +
gcc/config/aarch64/cygming.h | 13 +-
gcc/config/mingw/winnt.cc | 22 ++
gcc/config/mingw/winnt.h | 1 +
.../aarch64/mingw/long_double_size.c | 25 ++
.../gcc.target/aarch64/mingw/mingw.exp | 41 ++
.../gcc.target/aarch64/mingw/variadic_hfa.c | 71 ++++
.../gcc.target/aarch64/mingw/variadic_hva.c | 89 +++++
.../gcc.target/aarch64/mingw/variadic_int.c | 41 ++
gcc/testsuite/lib/scanasm.exp | 2 +
libgfortran/configure | 10 +-
libgfortran/configure.ac | 7 +-
16 files changed, 715 insertions(+), 23 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/long_double_size.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/mingw.exp
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_hfa.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_hva.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_int.c
Changed files:
- A: gcc/testsuite/gcc.target/aarch64/mingw/long_double_size.c
- A: gcc/testsuite/gcc.target/aarch64/mingw/mingw.exp
- A: gcc/testsuite/gcc.target/aarch64/mingw/variadic_hfa.c
- A: gcc/testsuite/gcc.target/aarch64/mingw/variadic_hva.c
- A: gcc/testsuite/gcc.target/aarch64/mingw/variadic_int.c
- M: gcc/config/aarch64/aarch64-builtins.cc
- M: gcc/config/aarch64/aarch64-coff.h
- M: gcc/config/aarch64/aarch64-protos.h
- M: gcc/config/aarch64/aarch64.cc
- M: gcc/config/aarch64/aarch64.h
- M: gcc/config/aarch64/cygming.h
- M: gcc/config/mingw/winnt.cc
- M: gcc/config/mingw/winnt.h
- M: gcc/testsuite/lib/scanasm.exp
- M: libgfortran/configure
- M: libgfortran/configure.ac
Saurabh Jha (3):
mingw: emit end of procedure directive as comment
aarch64: mingw: Make long double 64 bit
aarch64: mingw: Implement support for variadic ABI
gcc/config/aarch64/aarch64-builtins.cc | 33 ++
gcc/config/aarch64/aarch64-coff.h | 18 +-
gcc/config/aarch64/aarch64-protos.h | 1 +
gcc/config/aarch64/aarch64.cc | 354 +++++++++++++++++-
gcc/config/aarch64/aarch64.h | 11 +
gcc/config/aarch64/cygming.h | 13 +-
gcc/config/mingw/winnt.cc | 22 ++
gcc/config/mingw/winnt.h | 1 +
.../aarch64/mingw/long_double_size.c | 25 ++
.../gcc.target/aarch64/mingw/mingw.exp | 41 ++
.../gcc.target/aarch64/mingw/variadic_hfa.c | 71 ++++
.../gcc.target/aarch64/mingw/variadic_hva.c | 89 +++++
.../gcc.target/aarch64/mingw/variadic_int.c | 41 ++
gcc/testsuite/lib/scanasm.exp | 2 +
libgfortran/configure | 10 +-
libgfortran/configure.ac | 7 +-
16 files changed, 716 insertions(+), 23 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/long_double_size.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/mingw.exp
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_hfa.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_hva.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mingw/variadic_int.c
--
2.51.1
More information about the Test-list
mailing list