This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch i386] Enable attribute based calling convention switching and support vaarg.
- From: "Richard Guenther" <richard dot guenther at gmail dot com>
- To: "Kai Tietz" <ktietz70 at googlemail dot com>
- Cc: "GCC Patches" <gcc-patches at gcc dot gnu dot org>, "Mark Mitchell" <mark at codesourcery dot com>, "Jan Hubicka" <jh at suse dot cz>, "Jan Hubicka" <hubicka at ucw dot cz>, "Kai Tietz" <Kai dot Tietz at onevision dot com>
- Date: Mon, 30 Jun 2008 14:06:24 +0200
- Subject: Re: [patch i386] Enable attribute based calling convention switching and support vaarg.
- References: <90baa01f0806280625v7c2625f5ya57e1a85b40df330@mail.gmail.com>
On Sat, Jun 28, 2008 at 3:25 PM, Kai Tietz <ktietz70@googlemail.com> wrote:
> Hello,
>
> This is the updated version of the vaarg builtin and calling
> convention abi switching patch.
Please change the target hooks as follows.
canonical_va_list_type should return NULL_TREE for types that are
not a variant of either va_list type.
cfun_abi_va_list should not handle NULL_TREE as current_function_decl,
instead you should pass that. The name should be changed to
fn_abi_va_list as well - after all, it's not about the current function.
In this context the gimplify_va_arg_expr hunk should properly use
want_va_type and have_va_type to the function decls parameter type
and the argument type. In the current state of the patch it is confusing
what is actually done.
Richard.
> ChangeLog
>
> 2008-06-28 Kai Tietz <kai.tietz@onevision.com>
>
> * config.gcc (extra_headers): Add cross-stdarg.h for target
> x86_64-*-* and i?86-*-*.
> * config/i386/cross-stdarg.h: New.
> * builtins.c (std_cfun_abi_va_list): New.
> (std_canonical_va_list_type): New.
> (stabilize_va_list): Replace va_list_type_node use by
> mtarget.canonical_va_list_type.
> (gimplify_va_arg_expr): Likewise.
> (expand_builtin_va_copy): Replace va_list_type_node use by
> mtarget.cfun_abi_va_list.
> * tree-sra.c (is_va_list_type): New helper.
> (decl_can_be_decomposed_p): Replace
> va_list_type_node use by is_va_list_type.
> * tree-ssa-ccp.c (optimize_stdarg_builtin): Likewise.
> * tree-stdarg.c (execute_optimize_stdarg): Likewise.
> * c-common.c (c_common_nodes_and_builtins): Use TARGET_ENUM_VA_LIST.
> * config/i386/i386-protos.h (ix86_get_valist_type): New.
> (ix86_enum_va_list): New.
> * config/i386/i386.c (sysv_va_list_type_node): New.
> (ms_va_list_type_node): New.
> (ix86_function_type_abi): Remove sorry.
> (ix86_build_builtin_va_list_abi): New.
> (ix86_build_builtin_va_list): Call ix86_build_builtin_va_list_abi
> for 64-bit targets.
> (ix86_va_start): Replace va_list_type_node by sysv_va_list_type_node.
> (ix86_init_builtins_va_builtins_abi): New.
> (ix86_init_builtins): Use ix86_init_builtins_va_builtins_abi
> for 64-bit targets.
> (ix86_handle_abi_attribute): New.
> (attribute_spec): Add sysv_abi and ms_abi.
> (ix86_cfun_abi_va_list): New.
> (ix86_canonical_va_list_type): New.
> (ix86_enum_va_list): New.
> (TARGET_CFUN_ABI_VA_LIST): New.
> (TARGET_CANONICAL_VA_LIST_TYPE): New.
> * config/i386/i386.h (TARGET_ENUM_VA_LIST): New.
> * doc/tm.texi (TARGET_CFUN_ABI_VA_LIST): New.
> (TARGET_CANONICAL_VA_LIST_TYPE): New.
> (TARGET_ENUM_VA_LIST): New.
> * expr.h (std_cfun_abi_va_list): New.
> (std_canonical_va_list_type): New.
> * target-def.h (TARGET_CFUN_ABI_VA_LIST): New.
> (TARGET_CANONICAL_VA_LIST_TYPE): New.
> (TARGET_INITIALIZER): Add TARGET_CFUN_ABI_VA_LIST and
> TARGET_CANONICAL_VA_LIST_TYPE.
> * target.h (struct gcc_target): Add cfun_abi_va_list hook
> and canonical_va_list_type hook.
>
>
> 2008-06-28 Kai Tietz <kai.tietz@onevision.com>
>
> * gcc.dg/callabi/callabi.h: New.
> * gcc.dg/callabi/vaarg-1.c: New.
> * gcc.dg/callabi/vaarg-2.c: New.
> * gcc.dg/callabi/vaarg-3.c: New.
> * gcc.dg/callabi/func-1.c: New.
>
> Is this patch ok for apply?
> I tested this patch on x86_64-pc-mingw32 target. All new testcases
> work without any problems.
>
> Cheers,
> Kai
>
> --
> | (\_/) This is Bunny. Copy and paste
> | (='.'=) Bunny into your signature to help
> | (")_(") him gain world domination
>