Hi gcc-patches mailing list,
Saurabh Jha <[email protected]> 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-11-14 12:17:32+00:00
Changes: 14 changed files, 694 additions, 31 deletions
Head revision: saurabh.jha/gcc-TEST ref mingw-data-types-abi commit 
7ea34c526e7982c84f8b424dc1db8dbe0449ac1d
Base revision: gcc/gcc-TEST ref trunk commit 
55a77666c9126fe8c189aff82059003ad513b22f r16-5273-g55a77666c9126f
Merge base: 55a77666c9126fe8c189aff82059003ad513b22f
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: pinskia

Hey,

In v4, addressed comments around removing #if from here:
https://forge.sourceware.org/gcc/gcc-TEST/pulls/118#issuecomment-3963

No other changes.

Thanks,
Saurabh

Saurabh Jha (3):
  aarch64: mingw: emit seh_endproc 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             |  19 +-
 gcc/config/aarch64/aarch64-protos.h           |   1 +
 gcc/config/aarch64/aarch64.cc                 | 341 ++++++++++++++++--
 gcc/config/aarch64/aarch64.h                  |  16 +
 gcc/config/aarch64/cygming.h                  |  13 +-
 gcc/config/mingw/winnt.cc                     |  22 ++
 gcc/config/mingw/winnt.h                      |   1 +
 .../aarch64/mingw/long_double_size.c          |  23 ++
 .../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                 |  12 +-
 14 files changed, 693 insertions(+), 30 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


Saurabh Jha (3):
  aarch64: mingw: emit seh_endproc 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             |  19 +-
 gcc/config/aarch64/aarch64-protos.h           |   1 +
 gcc/config/aarch64/aarch64.cc                 | 341 ++++++++++++++++--
 gcc/config/aarch64/aarch64.h                  |  16 +
 gcc/config/aarch64/cygming.h                  |  13 +-
 gcc/config/mingw/winnt.cc                     |  22 ++
 gcc/config/mingw/winnt.h                      |   1 +
 .../aarch64/mingw/long_double_size.c          |  23 ++
 .../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                 |  12 +-
 14 files changed, 693 insertions(+), 30 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

