This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues.
- From: Bernd Edlinger <bernd dot edlinger at hotmail dot de>
- To: Daniel Santos <daniel dot santos at pobox dot com>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Cc: Uros Bizjak <ubizjak at gmail dot com>, Jan Hubicka <hubicka at ucw dot cz>, "Gerald Pfeifer" <gerald at pfeifer dot com>, Joseph Myers <joseph at codesourcery dot com>, "Sandra Loosemore" <sandra at codesourcery dot com>
- Date: Tue, 13 Jun 2017 11:31:38 +0000
- Subject: Re: [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues.
- Authentication-results: sourceware.org; auth=none
- Authentication-results: pobox.com; dkim=none (message not signed) header.d=none;pobox.com; dmarc=none action=none header.from=hotmail.de;
- References: <20170611171246.18689-1-daniel.santos@pobox.com> <20170611203500.20779-1-daniel.santos@pobox.com>
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
On 06/11/17 22:35, Daniel Santos wrote:
> I appear to have forgotten to cc gcc-patches, sorry about that.
>
> There are currently three cases where we issue a warning when disabling
> -mcall-ms2sysv-xlogues for a function, but I never added a proper
> warning, so there's no mechanism for disabling it. This is something
> that I meant to address sooner. I'm thinking that it's better to just
> remove the warning entirely and document these cases, rather than adding
> a new warning. Any thoughts?
>
> These are the conditions:
>
> * the use of -fsplit-stack,
> * the use of static call chains (not sure if we can ever have that), and
> * if the function calls __buildin_eh_return.
>
> Some of these cases can likely be supported, but they are just on the
> "not yet tested" list.
>
> 2017-06-11 Daniel Santos <daniel.santos@pobox.com
>
> * config/i386/i386.c (warn_once_call_ms2sysv_xlogues): Remove.
> (ix86_compute_frame_layout): Don't call warn_once_call_ms2sysv_xlogues.
> (ix86_expand_call): Likewise.
>
Your change log should also mention the changed doc/invoke.texi
> Thanks,
> Daniel
>
> Signed-off-by: Daniel Santos <daniel.santos@pobox.com>
> ---
> gcc/config/i386/i386.c | 26 +++-----------------------
> gcc/doc/invoke.texi | 25 ++++++++++++++++++++-----
> 2 files changed, 23 insertions(+), 28 deletions(-)
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index d5c2d46bf5e..2dc6e53c765 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -12772,18 +12772,6 @@ ix86_builtin_setjmp_frame_value (void)
> return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx;
> }
>
> -/* Emits a warning for unsupported msabi to sysv pro/epilogues. */
> -static void warn_once_call_ms2sysv_xlogues (const char *feature)
> -{
> - static bool warned_once = false;
> - if (!warned_once)
> - {
> - warning (0, "-mcall-ms2sysv-xlogues is not compatible with %s",
> - feature);
> - warned_once = true;
> - }
> -}
> -
> /* When using -fsplit-stack, the allocation routines set a field in
> the TCB to the bottom of the stack plus this much space, measured
> in bytes. */
> @@ -12814,18 +12802,10 @@ ix86_compute_frame_layout (void)
> gcc_assert (TARGET_SSE);
> gcc_assert (!ix86_using_red_zone ());
>
> - if (crtl->calls_eh_return)
> + if (crtl->calls_eh_return || ix86_static_chain_on_stack)
> {
> gcc_assert (!reload_completed);
> m->call_ms2sysv = false;
> - warn_once_call_ms2sysv_xlogues ("__builtin_eh_return");
> - }
> -
> - else if (ix86_static_chain_on_stack)
> - {
> - gcc_assert (!reload_completed);
> - m->call_ms2sysv = false;
> - warn_once_call_ms2sysv_xlogues ("static call chains");
> }
>
> /* Finally, compute which registers the stub will manage. */
> @@ -29290,9 +29270,9 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
> else if (ix86_function_ms_hook_prologue (current_function_decl))
> ;
>
> - /* TODO: Cases not yet examined. */
> + /* TODO: Compatibility not yet examined. */
> else if (flag_split_stack)
> - warn_once_call_ms2sysv_xlogues ("-fsplit-stack");
> + ;
>
> else
> {
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index c1168823af7..eec02b43a4f 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -25389,11 +25389,26 @@ using the function attributes @code{ms_abi} and @code{sysv_abi}.
> @opindex mno-call-ms2sysv-xlogues
> Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
> System V ABI function must consider RSI, RDI and XMM6-15 as clobbered. By
> -default, the code for saving and restoring these registers is emitted inline,
> -resulting in fairly lengthy prologues and epilogues. Using
> -@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
> -use stubs in the static portion of libgcc to perform these saves and restores,
> -thus reducing function size at the cost of a few extra instructions.
> +default, the instructions for saving and restoring these registers are emitted
> +inline, resulting in fairly lengthy pro- and epilogues. Using
> +@option{-mcall-ms2sysv-xlogues} emits pro- and epilogues that use stubs in the
> +static portion of libgcc to perform these saves and restores, thus reducing
> +function size at the cost of executing a few extra instructions. This cost is
> +theoretically mitigated or eliminated by reduced instruction cache utilization,
> +temporal locality of the stubs, and the stubs' use of MOV instructions over
> +PUSH and POP.
> +
> +This option is not supported with SEH, so it is completely unavailable on
> +Windows. It is also silently disabled if a function:
> +
> +@enumerate
> +@item is built with @option{-mno-sse2} or @option{-fsplit-stack},
> +@item has @code{__attribute__ ((ms_hook_prologue))}, or
> +@item either throws an exception or explicitly calls @code{__builtin_eh_return}.
> +@end enumerate
> +
> +Support for @option{-fsplit-stack} and @code{__builtin_eh_return} may be
> +added at some time in the future, but has not yet been tested.
>
> @item -mtls-dialect=@var{type}
> @opindex mtls-dialect
>