On Wed, Jul 8, 2026 at 2:03 PM H.J. Lu <[email protected]> wrote:
>
> In 64-bit mode, preserve_none attribute uses a different calling
> convention. Ignore MS ABI with preserve_none attribute to always
> use the preserve_none calling convention with preserve_none
> attribute.
>
1) gcc/config/i386/i386.cc:4802 still uses cum->call_abi == MS_ABI for
incoming varargs. x86_64_cumulative_ms_abi_p should also be used
there?
4802 if (cum->call_abi == MS_ABI)
4803 setup_incoming_varargs_ms_64 (&next_cum);
4804 else
4805 setup_incoming_varargs_64 (&next_cum);
4806}
2) gcc/config/i386/i386.cc:3644 has the same raw MS ABI test in
ix86_pass_by_reference?
3634static bool
3635ix86_pass_by_reference (cumulative_args_t cum_v, const
function_arg_info &arg)
3636{
3637 CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
3638
3639 if (TARGET_64BIT)
3640 {
3641 enum calling_abi call_abi = cum ? cum->call_abi : ix86_abi;
3642
3643 /* See Windows x64 Software Convention. */
3644 if (call_abi == MS_ABI)
3645 {
3646 HOST_WIDE_INT msize = GET_MODE_SIZE (arg.mode);
3647
One question, under MS_ABI use 4 registers for parameter passing,
SYSV_ABI use 8, under preserve_none, should we also use 8 registers
for parameter passing for MS_ABI?
--
BR,
Hongtao