Range-diff against v3:
1:  8c1ceed2a17 = 1:  02b91e42c20 aarch64: mingw: emit seh_endproc as comment
2:  712de699693 = 2:  e4cd37d2dbd aarch64: mingw: Make long double 64 bit
3:  f2ca5054c7d ! 3:  7ea34c526e7 aarch64: mingw: Implement support for 
variadic ABI
    @@ Commit message
                 (aarch64_setup_incoming_varargs): Implement
                 TARGET_SETUP_INCOMING_VARARGS.
                 (aarch64_mangle_type): Implement TARGET_MANGLE_TYPE.
    -            (aarch64_ms_variadic_abi_strict_argument_naming): Implement
    +            (aarch64_variadic_abi_strict_argument_naming): Implement
                 TARGET_STRICT_ARGUMENT_NAMING.
                 * config/aarch64/aarch64.h
                 (aarch64_frame): Add new field
    @@ gcc/config/aarch64/aarch64.cc: get_pcs_arg_reg (enum arm_pcs pcs, int 
num)
     +  return ROUND_UP (size, UNITS_PER_WORD);
     +}
     +
    -+/* Layout a function argument according to the AAPCS64 rules.  The rule
    -+   numbers refer to the rule numbers in the AAPCS64.
    -+
    -+   The Windows Arm64 variadic function call ABI uses only C.12-C15 rules.
    ++/* The Windows Arm64 variadic function call ABI uses only C.12-C15 rules.
     +   See: 
https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions#addendum-variadic-functions.
  */
     +
     +static void
    @@ gcc/config/aarch64/aarch64.cc: aarch64_layout_arg (cumulative_args_t 
pcum_v, con
        allocate_ncrn = (type) ? !(FLOAT_TYPE_P (type)) : !FLOAT_MODE_P (mode);
        allocate_nvrn = aarch64_vfp_is_call_candidate (pcum_v,
                                                 mode,
    -@@ gcc/config/aarch64/aarch64.cc: aarch64_finish_sme_mode_switch_args 
(CUMULATIVE_ARGS *pcum)
    -   return gen_rtx_PARALLEL (VOIDmode, argvec);
    - }
    - 
    -+/* Implement TARGET_ARG_PARTIAL_BYTES.  */
    -+
    -+#if TARGET_AARCH64_MS_ABI == 1
    -+static int
    -+aarch64_arg_partial_bytes (cumulative_args_t pcum_v,
    -+                          const function_arg_info &arg ATTRIBUTE_UNUSED)
    -+{
    -+  CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    -+
    -+  if (pcum->pcs_variant != ARM_PCS_MS_VARIADIC)
    -+    return 0;
    -+
    -+  /* Handle the case when argument is split between the last registers and
    -+     the stack.  */
    -+  if ((pcum->aapcs_reg != NULL_RTX) && (pcum->aapcs_stack_words != 0))
    -+    return pcum->aapcs_stack_words * UNITS_PER_WORD;
    -+
    -+  return 0;
    -+}
    -+#endif
    -+
    - /* Implement TARGET_FUNCTION_ARG.  */
    - 
    - static rtx
     @@ gcc/config/aarch64/aarch64.cc: aarch64_function_arg (cumulative_args_t 
pcum_v, const function_arg_info &arg)
        gcc_assert (pcum->pcs_variant == ARM_PCS_AAPCS64
              || pcum->pcs_variant == ARM_PCS_SIMD
    @@ gcc/config/aarch64/aarch64.cc: aarch64_function_arg_regno_p (unsigned 
regno)
          case ARM_PCS_UNKNOWN:
            return ((GP_REGNUM_P (regno) && regno < R0_REGNUM + NUM_ARG_REGS)
              || (FP_REGNUM_P (regno) && regno < V0_REGNUM + NUM_FP_ARG_REGS)
    -@@ gcc/config/aarch64/aarch64.cc: static GTY(()) tree va_list_type;
    -      int   __vr_offs;
    -    };  */
    - 
    -+#if TARGET_AARCH64_MS_ABI == 0
    - static tree
    - aarch64_build_builtin_va_list (void)
    - {
    -@@ gcc/config/aarch64/aarch64.cc: aarch64_build_builtin_va_list (void)
    - 
    -   return va_list_type;
    +@@ gcc/config/aarch64/aarch64.cc: aarch64_load_tp (rtx target)
    +   return target;
      }
    -+#endif
    -+
    + 
     +/* Windows Arm64 variadic function call ABI specific va_list type node.  
*/
     +tree ms_va_list_type_node;
     +
    -+/* Implement TARGET_BUILD_BUILTIN_VA_LIST.
    -+
    -+   Setup the builtin va_list data type and for 64-bit the additional
    ++/* Setup the builtin va_list data type and for 64-bit the additional
     +   calling convention specific va_list data types.  */
     +
    -+#if TARGET_AARCH64_MS_ABI == 1
     +static tree
     +aarch64_ms_variadic_abi_build_builtin_va_list (void)
     +{
    @@ gcc/config/aarch64/aarch64.cc: aarch64_build_builtin_va_list (void)
     +
     +  return ms_va_list_type_node;
     +}
    -+#endif
    ++
    + /* On AAPCS systems, this is the "struct __va_list".  */
    + static GTY(()) tree va_list_type;
      
    - /* Implement TARGET_EXPAND_BUILTIN_VA_START.  */
    +@@ gcc/config/aarch64/aarch64.cc: static GTY(()) tree va_list_type;
    +      void *__vr_top;
    +      int   __gr_offs;
    +      int   __vr_offs;
    +-   };  */
    ++   };
     +
    -+#if TARGET_AARCH64_MS_ABI == 0
    - static void
    - aarch64_expand_builtin_va_start (tree valist, rtx nextarg 
ATTRIBUTE_UNUSED)
    ++   Windows ABI is handled using
    ++   aarch64_ms_variadic_abi_build_builtin_va_list (void).  */
    + 
    + static tree
    + aarch64_build_builtin_va_list (void)
      {
    -@@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx nextarg ATTRIBUTE_UNUSED)
    -         build_int_cst (TREE_TYPE (vroff), -vr_save_area_size));
    -   expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
    - }
    -+#endif
    ++  if (TARGET_AARCH64_MS_ABI)
    ++    return aarch64_ms_variadic_abi_build_builtin_va_list ();
     +
    -+/* Implement TARGET_EXPAND_BUILTIN_VA_START.  */
    -+
    -+#if TARGET_AARCH64_MS_ABI == 1
    +   tree va_list_name;
    +   tree f_stack, f_grtop, f_vrtop, f_groff, f_vroff;
    + 
    +@@ gcc/config/aarch64/aarch64.cc: aarch64_build_builtin_va_list (void)
    +   return va_list_type;
    + }
    + 
     +static void
     +aarch64_ms_variadic_abi_expand_builtin_va_start (tree valist, rtx nextarg)
     +{
    @@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx
     +
     +  convert_move (va_r, nextarg, 0);
     +}
    -+#endif
    ++
    + /* Implement TARGET_EXPAND_BUILTIN_VA_START.  */
    ++
    + static void
    +-aarch64_expand_builtin_va_start (tree valist, rtx nextarg 
ATTRIBUTE_UNUSED)
    ++aarch64_expand_builtin_va_start (tree valist, rtx nextarg)
    + {
    ++  if (TARGET_AARCH64_MS_ABI)
    ++    return aarch64_ms_variadic_abi_expand_builtin_va_start (valist, 
nextarg);
    ++
    +   const CUMULATIVE_ARGS *cum;
    +   tree f_stack, f_grtop, f_vrtop, f_groff, f_vroff;
    +   tree stack, grtop, vrtop, groff, vroff;
    +@@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx nextarg ATTRIBUTE_UNUSED)
    +   expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
    + }
    + 
    ++#if TARGET_AARCH64_MS_ABI == 1
     +
     +/* Iterate through the target-specific builtin types for va_list.
     +   IDX denotes the iterator, *PTREE is set to the result type of
    @@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx
     +   Note, do not iterate a base builtin's name like __builtin_va_list.
     +   Used from c_common_nodes_and_builtins.  */
     +
    -+#if TARGET_AARCH64_MS_ABI == 1
     +static int
     +aarch64_ms_variadic_abi_enum_va_list (int idx, const char **pname, tree 
*ptree)
     +{
    @@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx
     +
     +  return 0;
     +}
    -+#endif
     +
     +/* This function returns the calling abi specific va_list type node.
     +   It returns  the FNDECL specific va_list type.  */
     +
    -+#if TARGET_AARCH64_MS_ABI == 1
     +static tree
     +aarch64_ms_variadic_abi_fn_abi_va_list (tree fndecl)
     +{
    @@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx
     +
     +  return std_fn_abi_va_list (fndecl);
     +}
    -+#endif
     +
     +/* Returns the canonical va_list type specified by TYPE.
     +   If there is no valid TYPE provided, it return NULL_TREE.  */
     +
    -+#if TARGET_AARCH64_MS_ABI == 1
     +static tree
     +aarch64_ms_variadic_abi_canonical_va_list_type (tree type)
     +{
    @@ gcc/config/aarch64/aarch64.cc: aarch64_expand_builtin_va_start (tree 
valist, rtx
     +
     +  return NULL_TREE;
     +}
    ++
    ++/* Implement TARGET_ARG_PARTIAL_BYTES.  */
    ++
    ++static int
    ++aarch64_arg_partial_bytes (cumulative_args_t pcum_v,
    ++                          const function_arg_info &arg ATTRIBUTE_UNUSED)
    ++{
    ++  CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    ++
    ++  if (pcum->pcs_variant != ARM_PCS_MS_VARIADIC)
    ++    return 0;
    ++
    ++  /* Handle the case when argument is split between the last registers and
    ++     the stack.  */
    ++  if ((pcum->aapcs_reg != NULL_RTX) && (pcum->aapcs_stack_words != 0))
    ++    return pcum->aapcs_stack_words * UNITS_PER_WORD;
    ++
    ++  return 0;
    ++}
    ++
     +#endif
    - 
    ++
      /* Implement TARGET_GIMPLIFY_VA_ARG_EXPR.  */
      
     +#if TARGET_AARCH64_MS_ABI == 0
    @@ gcc/config/aarch64/aarch64.cc: aarch64_post_cfi_startproc (FILE *f, tree 
ignored
     +   For Windows ABI of variadic function calls, treat the named arguments 
as
     +   unnamed as they are handled the same way as variadic arguments.  */
     +
    -+#if TARGET_AARCH64_MS_ABI == 1
     +static bool
    -+aarch64_ms_variadic_abi_strict_argument_naming (cumulative_args_t pcum_v)
    ++aarch64_variadic_abi_strict_argument_naming (cumulative_args_t pcum_v)
     +{
    ++  if (!TARGET_AARCH64_MS_ABI)
    ++    return hook_bool_CUMULATIVE_ARGS_true (pcum_v);
    ++
     +  CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
     +
     +  if (pcum->pcs_variant == ARM_PCS_MS_VARIADIC)
    @@ gcc/config/aarch64/aarch64.cc: aarch64_post_cfi_startproc (FILE *f, tree 
ignored
     +
     +  return hook_bool_CUMULATIVE_ARGS_true (pcum_v);
     +}
    -+#endif
     +
      /* Implements TARGET_ASM_FILE_START.  Output the assembly header.  */
      
      static void
     @@ gcc/config/aarch64/aarch64.cc: aarch64_run_selftests (void)
    - #undef TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY
    - #define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY 
aarch64_print_patchable_function_entry
    - 
    -+#if TARGET_AARCH64_MS_ABI == 1
    -+#undef TARGET_BUILD_BUILTIN_VA_LIST
    -+#define TARGET_BUILD_BUILTIN_VA_LIST \
    -+  aarch64_ms_variadic_abi_build_builtin_va_list
    -+#else
    - #undef TARGET_BUILD_BUILTIN_VA_LIST
    - #define TARGET_BUILD_BUILTIN_VA_LIST aarch64_build_builtin_va_list
    -+#endif
    - 
    - #undef TARGET_CALLEE_COPIES
    - #define TARGET_CALLEE_COPIES hook_bool_CUMULATIVE_ARGS_arg_info_false
    -@@ gcc/config/aarch64/aarch64.cc: aarch64_run_selftests (void)
    - #undef  TARGET_EXPAND_BUILTIN
    - #define TARGET_EXPAND_BUILTIN aarch64_expand_builtin
    + #undef TARGET_EXPAND_BUILTIN_VA_START
    + #define TARGET_EXPAND_BUILTIN_VA_START aarch64_expand_builtin_va_start
      
     +#if TARGET_AARCH64_MS_ABI == 1
     +#undef TARGET_ENUM_VA_LIST_P
    @@ gcc/config/aarch64/aarch64.cc: aarch64_run_selftests (void)
     +#define TARGET_CANONICAL_VA_LIST_TYPE \
     +  aarch64_ms_variadic_abi_canonical_va_list_type
     +
    -+#undef TARGET_EXPAND_BUILTIN_VA_START
    -+#define TARGET_EXPAND_BUILTIN_VA_START \
    -+  aarch64_ms_variadic_abi_expand_builtin_va_start
    -+#else
    - #undef TARGET_EXPAND_BUILTIN_VA_START
    - #define TARGET_EXPAND_BUILTIN_VA_START aarch64_expand_builtin_va_start
    -+#endif
    - 
    - #undef TARGET_FOLD_BUILTIN
    - #define TARGET_FOLD_BUILTIN aarch64_fold_builtin
    - 
    -+#if TARGET_AARCH64_MS_ABI == 1
     +#undef TARGET_ARG_PARTIAL_BYTES
     +#define TARGET_ARG_PARTIAL_BYTES aarch64_arg_partial_bytes
     +#endif
     +
    - #undef TARGET_FUNCTION_ARG
    - #define TARGET_FUNCTION_ARG aarch64_function_arg
    + #undef TARGET_FOLD_BUILTIN
    + #define TARGET_FOLD_BUILTIN aarch64_fold_builtin
      
     @@ gcc/config/aarch64/aarch64.cc: aarch64_run_selftests (void)
      #undef TARGET_GIMPLE_FOLD_BUILTIN
    @@ gcc/config/aarch64/aarch64.cc: aarch64_run_selftests (void)
      #undef  TARGET_INIT_BUILTINS
      #define TARGET_INIT_BUILTINS  aarch64_init_builtins
     @@ gcc/config/aarch64/aarch64.cc: aarch64_libgcc_floating_mode_supported_p
    - #undef TARGET_ASM_POST_CFI_STARTPROC
      #define TARGET_ASM_POST_CFI_STARTPROC aarch64_post_cfi_startproc
      
    -+#if TARGET_AARCH64_MS_ABI == 1
    -+#undef TARGET_STRICT_ARGUMENT_NAMING
    -+#define TARGET_STRICT_ARGUMENT_NAMING \
    -+  aarch64_ms_variadic_abi_strict_argument_naming
    -+#else
      #undef TARGET_STRICT_ARGUMENT_NAMING
    - #define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true
    -+#endif
    +-#define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true
    ++#define TARGET_STRICT_ARGUMENT_NAMING \
    ++  aarch64_variadic_abi_strict_argument_naming
      
      #undef TARGET_MODE_EMIT
      #define TARGET_MODE_EMIT aarch64_mode_emit
-- 
2.51.1

Reply via email to