This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch i386]: Implementation for call abi switching via attribute.
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Kai Tietz <Kai dot Tietz at onevision dot com>
- Cc: Mark Mitchell <mark at codesourcery dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Jan Hubicka <hubicka at ucw dot cz>, Jan Hubicka <jh at suse dot cz>, Kai Tietz <ktietz70 at googlemail dot com>, Richard Guenther <richard dot guenther at gmail dot com>
- Date: Mon, 2 Jun 2008 17:55:27 +0200
- Subject: Re: [patch i386]: Implementation for call abi switching via attribute.
- References: <483EC365.9080500@codesourcery.com> <OFD71B8C34.4D2A6D6E-ONC1257459.00403EB8-C1257459.0040A6F7@onevision.de>
>
> 2008-05-30 Kai Tietz <kai.tietz@onevision.com>
>
> * doc/tm.texi (OVERRIDE_ABI_FORMAT): New.
> * doc/extend.texi (ms_abi,sysv_abi): New attribute description.
> * function.c (allocate_struct_function): Use of
> OVERRIDE_ABI_FORMAT.
> * config/i386/cygming.h (TARGET_64BIT_MS_ABI): Make use
> of cfun and DEFAULT_ABI to deceide abi mode.
> (DEFAULT_ABI): New.
> (REG_PARM_STACK_SPACE): Removed.
> (OUTGOING_REG_PARM_STACK_SPACE): Removed.
> (STACK_BOUNDARY): Use default target to deceide stack boundary.
> * config/i386/i386-protos.h (ix86_cfun_abi): New.
> (ix86_function_abi): Likewise.
> (ix86_function_type_abi): Likewise.
> (ix86_call_abi_override): Likewise.
> * config/i386/i386.c (override_options): Replace
> TARGET_64BIT_MS_ABI.
> (X86_64_VARARGS_SIZE): Replace REGPARM_MAX and SSE_REGPARM_MAX by
> abi
> specific defines.
> (X86_64_REGPARM_MAX): New.
> (X86_64_SSE_REGPARM_MAX): New.
> (ix86_handle_cconv_attribute): Replace TARGET_64BIT_MS_ABI.
> (ix86_function_regparm): Handle user calling abi.
> (ix86_function_arg_regno_p): Replace TARGET_64BIT_MS_ABI
> by DEFAULT_ABI versus SYSV_ABI check.
> (ix86_reg_parm_stack_space): New.
> (ix86_function_type_abi): New.
> (ix86_call_abi_override): New.
> (ix86_function_abi): New.
> (ix86_cfun_abi): New.
> (init_cumulative_args): Call abi specific initialization.
> (function_arg_advance): Remove TARGET_64BIT_MS_ABI.
> (function_arg_64): Extend SSE_REGPARM_MAX check.
> (function_arg (): Remove TARGET_64BIT_MS_ABI.
> (ix86_pass_by_reference): Likewise.
> (ix86_function_value_regno_p): Likewise.
> (function_value_64): Replace REGPARM_MAX, and SSE_REGPARM_MAX.
> (ix86_function_value_1): Replace TARGET_64BIT_MS_ABI.
> (return_in_memory_ms_64): Replace TARGET_64BIT_MS_ABI.
> (ix86_build_builtin_va_list): Replace TARGET_64BIT_MS_ABI.
> (setup_incoming_varargs_64): Adjust regparm for call abi.
> (ix86_setup_incoming_varargs): Replace TARGET_64BIT_MS_ABI.
> (ix86_va_start): Likewise.
> (ix86_gimplify_va_arg): Likewise.
> (ix86_expand_prologue): Likewise.
> (output_pic_addr_const): Likewise.
> (ix86_init_machine_status): Initialize call_abi by DEFAULT_ABI.
> (x86_this_parameter): Replace TARGET_64BIT_MS_ABI.
> (x86_output_mi_thunk): Likewise.
> (x86_function_profiler): Likewise.
> * config/i386/i386.h (TARGET_64BIT_MS_ABI): Use ix64_cfun_abi.
> (SYSV_ABI, MS_ABI): New constants.
> (DEFAULT_ABI): New.
> (init_regs): Add prototype of function in regclass.c file.
> (OVERRIDE_ABI_FORMAT): New.
> (CONDITIONAL_REGISTER_USAGE): Remove TARGET_64BIT_MS_ABI part.
> (REG_PARM_STACK_SPACE): Use ix86_reg_parm_stack_space.
> (OUTGOING_REG_PARM_STACK_SPACE): New.
> (ix86_reg_parm_stack_space): New prototype.
> (CUMULATIVE_ARGS): Add call_abi member.
> (machine_function): Add call_abi member.
> * config/i386/mingw32.h (EXTRA_OS_CPP_BUILTINS): Replace
> TARGET_64BIT_MS_ABI
> by DEFAULT_ABI compare to MS_ABI.
>
> Is this patch ok for apply on trunk?
Yes, it is OK (at leat my understanding is that the non-target specific
bits are OK with Mark ;)
Please add testcases to excercise main cases where APIs differ and we
can work on the call clobbering problems.
Honza