[patch i386]: Implementation for call abi switching via attribute.

Kai Tietz Kai.Tietz@onevision.com
Tue Jun 3 13:04:00 GMT 2008


"Richard Guenther" <richard.guenther@gmail.com> wrote on 03.06.2008 
14:54:39:

> On Tue, Jun 3, 2008 at 2:29 PM, Kai Tietz <Kai.Tietz@onevision.com> 
wrote:
> > Richard,
> >
> > I tested this patch on w64 and bootstrapped here very well. I expected
> > that the patch was tested by Honza for linux64, too. Sadly I have no 
such
> > system todo this by myself. Could please try the following patch if it
> > bootstraps for linux64?
> 
> That fixes bootstrap.  Ok with a ChangeLog entry.
> 
> Thanks,
> Richard.

ChangeLog

2008-06-03  Kai Tietz  <kai.tietz@onevision.com>

        * config/i386/i386-protos.h (ix86_reg_parm_stack_space): New.
        * config/i386/i386.h (ix86_reg_parm_stack_space): Removed
        prototype.
        * config/i386/i386.c (ix86_reg_parm_stack_space): Changed
        return type to int.
        (ix86_call_abi_override): Remove check for call_used_regs.

Ok, for apply with this changelog?

Thanks,
  Kai

> >
> > |  (\_/)  This is Bunny. Copy and paste Bunny
> > | (='.'=) into your signature to help him gain
> > | (")_(") world domination.
> >
> > "Richard Guenther" <richard.guenther@gmail.com> wrote on 03.06.2008
> > 13:57:49:
> >
> >> On Tue, Jun 3, 2008 at 1:49 PM, Richard Guenther
> >> <richard.guenther@gmail.com> wrote:
> >> > On Mon, Jun 2, 2008 at 5:55 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
> >> >>>
> >> >>> 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.
> >> >
> >> > This broke bootstrap on x86_64-unknown-linux-gnu:
> >> >
> >> > cc1: warnings being treated as errors
> >> > ../../trunk/gcc/function.c: In function 'assign_parms':
> >> > ../../trunk/gcc/function.c:3039: error: comparison between signed
> >> and unsigned
> >> > ../../trunk/gcc/function.c:3039: error: signed and unsigned type in
> >> > conditional expression
> >> >
> >> > How did you test your patch?
> >>
> >> Next error:
> >>
> >> cc1: warnings being treated as errors
> >> ../../trunk/gcc/config/i386/i386.c: In function
> > 'ix86_call_abi_override':
> >> ../../trunk/gcc/config/i386/i386.c:3614: error: the address of
> >> 'call_used_regs' will always evaluate as 'true'
> >> ../../trunk/gcc/config/i386/i386.c:3623: error: the address of
> >> 'call_used_regs' will always evaluate as 'true'
> >>
> >> Richard.
> >>
> >
> 



More information about the Gcc-patches mailing list